At Neo4j, we develop our software in the open at GitHub. This provides transparency for you, our users, and allows you to fork the software to make your own additions and enhancements. We also provide areas specifically for community contributions, in particular the neo4j-contrib space.
There's an active Neo4j Online Community where we work directly with the community. If you're not already a member, sign up!
We love our community and wouldn't be where we are without you.
Where you raise an issue depends largely on the nature of the problem.
Firstly, if you are an Enterprise customer, you might want to head over to our Customer Support Portal.
There are plenty of public channels available too, though. If you simply want to get started or have a question on how to use a particular feature, ask a question in Neo4j Online Community. If you think you might have hit a bug in our software (it happens occasionally!) or you have specific feature request then use the issue feature on the relevant GitHub repository. Check first though as someone else may have already raised something similar.
StackOverflow also hosts a ton of questions and might already have a discussion around your problem. Make sure you have a look there too.
Include as much information as you can in any request you make:
- Which versions of our products are you using?
- Which language (and which version of that language) are you developing with?
- What operating system are you on?
- Are you working with a cluster or on a single machine?
- What code are you running?
- What errors are you seeing?
- What solutions have you tried already?
If you want to contribute a pull request, we have a little bit of process you'll need to follow:
- Do all your work in a personal fork of the original repository
- Rebase, don't merge (we prefer to keep our history clean)
- Create a branch (with a useful name) for your contribution
- Make sure you're familiar with the appropriate coding style (this varies by language so ask if you're in doubt)
- Include unit tests if appropriate (obviously not necessary for documentation changes)
- Take a moment to read and sign our CLA
We can't guarantee that we'll accept pull requests and may ask you to make some changes before they go in. Occasionally, we might also have logistical, commercial, or legal reasons why we can't accept your work but we'll try to find an alternative way for you to contribute in that case. Remember that many community members have become regular contributors and some are now even Neo employees!
just js-devThis starts Vite watch builds and Jupyter Lab with hot module reloading. Changes to js-applet/src/ will auto-reload in active widget cells.
If you want to modify the python code, run:
just py-syncThis will install all required dev dependencies and install the package in editable mode.
In this section, we will provide some more specific information about how to work with this particular project.
- Install Python 3.10+
- We recommend installing just for running commands
Install the project's Python dependencies:
just py-syncApply and check python styling:
just py-styleTo run unit tests, execute:
just py-testAdditionally, there are integration tests that require an external data source. These require additional setup and configuration, such as environment variables specifying connection details.
To test the Neo4j and GDS related tests, execute:
just py-test-gdsThis will spinup a Neo4j container with the GDS plugin installed.
To run tests requiring a Snowflake connection, execute:
cd python-wrapper/
pytest tests/ --include-snowflakeThe project contains of three parts:
- a JavaScript applet under the
js-appletfolder - a Python package which loads the applet and offers convenience functions to pass data to the applet
- Jupyter notebooks to test the Python wrapper
vite.config.ts- Vite config for the lib build (widget.js + style.css for anywidget)vite.config.html.ts- Vite config for the HTML singlefile build (self-contained index.html)tsconfig.json- Configuration for TypeScript codepackage.json- For yarn, define dependencies andbuildtarget
Everything is configured inside pyproject.toml
To keep a consistent code-style, we use ruff and mypy.
For convenience there are a couple of just targets under justfile:
If you have an idea for a new tool or library, start by talking to other people in the community. Chances are that someone has a similar idea or may have already started working on it. The best software comes from getting like minds together to solve a problem. And we'll do our best to help you promote and co-ordinate your Neo4j ecosystem projects.
If you want to find out more about how you can contribute, head over to our website for more information.