Create databases

Neo4j supports the management of multiple databases within the same DBMS. The metadata for these databases, including the associated security model, is maintained in a special database called the system database. All multi-database administrative commands must be run against the system database. These administrative commands are automatically routed to the system database when connected to the DBMS over Bolt.

You can create a database using the Cypher command CREATE DATABASE. The initial contents of the database depend on the state of the server and the options provided to the command. When no additional options are provided, CREATE DATABASE will attempt to mount any pre-existing store files in place (e.g., as the result of restoring a backup). If no pre-existing store files are available, it will create an empty database.

Database names are subject to the rules specified in Database names section. Having dots (.) in the database names is not recommended. This is due to the difficulty of determining if a dot is part of the database name or a delimiter for a database alias in a composite database.

block is the default format for all newly created databases as long as they do not have the db.format setting specified.
If you want to change it, you can set a new value for the db.format configuration in the neo4j.conf file.
Alternatively, you can set the store format of new databases using the CREATE DATABASE databasename OPTIONS {storeFormat: 'the-new-format'} command. However, if the store is seeded with seedURI, existingDataSeedServer, or existingDataSeedInstance (removed in Cypher 25), or if the command is being used to mount pre-existing store files already present on the disk, they will use their current store format without any alterations.

See Store formats, for more details about available database store formats in Neo4j.

Syntax

Command Syntax

CREATE DATABASE

CREATE DATABASE name [IF NOT EXISTS]
[[SET] DEFAULT LANGUAGE CYPHER {5|25}]
[[SET] TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]
CREATE OR REPLACE DATABASE name
[[SET] DEFAULT LANGUAGE CYPHER {5|25}]
[[SET] TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]

[[SET] DEFAULT LANGUAGE CYPHER {5|25}] is available from Neo4j 2025.06 onwards.
[TOPOLOGY n PRIMAR{Y\|IES} [m SECONDAR{Y\|IES}]] is replaced by [[SET] TOPOLOGY n PRIMAR{Y\|IES} [m SECONDAR{Y\|IES}]] in Cypher 25.

Command Syntax

CREATE DATABASE

CREATE DATABASE name [IF NOT EXISTS]
[DEFAULT LANGUAGE CYPHER {5|25}]
[TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]
CREATE OR REPLACE DATABASE name
[DEFAULT LANGUAGE CYPHER {5|25}]
[TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]

[DEFAULT LANGUAGE CYPHER {5|25}] is available in Cypher 5 starting from Neo4j 2025.06 onwards.

Options

The CREATE DATABASE [OR REPLACE] command can have a map of options, e.g., OPTIONS {key: 'value'}.

Key Value Description

existingData Deprecated in 2025.06

use

Included for backward compatibility only, has no effect and will be removed in a future version.

existingDataSeedServer

existingDataSeedInstance Removed in 2025.06

ID of the cluster server

Defines which server is used for seeding the data of the created database. The server ID can be found in the serverId column after running SHOW SERVERS. Replaced by existingDataSeedServer.

seedURI Changed in 2025.06

URI to a backup, a folder that contains backup artifacts, or a dump from an existing database.

Defines a seed from an external source, which will be used to seed all servers. For more information, see Create a database from a URI.

seedConfig

Comma-separated list of configuration values.

seedCredentials Removed in 2025.06

credentials

Defines credentials that need to be passed into certain seed providers. It is recommended to use the CloudSeedProvider seed provider, which does not require this configuration when seeding from cloud storage. For more information see CloudSeedProvider.

txLogEnrichment

FULL | DIFF | OFF

Defines the level of enrichment applied to transaction logs for Change Data Capture (CDC) purposes.

storeFormat

aligned | standard | high_limit | block

Defines the store format if the database created is new. high_limit and standard formats are deprecated from 5.23. For more information on store formats, see Store formats.

If the store is seeded with seedURI or existingDataSeedServer, or if the command is used to mount pre-existing store files already present on the disk, they will retain their current store format without any modifications.

seedRestoreUntil

Datetime or transaction id. E.g. datetime("2025-01-01T12:15:00.000+0100") or 123456

If you are passing a seedURI that leads to a backup chain, including differential backups, you can choose to not apply all the transactions in the differential backups. To seed up to a specific date, specify a datetime. This will seed the database with transactions committed before the provided timestamp. To seed up to a specific transaction ID, specify a transaction ID. This will seed the database with transactions up to, but not including the specified transaction.

seedSourceDatabase Introduced in 2025.06

A source database name

If the seedURI points to a folder containing backups for multiple databases, you can specify the database name to filter the artifacts.

