Neo4j 3.5 changelog

Neo Technology Build Agent edited this page Oct 12, 2018 · 11 revisions



  • Consistency-checker PropertyReader detects circular property chains
  • Fixes an issue in IndexHits#getSingle() where it would miss an item when called after a previous call to IndexHits#hasNext().
  • Remove property key tokens limit from BatchInserterImpl.
  • Server plugins are now deprecated for removal in the next major release. We recommend that unmanaged extensions are used instead.
  • The neo4j-shell command, and the shell server, have been removed. We recommend using cypher-shell instead.


  • Fixes issue with index planning around predicates with dependencies. In particular, spatial bounding box queries can now be index backed even if the min and/or max expressions include variables.

  • Fix planner regression in which HashJoin + AllNodeScan was preferred

    over OptionalExpand in certain cases.

  • Fix ORDER BY + LIMIT 0 in slotted runtime


  • garbage collector log location is changed to be logs directory instead of neo4j home.


  • Properly handle multiple authorization providers. Fixes an issue where if one provider failed (e.g. connection to ldap failed) the user would end up un-authorized even though another provider had succeeded.
  • Fixes an authentication bug when using startTLS

Causal Clustering

  • Read replica copy store from single source


  • Fix issue where editor buttons would overflow the viewport
  • Fetch fresh version of remote guides on every request
  • Fix neo4j-browser not working properly when db auth is disabled
  • Future proof Neo4j Desktop integration by using the url field in connection info.
  • Fix rare neo4j-browser crash when clicking on yellow Cypher warning triangle
  • Fix crashing :queries frame in clustered environments when all members couldn't be reached



  • Remove cursor pooling on a page cache level.

  • Uses order from index seeks in Cypher instead of planning Sort operators, where possible. This will work only for a very limited set of queries and only for ascending order. Example MATCH (n:B) WHERE n.prop STARTS WITH 'foo' RETURN n.prop ORDER BY n.prop. In order to trigger index-backed ordering, it is currently always necessary to provide a Range predicate (n.prop STARTS WITH 'foo' or n.prop > 0 or ...).

    This also adds a new column to the ASCII art plan description: Order. The column describes the order of the outgoing rows of that operator.


  • Augment Cypher to support index-backed order on CONTAINS and ENDS WITH predicates. This is possible because all current indexes that support ordering solve these queries by a scan and filter, and therefore provide results in order.

  • Enable Index-backed order by in descending order from Cypher.

  • This changes the planner to use index provided properties (instead of going to the property store) in the following two cases:

    MATCH (n:L) WHERE n.prop <= 42 AND n.prop % 2 = 0 (usage in another predicate)

    MATCH (n:L) WHERE n.prop = 42 WITH n as m MATCH (m)-[r]-(o) RETURN m.prop (usage after a WITH)

  • Ensure renamed timezones are always returned the same way.

    RETURN datetime("2018-04-05T12:34:00[Canada/East-Saskatchewan]")
    MATCH (n) WHERE = datetime("2018-04-05T12:34:00[Canada/East-Saskatchewan]") RETURN

    Will now return the same object with timezone set to Canada/Saskatchewan, which Canada/East-Saskatchewan has been renamed to. Previously only the value read from store would be Canada/Saskatchewan

  • Fix bug in queries containing RETURN or WITH clauses including both a star and a pattern comprehesion (e.g. ... RETURN *, [ (a)-[:HAS_BUREAU]->(bureau:Bureau) | bureau.CREDIT_ACTIVE = "Active"] AS bureauStatus), which would previously fail with WITH/RETURN should note its Scope in the SemanticState.

  • Fix bug which would cause FunctionInvocation(...) has to type from semantic analysis errors for some complex WITH-clauses in a write query.

