Chapter 01 · Graph Database Foundations, Neo4j Editions, Deployment Choices, and Lab Setup

Install Neo4j Desktop/Server or Provision Aura, Connect with Browser and Cypher Shell, and Verify the DBMS

Turn “Neo4j is installed” into evidence: process readiness, Browser/Cypher Shell access, runtime version, Cypher default, authentication, and driver connectivity.

Beginner → Intermediate110–130 minutesCross-platform setup and connectivity labNeo4j 2026.07.1 Community · Python driver 6.3.0Last reviewed: September 2026

Learning outcomes

AtlasMart has selected Community Docker as the course baseline, but developers may arrive with Windows, Linux, macOS, Neo4j Desktop, a native server archive, or an Aura instance. This lesson separates installation choice from DBMS evidence. “The UI opened” is not enough: the learner must prove which server, edition, JVM, Cypher default, endpoint, database credential, and driver path are actually in use.

01

Choose among pinned Docker, native Server, Desktop, and Aura paths without mixing their filesystem and operational assumptions.

02

Connect through Neo4j Browser/Query and Cypher Shell, then verify DBMS version, edition, user, and Cypher default from the running service.

03

Distinguish HTTP/Browser access from Bolt/driver access and bind the local lab to loopback.

04

Use the official Python driver 6.3.0 to force a real Bolt handshake with verify_connectivity() rather than assuming driver construction opened a connection.

05

Diagnose startup, endpoint, authentication, and protocol failures independently and reset the disposable lab safely.

Pinned Chapter 01 stack

Mandatory path: Neo4j Community 2026.07.1 official Docker image, image-supplied compatible JVM, Cypher 25 explicitly used in examples, and optional Neo4j Python Driver 6.3.0 on Python 3.10+. The current server line supports Java 21/25; 5.26.30 remains the current 5.26 LTS patch for organizations that intentionally stay on LTS.

Choose an installation path without pretending they are identical

Docker packages the server and its compatible runtime into a versioned image and makes cleanup reproducible. Native Server exposes host-level installation, JVM, service, paths, and upgrades directly. Neo4j Desktop is a developer environment that can create/manage local DBMS instances and remote connections, with a bundled/downloaded compatible JVM behavior described by Desktop documentation. Aura provisions a managed remote service; there is no local server process for you to inspect.

Path Good fit for this course Evidence surface Primary caveat
Pinned Docker Community Mandatory reproducible baseline Container state/logs, /data, /logs, /conf, cypher-shell, Browser, Bolt Docker networking/volumes must be understood
Native Server Learners who want host service/JVM experience Process/service, NEO4J_HOME/CONF, host ports, local logs OS/JVM/path details vary and upgrades need discipline
Neo4j Desktop Interactive local development and optional Developer edition features Desktop DBMS cards/logs/terminal plus normal Cypher/Bolt probes Desktop license and local layout are developer-specific
AuraDB Optional managed comparison Aura console, secure URI, credentials, Cypher/driver evidence No assumption of local filesystem or self-managed admin commands

On current Windows server installation paths, Neo4j supports ZIP/service/PowerShell workflows with supported JDKs. The course still uses Docker for the mandatory lab because it pins the DBMS and runtime together and keeps cleanup isolated; this is a reproducibility choice, not a claim that native Windows is unsupported.

Start the pinned Community DBMS

If Lesson 1’s container is already healthy, do not create a second one. Otherwise create the named volumes and start it. Docker’s official Neo4j image uses port 7474 for HTTP/Browser and 7687 for Bolt. We bind both to 127.0.0.1. HTTP is unencrypted; loopback is appropriate for a local teaching environment but not a substitute for TLS in remote production.

shell · idempotent-ish local setup
docker volume inspect atlasmart-neo4j-data >/dev/null 2>&1 || docker volume create atlasmart-neo4j-datadocker volume inspect atlasmart-neo4j-logs >/dev/null 2>&1 || docker volume create atlasmart-neo4j-logsdocker rm -f atlasmart-neo4j 2>/dev/null || truedocker run -d --name atlasmart-neo4j -p 127.0.0.1:7474:7474 -p 127.0.0.1:7687:7687 -e NEO4J_AUTH=neo4j/atlasmart-course-2026 -v atlasmart-neo4j-data:/data -v atlasmart-neo4j-logs:/logs neo4j:2026.07.1docker logs --tail 120 atlasmart-neo4j
Cross-shell note