The CREATE DATABASE command can have a map of options, e.g. OPTIONS {key: 'value'}.

Key Value Description

existingData

use

Controls how the system handles existing data on disk when creating the database. Currently, this is only supported with existingDataSeedInstance, existingDataSeedServer and seedURI, and must be set to use, which indicates the existing data files should be used for the new database.

existingDataSeedServer

existingDataSeedInstance Deprecated in 5.25

ID of the cluster server

Defines which server is used for seeding the data of the created database. The server ID can be found in the serverId column after running SHOW SERVERS. Replaced by existingDataSeedServer.

seedURI

URI to a backup or a dump from an existing database.

Defines an identical seed from an external source which will be used to seed all servers. For more information, see Create a database from a URI.

seedConfig

Comma-separated list of configuration values.

seedCredentials Deprecated in 5.26

credentials

Defines credentials that need to be passed into certain seed providers. It is recommended to use the CloudSeedProvider seed provider, which does not require this configuration when seeding from cloud storage. For more information see CloudSeedProvider.

txLogEnrichment

FULL | DIFF | OFF

Defines the level of enrichment applied to transaction logs for Change Data Capture (CDC) purposes.

storeFormat

aligned | standard | high_limit | block

Defines the store format if the database created is new. high_limit and standard formats are deprecated from 5.23. For more information on store formats, see Store formats.

If the store is seeded with seedURI, existingDataSeedInstance, or existingDataSeedServer, or if the command is used to mount pre-existing store files already present on the disk, they will retain their current store format without any modifications.

seedRestoreUntil Introduced in 2025.01

Datetime or transaction id. E.g. datetime("2025-01-01T12:15:00.000+0100") or 123456

If you are passing a seedURI that leads to a backup chain, including differential backups, you can choose to not apply all the transactions in the differential backups. To seed up to a specific date, specify a datetime. This will seed the database with transactions committed before the provided timestamp. To seed up to a specific transaction ID, specify a transaction ID. This will seed the database with transactions up to, but not including the specified transaction.

Starting with Neo4j 2025.01 for Cypher 5 and 2025.06 for Cypher 25, you can use seedURI, seedConfig, existingData (removed in Cypher 25), and seedCredentials (removed in Cypher 25) options together with the CREATE OR REPLACE DATABASE command.

The existingDataSeedInstance (removed in Cypher 25) and existingDataSeedServer are not supported with the CREATE OR REPLACE DATABASE command. More details about seeding options can be found in Seed a cluster.

The following examples show how to create a database using the CREATE DATABASE command with various options. For examples on seeding a database from a URI, see Create a database from a URI.

Create a database

To create a database named actors, use the command CREATE DATABASE followed by the name of this database.

CREATE DATABASE actors

When you create a database, it shows up in the listing provided by the command SHOW DATABASES:

SHOW DATABASES YIELD name
Result
+-------------+
| name        |
+-------------+
| "actors"    |
| "movies"    |
| "neo4j"     |
| "system"    |
+-------------+

Create a database with WAIT

Result

Sub-clause WAIT allows you to specify a time limit for the command to complete and return.

CREATE DATABASE slow WAIT 5 SECONDS
info: Server `ServerId{b55c6551}` at address `server1:7687` has caught up.
03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)

info: Server `ServerId{a9e7e8f1}` at address `server2:7687` has caught up.
03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)

info: Server `ServerId{0f7cb48e}` at address `server3:7687` has caught up.
03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)

The command returns a notification for each server in the cluster to indicate the status of that command on that server. In this example, all three cluster members have returned 03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp), which indicates that the server has applied the command successfully and is up to date.

Sub-clause WAIT allows you to specify a time limit for the command to complete and return.

CREATE DATABASE slow WAIT 5 SECONDS
Result
+-------------------------------------------------------+
| address          | state      | message     | success |
+-------------------------------------------------------+
| "localhost:7687" | "CaughtUp" | "caught up" | TRUE    |
+-------------------------------------------------------+

The success column provides an aggregate status of whether or not the command is considered successful. Thus, every row has the same value, determined on a successful completion without a timeout.

Create a database with IF NOT EXISTS or OR REPLACE

The CREATE DATABASE command is optionally idempotent, with the default behavior to fail with an error if the database already exists. There are two ways to circumvent this behavior.

First, appending IF NOT EXISTS to the command ensures that no error is returned and that nothing happens if a database or database alias with the given name already exist.

CREATE DATABASE actors IF NOT EXISTS

Second, adding OR REPLACE to the command deletes any existing database and creates a new one.

CREATE OR REPLACE DATABASE actors