Causal Clustering

  • Check recovery status of store when bootstrapping cluster


  • Fix username not updating in sidebar when disconnecting
  • Improve Cypher result rendering performance
  • Prepare for Neo4j Desktop distribution


  • Allow disabling HTTP in Neo4j server and harness. Embedded Jetty server is not started when both HTTP and HTTPS are disabled. REST endpoints will not be available and server plugins / extensions will never be loaded or executed.



  • Upgrade the Bouncy Castle dependency to version 1.60.
  • Deprecate High Availability Edition.


  • Fix $12011 by providing the wanted functionality under a feature toggle.
  • Remove browser warnings when using temporal and spatial property accessors e.g. .year, .x.
  • Fix 12029 where combining multiple a IN with AND and OR could lead to the wrong result.

Causal Clustering

  • Cluster instances display additional information on availability endpoints to help in rolling upgrades
  • Unbind from cluster successful if already unbound


  • Revert mistakenly enabling NEO4J_DEBUG by default for neo4j-admin


  • Add :history clear command
  • Add pagecache hits and misses to plan output
  • Add complete support for bolt+routing://
  • Add Neo4j Community Forum link to sidebar
  • Enable users with non reader roles to connect
  • Fix :server switch bug in Neo4j Desktop environment



  • Fix bug causing property values that where too large for an index to slip through during population. This will later cause readers to fail upon reading from index with Read unreliable key. For further information on how to handle this issue, please see release notes.
  • Reuse threads between cleanup jobs during recovery. This fixes an issue where user would see java.lang.OutOfMemoryError: unable to create new native thread caused by Neo violating the number of allowed tasks per process, set by system.
  • Remove objenesis from the dependencies and from libraries included into distribution.
  • Fixes a native index issue where inserting large values, although within size limit, could result in attempt to write out of bounds on page. Any transaction experiencing this would be allowed to commit, but run into this issue when applying the changes to the index.
  • Remove from distribution libraries.


  • Fixed a bug where spatial range queries with inequalities would return points on the axes defined by the search points

  • Made error messages for functions applied to incompatible types more consistent

  • If the index can provide exact property values, they will be used starting of now. Indexes can always provide the values for equality predicates and all native indexes except the spatial index can also return the property values for other predicates. Lucene and spatial indexes cannot provide the values.

    An example of what improves: MATCH (n:N) WHERE n.prop > 10 RETURN n.propused to planned with a Projection. Now, the property values are obtained directly from the NodeIndexSeek. This will avoid additional lookups in the PropertyStore.

  • Fixes so when solving an OR predicate, other predicates are only considered solved if they were solved in both underlying operators.

  • Fix broken ON MATCH SET in PERIODIC COMMIT. This bug would show up as a problem to read properties in all the PERIODIC COMMIT commits except the first.



  • Add an eventually consistent update mode for the fulltext indexes.
  • All APIs, surfaces and features related to explicit/auto/manual/legacy indexes are now deprecated for removal in the next major release. People are encouraged to switch to schema indexes, and the new full-text indexes, instead.
  • Avoid ConcurrentModificationException in the SchemaCacheState copy-constructor.
  • Allow disabling the FileWatcher


  • Fixed issues with WRITE procedures interacting badly with their enclosing Cypher read queries by allowing authors to add an eager attribute to the @Procedure annotation.

Causal Clustering

  • Akka discovery
  • Bounded queue and batching for Raft content
  • Fix hostname regression


  • Removing the stracktrace of login errors in user log (neo4j.log)




  • Port okapi.schema() procedure to 3.4

  • date(null) used to falsely return the current date. Now it returns null instead. The same is true for all other temporal functions.

  • Give sensible error message for merge on null node.

  • Reverts the restriction on passing unknown keys to the point function. Behaviour is now as it was before, allowing complex maps. Users need to take note of the fact that this means a map like {x:1,y:2,z:3} will create a 2D point in Neo4j 3.1-3.3, but a 3D point in Neo4j 3.4 and later.

  • Pattern comprehensions in other expressions were not planned correctly. Example:

    size([ (a)-->(b:B) WHERE (b)-->(:C) ]). This is now fixed.


  • Add support for Powershell ConstrainedLanguage mode