The first two lines use POSIX shell redirection/conditional syntax and are convenient on Git Bash/Linux/macOS. In Windows PowerShell, simply run docker volume create ... twice (Docker safely returns an existing volume) and ignore “no such container” when removing a container that does not exist. The core Docker commands themselves are the same.

Do not race the startup sequence. A created/running container state proves only that Docker launched the process. Wait for readiness in the Neo4j logs and then perform a real client operation.

Connect with Browser/Query and Cypher Shell

Open http://localhost:7474/ in a browser. The web application is a client; the database server is the separate DBMS process. Connect using URI neo4j://localhost:7687, user neo4j, and the disposable password from the Docker environment. A web UI loading successfully does not prove Bolt authentication until you connect.

Cypher Shell is a command-line Bolt client. Running it inside the container avoids a separate host installation and gives a deterministic client version paired with the image:

shell · verify with Cypher Shell inside the container
docker exec atlasmart-neo4j cypher-shell -a neo4j://localhost:7687 -u neo4j -p atlasmart-course-2026 "RETURN 'bolt-ok' AS connection, 25 AS requestedCypherFamily;"docker exec atlasmart-neo4j cypher-shell -a neo4j://localhost:7687 -u neo4j -p atlasmart-course-2026 "CALL dbms.components() YIELD name, versions, edition RETURN name, versions, edition;"docker exec atlasmart-neo4j cypher-shell -a neo4j://localhost:7687 -u neo4j -p atlasmart-course-2026 "SHOW CURRENT USER;"

The first command proves the endpoint accepted a Bolt session and executed a query. The second proves server/edition identity. The third proves the authenticated user. None of them tells you whether a remote production connection uses TLS, whether authorization is least privilege, or whether the application’s connection pool is healthy.

Verify Cypher 25 rather than trusting the release number

Neo4j’s calendar version and Cypher language version are separate. Cypher 25 was introduced in the 2025.06 line and receives new language features; Cypher 5 is frozen for compatibility. Starting with 2026.02, the distributed neo4j.conf explicitly sets CYPHER_25 for new deployments. Existing deployments can retain a different setting, and individual queries can prefix a language version.

Cypher · inspect and override the language version
SHOW SETTINGS 'db.query.default_language' YIELD name, value RETURN name, value;CYPHER 25 RETURN 25 AS languageFamily;CYPHER 5 RETURN 5 AS languageFamily;

The first result is configuration evidence. The next two demonstrate per-query selection. Do not turn the prefix into cargo cult: application queries should have an intentional compatibility strategy, especially during upgrades. Later chapters explicitly compare behavior when syntax or planner features differ.

Inspect the JVM and configuration provenance

The Docker image supplies a compatible JVM, but “Neo4j 2026” does not mean “Java version irrelevant.” Current 2026 Neo4j requires Java 21 or 25 on supported platforms. Native installations must provision a compatible JVM themselves. Record the actual runtime:

shell · runtime, config and mounted storage evidence
docker exec atlasmart-neo4j java -versiondocker exec atlasmart-neo4j sh -lc 'printf "NEO4J_HOME=%s\n" "$NEO4J_HOME"'docker exec atlasmart-neo4j sh -lc 'ls -ld "$NEO4J_HOME/conf" /data /logs /plugins 2>/dev/null || true'docker exec atlasmart-neo4j sh -lc 'grep -E "^[[:space:]]*(db.query.default_language|server.bolt|server.http)" "$NEO4J_HOME/conf/neo4j.conf" || true'docker inspect atlasmart-neo4j --format '{{json .Mounts}}' 

The configuration file is an input to the process; SHOW SETTINGS is runtime evidence. Comparing both helps diagnose generated/container defaults, environment overrides, and drift. The internal database files under /data are implementation state, not an application API.

Prove a real application driver handshake

Creating a Neo4j Python Driver object does not immediately open a network connection. The official driver deliberately defers connections until needed. Calling verify_connectivity() forces the evidence we want. Driver 6.3.0 is the current 6.3 release and supports Python 3.10–3.14 and current 2026 servers.

