Recent Updates to Neo4j ✿ Bloom

Graph databases are the foundation for intelligent transformations increasingly showing their value in numerous domains, including:

  • supply chain management,
  • cyber security,
  • investigative analysis,
  • public health,
  • and predictive analytics, just to name a few.

Visualizations are a powerful way to bring this value into focus for a wider audience. Bloom is Neo4j’s graph visualization tool, and has been maturing over the past couple of years.

In this post, I’d like to go over a number of the key changes from the past two versions of Bloom, and discuss how they might be helpful to analysts and data scientists, as well as developers involved in these specialties.

To do this, I’ll focus on three areas of improvement: performance, usability, and analytic features.

Key Takeaways

  • Neo4j Bloom helps analysts and non-technical users in numerous domains better understand & leverage the power of Neo4j
  • Neo4j Bloom continues to evolve with recent improvements to performance, usability and analytic capabilities
  • We want your feedback!
Photo by Omar Flores on Unsplash


Using the Reactive Driver

The first set of changes I’ll highlight are some performance enhancements. In version 1.6, Bloom started taking advantage of Reactive drivers. Bloom uses Neo4j’s JavaScript driver for retrieving data from the database.

Fetching Large Amount of Data Using the Neo4j Reactive Driver: The Bloom Case

Reactive drivers were introduced in Neo4j 4.0, and Bloom, a React based JavaScript application, now uses the latest JavaScript Reactive driver for Neo4j.

This lets us improve the responsiveness of queries, and also reduces database load. You can read more about how Bloom manages queries in stages in this blog. The switch to this driver should result in overall faster performance when interacting with Bloom, particularly on larger data sets.

Search Performance

Also related to search, Bloom 1.6.0 saw improvements in performance related to suggestions offered when using the near-natural language search box.

As search terms are entered into the search box, Bloom attempts to identify database schema matches and suggest those in the context box below. Changes were recently implemented to improve the speed with which these suggestions appear, by making some changes to how we cache index data and the logic that identifies potential suggestions.

For example, previously Bloom would search for terms matching the characters entered even if none of the prior characters resulted in a match — now Bloom avoids searching for values when it’s established that the first few characters don’t match anything in the database.

Finally, another performance enhancement centers on Bloom’s physics-based visualization layout. Particularly for large graphs shown in Bloom, changing the focus to particular nodes (for example, when using the “Fit to selection” action or adding nodes by expanding) should now be a smoother and quicker visual experience. Visualization and graph layout continue to be important areas of work as we strive to build the best experience possible.


Photo by Alvaro Reyes on Unsplash

In addition to performance enhancements, a number of usability enhancements have been added to Bloom in recent versions.

Perhaps the most obvious change for users will be the automatic generation of a perspective when you load Bloom for the first time. Perspectives are a unique feature of Bloom that allow users to define just the elements of the underlying database they want to include in their visualization.

Perspectives – Neo4j Bloom

This can be very useful, especially when dealing with a large and diverse underlying data model — some users may be interested in certain categories and properties (for example, nodes of category Customer and Address along with a lives_at relationship) while others may be interested in different types of nodes and relationships (such as Product and Customer nodes, and a transaction relationship). Perspectives also allow users to retain styling and filtering rules.

Prior to version 1.7.0, Bloom would show the Perspective Gallery before loading a scene.

Bloom perspective gallery

If a perspective has never been created on the database being opened, Bloom will now automatically generate a perspective by sampling the database and displaying some subset of data to start exploring. Specifically, Bloom will load one category into the auto-generated perspective for every label found in the database.

For each label, Bloom will sample one node and add the property keys and types on those category to the perspective.

As Bloom loads more nodes through user interactions, it will re-scan the properties and add any new ones found to the perspective — this is true even for user-generated perspectives.

Also check out the Bloom manual for more details:

Visual Tour – Neo4j Bloom

In addition to auto-perspective, a few more straightforward usability improvements have recently appeared. Namely:

  • You can now set the session timeout value in the settings drawer.
  • The powerful Search Phrases feature has also been updated with auto-save, so Cypher queries and other details of search phrases will automatically be saved as you type.
  • Finally, a keyboard shortcut has been added to quickly clear the scene in Bloom if you want to start with a blank canvas — Cmd+Delete on Mac or Ctrl+Delete on Windows/Linux.

Styling & Rendering

Bloom has recently also benefited from some improvements to better enable the graph analytics work it supports. One aspect of the underlying graph model that can sometimes be confusing is the fact that nodes might have more than one label.

Styling Order

In Bloom, we use categories to define the label we use to identify nodes of a particular type. For example, you might have a node with both a User and a Troll label. In Bloom, you could interact with this node using either (expressed as a category).

  1. If you decide to style nodes, for example, based on the User label, then all nodes having the label User will take on the style you specify (perhaps you make them yellow, like in the first image below).
  2. Similarly, you could apply a different style to all nodes with the Troll label (let’s make them blue).
Prior to version 1.7, this would mean the color applied to a node with both labels would depend on the order in which the styling rules were applied.

Now, users can drag categories in the perspective drawer to set the order in which styles will be applied to nodes with multiple labels.

Categories above will take precedence over those below. As you can see below, a node can have both a User and a Troll label. In the first image we have User above Troll, so all nodes with the User label are yellow.

“User” is above “Troll” so all nodes with label “User” are yellow, even if they also have label “Troll”

In the second image, we place Troll above User. Now, all of the nodes with label Troll appear using the default styling for Troll, blue in this case. User nodes that don’t also have a Troll label remain yellow.

“Troll” is above “User” so all nodes with label “Troll” are blue, even if they also have label “User”


In another recent change, users can now also filter the scene using the funnel icon just below the search box.

This lets you reduce the graph on scene according to your needs without having to dismiss nodes and relationships — elements that are filtered out simply go grey so long as the filter is applied, making it easier to find what you’re looking for.

With the Dismiss button at the bottom of the filter pane, you can also choose to dismiss nodes that have been greyed out, or filtered from the scene.

Graph with filtered out elements

Between Predicate

A between condition has also been added to the styling rules and the filter pane, enabling styling and filtering based on property values that fall between to user definable parameters.

Style/Filter “between”

There have been a number of other changes and enhancements along the way, and lots of other upgrades and refinements are planned.

These are just some of the perhaps more interesting and useful recent changes to Bloom, and we look forward to bringing you more (and hearing what’s important to you!). Please provide feedback to us using the built-in Feedback mechanism in Bloom or the link below.

Feature Requests | Neo4j Bloom

Recent Updates to Neo4j ✿ Bloom was originally published in Neo4j Developer Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.