Causal Clustering

  • ICE hostname verification


  • Procedures to list and kill network connections
  • Fix connection stop from failing because of rejected execution errors



  • Index provider for the fulltext index
  • Add support for attaching to running neo4j instance on Windows servers


  • Take Query Parameters over default arguments. If you don't provide actual arguments, but query parameters instead (like in CALL org.neo4j.aNodeWithLabel params = Map("label" -> "Cat") ) this will from now on use the provided parameters and override any default arguments. It was preferring default arguments before, if they existed.
  • Improve error message on non-node input in LockNodesPipe
  • Compiled ExpandInto respects relationship type

Causal Clustering

  • Fix log warning of replication retry attempts


  • Add toggle for multi statement cypher editor
  • Fix editor to handle string literals that contain new lines


  • Make authentication rate limits configurable



  • Parallel flushing and forcing of pages
  • Disable prometheus during backup to fix port conflict issues
  • Fix a bug whereby once a spatial index exists, all future spatial indexes of the same CRS will inherit the same settings, regardless of what the neo4j.conf settings say.


  • Fix a bug where predicates inside pattern comprehensions could end up not being correctly planned which could lead to incorrect results

  • Fix bug in duration.between() that would calculate wrong time difference for date times if the total difference was less than a whole day.

  • Don't use exact division in selectivity estimation

    We were using BigDecimal#divide without rounding mode when computing the selectivity. It uses exact division and does thus not handle numbers with non-terminating decimal expansions, e.g. 1/3 and 1/6.