This is equivalent to running DROP DATABASE actors IF EXISTS followed by CREATE DATABASE actors.

Keep in mind that using CREATE OR REPLACE DATABASE also removes indexes and constraints. To preserve them, run the following Cypher commands before the CREATE OR REPLACE DATABASE and save their outputs:

SHOW CONSTRAINTS YIELD createStatement AS statement
SHOW INDEXES YIELD createStatement, owningConstraint
WHERE owningConstraint IS NULL
RETURN createStatement AS statement

The behavior of IF NOT EXISTS and OR REPLACE apply to both standard and composite databases (e.g. a composite database may replace a standard database or another composite database). IF NOT EXISTS also catches if any database aliases with the given name exists and does nothing instead of throwing an error on existing alias sharing the name.

The IF NOT EXISTS and OR REPLACE parts of these commands cannot be used together.

Set a default Cypher version for a standard database

You can set the default Cypher version for a database when creating it. If not specified, the version for that database will be set to the default Cypher version of the DBMS. For example:

CREATE DATABASE actors DEFAULT LANGUAGE CYPHER 25

This command creates a database named actors with the default Cypher version set to 25.

To view the default Cypher version of each database in the DBMS, run the command SHOW DATABASES with the YIELD clause and specify the defaultLanguage column. For example:

Query
SHOW DATABASES YIELD name, defaultLanguage
Table 1. Result
name defaultLanguage

"actors"

"CYPHER 25"

"movies"

"CYPHER 5"

"neo4j"

"CYPHER 25"

"system"

"CYPHER 25"

Rows: 4

For more information about other options for configuring the Cypher version, see Configure the Cypher default version.

Setting the default language to CYPHER 25 ensures that all queries run on that database will use the version of Cypher 25 that the database is currently running (unless you prepend your queries with CYPHER 5, which overrides this default). For example, a Neo4j 2025.08 database with default language Cypher 25 will use Cypher 25 as it exists in Neo4j 2025.08, including any changes introduced in Neo4j 2025.06, 2025.07, and 2025.08.

Glossary

allocator

A component in the cluster that allocates databases to servers according to the topology constraints specified and an allocation strategy.

asynchronous replication

Asynchronous replication is used by secondary copies to poll for new transactions, which means they cannot be guaranteed to have received the most recent transactions. This enables efficient scale-out of read-performance.

Aura instance

A fully-managed DBMS represented by a single instance ID, that is running in the Neo4j Aura cloud.

auto-commit transaction

An automatically committed transaction that contains a single query.

Bolt protocol

Bolt is a protocol used for interaction between Neo4j instances and drivers.

bookmark

A marker the client can request from the cluster to ensure that it is able to read its own writes so that the application’s state is consistent and only databases that have a copy of the bookmark are permitted to respond.

category (Bloom)

A category is based on a node label and is defined in a Perspective as a way of visually distinguishing nodes with the same label(s).

causal consistency

All servers in a cluster agree on the order in which transactions take place. The position of a server on the causal chain can be guaranteed using a bookmark.

cluster

A Neo4j DBMS that spans multiple servers working together to increase fault tolerance and/or read scalability. Databases on a cluster may be configured to replicate across servers in the cluster thus achieving read scalability or high availability.

client application

Software that interacts with a Neo4j server.

commit

A commit is the successful completion of a transaction, which ensures durability of any changes made. For more details, visit Operations Manual → Transaction management.

composite database

Composite databases are the means to access partitioned graph data with a single Cypher query.

constraint

Constraints are sets of data modeling rules that ensure the data is consistent and reliable.

Cypher®

Neo4j’s graph query language.

data model

A data model defines how information is organized in a database. A good data model will make querying and understanding your data easier. In Neo4j, the data models have a graph structure.

database

A database is a container used by the DBMS to manage and store graph data. The physical structure of data is controlled by the database.

database vs graph

Databases are the physical containers of graph data. Graphs are the logical structure of data in Neo4j.

Database Management System

Database Management System, or DBMS, capable of managing multiple databases. A DBMS may run on a single server, or span several servers configured as a cluster.

database schema

The prescribed property existence and datatypes for nodes and relationships.

deallocate

An act of removing a database from a server or a server from a cluster without loss of data or reduced fault tolerance.

degree (of a node)

The number of relationships of a specific node; loops are counted twice.

disaster recovery

A manual intervention to restore availability of a cluster, or databases within a cluster.

driver

A software library that provides access to Neo4j from a particular programming language.

election

In the event that the Raft leader becomes unresponsive, followers automatically trigger an election and vote for a new leader.

entity

A node or a relationship.

expression (Cypher)

