NeoDash is an open source tool for visualizing your Neo4j data. It lets you group visualizations together as dashboards, and allow for interactions between reports.
Neodash supports presenting your data as tables, graphs, bar charts, line charts, maps and more. It contains a Cypher editor to directly write the Cypher queries that populate the reports. You can save dashboards to your database, and share them with others.
There are three ways to run the application:
- You can install NeoDash into Neo4j Desktop from the graph app gallery. NeoDash will automatically connect to your active database.
- You can run NeoDash from a web browser by visiting http://neodash.graphapp.io.
- For offline deployments, you can build the application yourself. See the developer guide below.
Pull the latest image from Docker Hub to run the application locally:
# Run the application on http://localhost:8080
docker pull nielsdejong/neodash:latest
docker run -it --rm -p 8080:80 nielsdejong/neodash
NeoDash is built with React. You'll need npm
installed to run the web app.
Use a recent version of
npm
andnode
to build NeoDash. The application has been tested with npm 8.3.1 & node v17.4.0.
To run the application in development mode:
- clone this repository.
- open a terminal and navigate to the directory you just cloned.
- execute
npm install
to install the necessary dependencies. - execute
npm run dev
to run the app in development mode. - the application should be available at http://localhost:3000.
To build the app for production:
- follow the steps above to clone the repository and install dependencies.
- execute
npm run build
. This will create abuild
folder in your project directory. - deploy the contents of the build folder to a web server. You should then be able to run the web app.
A pre-built Docker image is available on DockerHub. This image is built using the default configuration (running in editor mode, without SSO).
Make sure you have a recent version of docker
installed to build the multi-stage NeoDash image and run it.
On Unix (Mac/Linux) systems:
$ ./scripts/docker-build-run-unix.bash
If you use Windows, you should have installed WSL. In WSL, you can run the script as follows:
$ ./scripts/docker-build-run-windows.bash
Then visit http://localhost:8080
in your browser.
NeoDash can be deployed in a 'standalone mode' for dashboard viewers. This mode will:
- Disable all editing options
- Have a hardcoded Neo4j URL and database name
- Load a dashboard from Neo4j with a fixed name.
The diagram below illustrates how NeoDash standalone mode can be deployed next to a standard 'Editor Mode' instance:
You can configure an instance to run as standalone by changing the variables in scripts/docker-build-run-unix.bash
, or, if you're not using docker, directly modifying public/config.json
. Note that the editor mode is determined at runtime by the React app, and not at build time. You therefore do not need to (re-)build the React application, just the image.
There are two categories of extensions to NeoDash you can build:
- Core Dashboard Functionality
- Custom Reports
The first will require some knowledge about React, Redux, and app internals. Some advanced level knowledge is therefore highly recommended. The second is much simpler, and you should be able to plug in your own visualizations with minimal JS knowledge.
To extend the core functionality of the app, it helps to be familiar with the following concepts:
- ReactJS
- Redux (State management for React)
- Redux Selectors
- Redux Thunks
The image below contains a high-level overview of the component hierarchy within the application. The following conceptual building blocks are used to create the interface:
- The Application - highest level in the component structure. Handles all application-level logic (e.g. initalizing the app).
- Modals - all pop-up windows used by the tool. (Connection modal, save-dashboard modal, errors/warnings, etc.)
- Drawer - the sidebar on the left side of the screen. Contains buttons to perform application-level actions.
- The Dashboard - Main dashboard component. Renders components dynamically based on the current state.
- Dashboard Header - the textbox at the top of the screen that lets you set a title for the dashboard, plus the page selector.
- Pages - a dashboard has one or more pages, each of which can have a list of cards.
- Cards - a 'block' inside a dashboard. Each card contains a 'view' window, and a 'settings' window.
- Card View - the front of the card containing the selected report.
- Card Settings - the back of the card, containing the cypher editor and advanced settings for the report.
- Card View Header - the header of the card, containing a text box that acts as the name of the report.
- Report - the component inside the card view that handles query execution and result parsing. Contains a single chart (visualization)
- Card View Footer - The footer of the card view. Depending on the type, contains several 'selectors' that modify the visualization.
- Card Settings Header - Header of the card settings, used for moving/deleting the card.
- Card Settings Content - the component containing the main content of the report. This is most often the Cypher query editor.
- Card Settings Footer - the 'footer' of the card. This contains the 'advanced settings' window for reports.
- Charts - the different visualizations used by the application: bar charts, tables, graphs, etc.
As of v2.0, NeoDash is easy to extend with your own visualizations. There are two steps to take to plug in your own charts:
All NeoDash charts implement the interface defined in src/charts/Chart.tsx
. A custom chart must do the same. the following parameter as passed to your chart from the application:
records
: a list of Neo4j Records. This is the raw data returned from the Neo4j driver.settings
: a dictionary of settings as defined under "advanced report settings" for each report. You can use these values to customize your visualization based on user input.selection
: a dictionary with the selection made in the report footer.dimensions
: an array with the dimensions of the report (mostly not needed, charts automatically fill up space).queryCallback
: a way for the report to read more data from Neo4j, on interactions.setGlobalParameter
: a way for the report to set globally available Cypher parameters, on interactions.
Make sure that your component renders a React component. your component will be automatically scaled to the size of the report. See the other charts in src/charts/
for examples.
To let users choose your visualization, you must add it to the app's report configuration. This config is located in src/config/ReportConfig.tsx
, and defined by the dictionary REPORT_TYPES
.
To add your visualization to the config, add a new key to the REPORT_TYPES
dictionary with a unique name. The entry's value is an object which can contain the following fields:
label
: a display name for the visualization. Mandatory.component
: the React component that renders the visualization. Mandatory.helperText
: a string that is show under the query box in the report settings. Mandatory.selection
: a list that contains each of the selection boxes present in the report footer. Optional.settings
: a list of selection boxes that shows under the advanced settings. Optional.maxRecords
: a hard limit on the number of records the visualization can handle. Mandatory.useRecordMapper
: whether to use the in-built record mapper to fix your results in a specific format. Optional.useNodePropsAsFields
: whether to use the node property selector as a report footer override. Optional.
If all works, please consider contributing your code to this repository.
If you have any questions about NeoDash, please reach out. For feature requests, consider opening an issue(link) on GitHub.