Causal Clustering

  • Nicer store copy logging.

    Avoid logging stack trace on:

    • connection refused
    • topology lookup exception


  • Add support for multi-statement execution
  • Switch to React 16.4
  • Fix meta query to be more performant
  • Handle changelog url building in disconnected state
  • Fix crashing favorites sidebar when using non latin1 characters



  • Restore ability to handle directories on database restore
  • Fix incorrect index validity check for lucene indexes (Backport of PR #11150)
  • Update logging messages around indexes and constraints population.
  • Fix issue where the diagnostic reporter did not support paths with spaces in the destination file.
  • Add db-setting: dbms.import.csv.buffer_size allowing for increasing the internal buffer in order to handle csv-files with huge fields.
  • Update CSV file rotation threshold in metrics to be 10m instead of 100m by default
  • Disable tracking of CPU time and memory allocation by default
  • Add missing hits and unpins metrics to page cache statistics JMX bean.


  • Such hints in spatial indexes when querying by distance are now allowed:

    MATCH (b:Business)<-[:REVIEWS]-(r:Review)
    USING INDEX b:Business(location)
    WHERE distance(b.location, point({latitude: 33.3288, longitude: -111.977})) < 6500
  • Plan consecutive CREATE clauses as one Create operator instead of multiple CreateNode and CreateRelationship. This improves performance of big create queries, and avoid stack overflow problems for extreme cases.

  • Core API users used to be allowed to pass in arbitrary objects as parameters. If these were not used by Cypher, we would silently ignore them. In 3.4.0 this was changed to always fail the query if any parameter was not convertible to a cypher type. This commits reverts to the previous lenient behavior, as this change caused problems for some users.

  • Fixes bug that caused the Unknown value type: STRUCT error with queries that use PERIODIC COMMIT over bolt and return whole nodes or relationships

  • Aggregation (SUM, AVG) for Durations

  • Fixes problems where variables were displayed as ReferenceFromSlot in plan descriptions.

  • VarExpand: Detect dependencies on path in inner predicates

  • Fix locking seeks with NO_VALUE

  • Clean up of QueryGraph

  • Add support for using compiled expressions.

Causal Clustering

  • Streamed replicated content
  • Abort replication on missing leader or leader switch


  • Add auto refresh to sysinfo frame
  • Fix [object Object] output when returning paths with new types
  • Fix missing inspector items when spread over more than one line
  • Word break long values in db info drawer
  • Don’t add type hinting quotes on strings in CSV export
  • In guides allow one dynamic field to update multiple elements
  • Fix :style / GraSS regressions
  • Show the total number of nodes and relationships in db meta sidebar
  • Fix issue where neo4j-browser kept allocating more and more disk space


  • Upgrade to jetty 9.4.11.v20180605



  • Increase swapper id limit, allowing more files (like indexes) to be opened by the page cache, and fix a MemoryManager bug around alignment handling.

  • Adds the configuration option db.temporal.timezone to configure a default time zone affecting the creation of all temporal values.

  • Remove the traversal endpoints.

  • When writing WHERE n.str CONTAINS 'x'

            or WHERE n.str ENDS WITH 'x'

    Cypher will issue a warning, if n.str is backed by a native String index which is suboptimal for these index scans.


  • Fix bug in un-directed ProjectEndPoints when both end points are in scope

  • Add missing accessors to duration

  • Return null when trying to access a non-existing property from

    a string instead of throwing error.

  • fixes #11663, Using percentileDisc with empty data should return null

High Availability

  • Failure to switch to master is no longer terminal

Causal Clustering

  • Cache local topology information and various minor cleanup


  • Update JS driver to 1.0.0
  • Update Neo4j JS Driver to 1.0.2
  • Update neo4j js driver to 1.0.3
  • Get Bolt address from server discovery service
  • Query parameter support added
  • Persist visualization auto-complete of relationships and add it to Settings Drawer.
  • Cypher frame now only loads ascii table results when required
  • Enable Bolt setting by default
  • List and kill running queries with the new command :qs
  • See Core-Edge cluster in :sysinfo and connect to individual members
  • Update neo4j-driver to 1.1.0
  • Bolt query execution time is now timed on the server side.
  • Update links to docs on pre-releases to 'beta'
  • Rename command :qs -> :queries
  • Include the server version in the beta docs url
  • Show 'beta' welcome frame for pre-releases to promote new features and how users can send us feedback.
  • Enable :queries command only when procedure is available
  • Sort user roles alphabetically in user admin frame
  • Add support for the bolt+routing protocol when in a Causal Cluster
  • Give users feedback when setting :param
  • Reuse connections for heartbeat to not flood the security log with login items
  • Pre-release of rewritten version of Neo4j Browser.
  • Try to fetch guide remotely if not found locally
  • Fix slow loading of user and system info in database drawer
  • Read and act on server config retain_connection_credentials
  • Define URL to connect to with URL param 'connectURL'
  • Style table view and just show relevant information
  • Fix editor error when writing Cypher LOAD CSV or referencing non existing indexes
  • Fix failure to parse server config browser.remote_content_hostname_whitelist
  • Fix missing scrollbars in left drawer in some web browsers
  • Make the Browser commands case insensitive
  • Fix for collected graph items now showing up in viz
  • Bring back :server status command.
  • Present total db hits and time stats in PROFILE View
  • Backtick meta items in auto generated queries from drawer
  • Fix login for restricted users
  • Fix broken elapsed time in :queries frame
  • Add slider to text view statusbar
  • Listen for config maxFrames and enforce that limit in stream
  • Fix indicator being at start of line in error messages
  • Fix for sensitive dropdown menu closing too easy
  • Update document title with connected username and host
  • Add support for handling multiple commands from browser.post_connect_cmd
  • Escape backticks in meta item queries
  • Limit number of meta items shown in db drawer
  • Introduce fetching client configuration from a remote JSON file
  • Fix :help input with space
  • Fix unstable guide pagination
  • Fix missing auth headers on local :GET, :POST etc command requests
  • Fix cursor sometimes resetting to start position
  • Parse server config duration strings correctly
  • Add cluster role, db filename and total store size to sidebar
  • Add dark theme
  • Only display truthy connection data in the browser title
  • Use separate thread for running cypher queries
  • Save/Edit favorite in editor
  • Add support for setting browser :config with objects
  • Fix sluggish experience when having hundreds of thousands meta items
  • Fix app break when no events in UDC state
  • Fixes mapping issue when using :sysinfo with HA
  • Honor url whitelist when fetching remote grass files
  • Bring back :style command
  • Fix display of zero length paths
  • Don't add repeated executed commands to history
  • Fix expand/collapse of plan results in all levels
  • Fix cypher result exports
  • Fix display of Neo4j integers in Cypher result frames
  • Add ability to download a query plan as png
  • Fix x overflow in frames with %-width in IE 11
  • Sort keys when inspecting nodes
  • Fix null not rendering in table view results
  • Fix generated query for sidebar meta items named ‘*’
  • Update neo4j-driver to 1.4.0
  • Autologin to Browser Sync and obey server config browser.allow_outgoing_connections
  • Fix various bugs in editor Cypher parsing
  • Fix Browser not being able to run cypher queries when using TLS and self signed certs
  • Fix setting initial password over TLS when encryption is required
  • In query plan: show signature of the procedure that got called
  • In query plan: show the label that has been scanned
  • Fix viz bug where boolean captions didn't show up on graph elements
  • Add 3rd party LICENSES.txt and NOTICE.txt
  • Remove escaping of characters in tables views
  • Add visual feedback when adding new favourite, and enter 'edit favourite' mode.
  • Integrate with desktop API
  • Show Browser Sync banner when not accepted terms yet
  • Enable thread to execute cypher on (web worker)
  • Fix issue where mapping cypher result to vis would break the app
  • Sync styling with Browser sync
  • Disable editor highlighting with config option
  • Add more detailed error messages for known Browser/OS issues
  • Fix issue of some queries getting stuck because of the shape of the result
  • Use latest released neo4j-driver
  • Add page cache hit ratio to :sysinfo frame
  • Update :sysinfo to display 'Store sizes' jmx values
  • Fix for clearing local data when not signed in to browser sync
  • Fix memory leak in background job
  • Make every type of Bolt transactions use web workers
  • Display driver result summary in code view
  • Support new Neo4j types (Neo4j 3.4)
  • Fix Cypher warning position in Warnings View
  • Display more store sizes if they exist (Neo4j > 3.2)
  • Add new param syntax to evaluate against the server
  • Upgrade neo4j-driver to 1.6.0
  • Render new types correctly in visualization
  • Show more information on operators in plan output
  • Fix docs links in sidebar to point to the connected version
  • Upgrade neo4j-driver to 1.6.1

Cypher Shell

  • Added modes: verbose/plain. Verbose displays more information and is intended for interactive use. Plain displays only the data from queries, intended for scripting

  • Added multiline statement support

  • Added option (--encryption) to choose between encrypted and unencrypted communication with the server

  • Added option --debug to get additional information in case of errors

  • Made semicolons optional for shell commands

  • Added version of connected Neo4j to welcome message

  • Fixed lack of interactive detection on Windows

    • Now always uses interactive mode on Windows by default
    • If non-interactive mode is desired (for scripting) then a new flag --non-interactive has been added
  • Insist that username is not empty

  • Fallback to plain bolt:// when url scheme is bolt+routing://

  • Fixed incorrect handling of bangs [!] in usernames/passwords

  • empty password gives a more descriptive error message

  • Fixed handling of pipes on Windows

  • updated to neo4j java driver 1.2

  • cypher-shell now available in standalone Debian and RPM packages

  • Added tabular output format

  • automatically select output format when terminal is interactive or not

  • Fix periodic commit statements

  • Fixed startup crash on Alpine Linux

  • Updated Bolt driver to 1.4.3

  • upgrading to latest version of driver

  • Assigning cypher expressions to parameters

  • update params display to show new params setting

  • Upgrade to 1.6.0-beta01

  • adding support for spatial and temporal datatype

  • update to 1.6 driver

  • upgrading to driver 1.6.1


  • Configuration can be set from environment variables
  • Fixed issue which prevented dbms.mode=ARBITER from working
  • Fixed setting config values via environment values


  • Configurable CORS header
  • Couple security-related improvements for server
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.