A component of a Cypher query which produces values. It may be used in projections, as a predicate, or when setting properties on graph elements.

fabric

Fabric is the architectural design of a unified system that provides a single access point to local or distributed graph data.

fault tolerance

A guarantee that a cluster can maintain a database’s persistence and availability in the event of one or more servers failing.

follower

A primary copy of a database acting as a follower, receives and acknowledges synchronous writes from the leader.

Generative AI (GenAI)

A type of artificial intelligence (AI) system that generates text, images, or other media in response to prompts.

graph

A logical representation of a set of nodes where some pairs are connected by relationships.

index

Data structure that improves read performance of a database.

knowledge graph

A specific type of graph that has an organizing principle so that a user (or a computer system) can reason about the underlying data. The organizing principle provides an additional layer of structure that adds context to support knowledge discovery.

label

Marks a node as a member of a named and indexed subset. A node may be assigned zero or more labels.

leader

A single primary copy of a database is designated as the leader. It receives all write transactions from clients and replicates writes synchronously to followers and asynchronously to secondary copies of the database.

main database

In terms of Neo4j Enterprise Studio, the database(s) containing the user’s data. Can exist in the same Neo4j deployment as the tool asset database.

motif

A description of a specific pattern within a graph.

node

A node represents an entity or discrete object in your graph data model. Nodes can be connected by relationships, hold data in properties, and are classified by labels.

operator

A symbol representing a mathematical or logical operation.

parameter

Named value provided when running a Cypher statement.

path

A sequence of nodes and the relationships connecting them, that does not contain duplicate relationships. Several paths can match a pattern.

pattern

A specific arrangement of nodes and relationships that can be matched in a graph. A pattern follows a motif.

perspective (Bloom)

A Perspective defines a certain business view or domain that can be found in the target Neo4j graph. A single Neo4j graph can be viewed through different Perspectives, each tailored for a different business purpose.

primary

A copy of the database that is able to process write transactions and is eligible to be elected as a leader. It participates in fault tolerant writes as it is part of the majority required to acknowledge and commit write transactions.

primary vs secondary

In a cluster, databases can operate in either primary or secondary mode. Primary databases are able to process write and read transactions, ensuring fault tolerance. Secondary databases are replicated asynchronously from primaries, and their main purpose is to provide read scaling within the cluster.

project (Aura)

An isolated environment in the unified Aura console that contains its own database instances, configurations, and resources. Preceded by tenant in the classic Aura console.

property

Properties are key-value pairs that are used for storing data on nodes and relationships.

query (Cypher)

A statement that retrieves or writes information to a database.

Raft group

A group of servers that are participating in hosting a particular database in primary mode.

Raft group member

A server that is participating in a Raft group. A server can be a member of one or more groups.

Raft log

A shared log between all Raft group members that is guaranteed to be consistently updated and viewed by those members. The log contains both database data and operational state of the Raft group.

Raft protocol

The networking mechanism that enables a database to replicate its data across multiple servers to give high availability for accessing the data and high durability to the data stored.

read scaling

Distributing query load by creating additional database copies hosted in secondary mode (read-only).

relationship

A relationship represents a connection between nodes in your graph data model. Relationships connect a source node to a target node, hold data in properties, and are classified by type.

secondary

An asynchronously replicated copy of the database that provides read scaling within the cluster.

seed

A seed is a database dump or a full backup used to create a database on a cluster. This is sometimes called seeding.

server

A physical machine, a virtual machine, or a container running an instance of Neo4j. Servers can be standalone or part of a cluster.

session

A causally linked sequence of transactions.

session consistency

An alternative name for Neo4j’s causal consistency.

standalone

A single server running Neo4j and not part of a cluster.

synchronous replication

Synchronous replication requires the leader primary to replicate a transaction and block the commit until a quorum of the follower primaries acknowledges that the transaction is successfully replicated. Once the transaction is replicated, the commit is allowed to proceed. This ensures data durability and consistency within the cluster.

system database

A database used by Neo4j to store system information.

tenant (Aura)

An isolated environment in the classic Aura console that contains its own database instances, configurations, and resources. Replaced by project in the unified Aura console.

tool asset database

In terms of Neo4j Enterprise Studio, the database where tools' assets are stored. This can be in the same Neo4j deployment as the main database(s) or in a separate deployment.

topology

A configuration that describes how the copies of a database should be spread across the servers in a cluster, see primary mode and secondary mode.

transaction

A transaction comprises a unit of work performed against a database. It is treated in a coherent and reliable way, independent of other transactions. Transactions comply with the ACID consistency model (atomic, consistent, isolated, and durable).