shell · create an isolated Python environment
python -m venv .venvpython -m pip install --upgrade pippython -m pip install "neo4j==6.3.0"
Python · verify Bolt and run one parameterized query
from neo4j import GraphDatabaseURI = "neo4j://localhost:7687"AUTH = ("neo4j", "atlasmart-course-2026")  # disposable local lab onlywith GraphDatabase.driver(URI, auth=AUTH) as driver:    driver.verify_connectivity()    records, summary, keys = driver.execute_query(        "CYPHER 25 RETURN $course AS course, $server AS pinnedServer",        course="Big Data Academy / Neo4j",        server="2026.07.1",        database_="neo4j",    )    print(records[0].data())    print("database:", summary.database.name)

A successful verify_connectivity() proves that the driver can establish a compatible authenticated connection. It does not warm every pooled connection, prove failover behavior, or make a query retry safe. Those are separate driver concerns later in the course.

Diagnose failures in layers

Failure injection Expected category Useful evidence
Wrong password Authentication Server/client auth error; endpoint is still reachable
Port 9999 instead of 7687 Connection/reachability Connection refused/timeout; query was never parsed
Use http://localhost:7474 as a Bolt driver URI Protocol/URI configuration Driver rejects or fails to negotiate; Browser HTTP is not Bolt
Unsupported JVM on a native install Process startup/runtime Server startup logs/JVM checks before any Cypher client can connect
Enterprise-only command on Community Edition/capability Syntax/administration availability must be checked against edition docs
shell · deliberate auth and endpoint failures
docker exec atlasmart-neo4j cypher-shell -a neo4j://localhost:7687 -u neo4j -p wrong-password "RETURN 1;"docker exec atlasmart-neo4j cypher-shell -a neo4j://localhost:9999 -u neo4j -p atlasmart-course-2026 "RETURN 1;"

After each failure, re-run the known-good command. A diagnosis is not complete until the corrected state is verified.

Optional Desktop and Aura comparison

Neo4j Desktop can create a local DBMS, open its terminal/logs, and provide Browser tooling. Record the exact DBMS version that Desktop creates; Desktop itself is not the server version. Aura instead gives you a generated secure connection URI and credentials. Use those with Browser/Query or the same official driver, but do not search for neo4j.conf or /data because the service abstracts those server-level resources.

If you use AuraDB Free for comparison, treat its current availability/tier rules as service state that can change. The course remains complete without an Aura account.

Production judgment

Installation convenience is not production architecture. For self-managed Neo4j, AtlasMart must decide supported OS/JVM, data/log separation, filesystem and storage performance, TLS, service identities, network exposure, backups, monitoring, patching, capacity, and upgrade/rollback. For Aura, it must decide tier/region, service security, credentials, connectivity, backup/export policy, observability, and application failure handling. For every deployment, pin and test driver compatibility and Cypher version behavior before rollout.

Check your understanding

  1. Why does a running Docker container not prove Neo4j is ready for queries?
  2. What is the difference between HTTP port 7474 and Bolt port 7687 in this lab?
  3. Why inspect db.query.default_language if the server is already version 2026.07.1?
  4. Why call verify_connectivity() after constructing a Python Driver?
  5. Which part of this lesson changes most when moving from self-managed Docker to Aura?
Review the answers

1. Docker only proves process/container state. Neo4j may still be starting, failing, or not accepting authenticated Bolt sessions. Readiness requires server logs plus a real client operation.

2. 7474 serves HTTP used by Browser/HTTP API; 7687 is Bolt used by Cypher Shell and drivers. They are different protocols and security surfaces.

3. Cypher language version is separately configurable and existing deployments can preserve Cypher 5. Runtime configuration is stronger evidence than assuming from the calendar release.

4. Driver construction is lazy and may not open a socket. verify_connectivity() forces an authenticated compatible network exchange.

5. Server-level operational evidence: Aura abstracts the local process, filesystem, JVM, neo4j.conf, and many admin operations. Application Cypher/driver concepts remain broadly portable.

Summary and next step

You now have a pinned local DBMS, Browser/Cypher Shell path, explicit version/Cypher/JVM evidence, and an optional real driver handshake. More importantly, you can separate process startup, endpoint reachability, authentication, protocol negotiation, and query execution.

Next, map the DBMS boundary in detail: databases, processes, Bolt/HTTP, drivers, configuration, storage locations, and transaction logs.

Authoritative references

Keep knowledge open

Help the academy stay free and grow.

If these tutorials save you time, a small donation supports new lessons, technical review, diagrams, examples, and long-term maintenance.

ETHEthereum / ERC-20 only
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0

Send only Ethereum or ERC-20 compatible assets to this address.