All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, adheres to Semantic Versioning, and is generated by Changie.
The historical CHANGELOG-aura.md covers the now-discontinued standalone aura-cli binary.
- query now shows the execution plan for EXPLAIN and PROFILE statements: --format json/toon carry it as a plan or profile object, and --format table prints it as an indented operator tree (PROFILE also reporting per-operator rows, dbHits and time). EXPLAIN of a statement that writes no longer requires --rw (EXPLAIN never executes); PROFILE of a statement that writes is still refused without --rw.
neo4j-cli updatenow prints the release notes for the versions between the old and new version after a successful update, newest first and capped at the 3 most recent (with a link to the full changelog when older releases are omitted). Pass--no-changelogto suppress it.--format jsonand--format toongain arelease_notesfield, pluschangelog_urlwhen releases were omitted;--format tableis unchanged.
- Updated
docker create --no-print-passwordhelp text to no longer reference a credential-read command that does not exist. Now explains how to use the stored credential via--credential <name>and how to reset the password withadmin user set-passwordplus a credential resync. mcp installnow writes an env block, so write / Aura / credential access actually works with Claude Desktop in config mode (previously unreachable without --bundle). A typed--rwenables all three gates; the new--allow-writes,--allow-aura, and--allow-credential-writeflags scope them individually. In bundle mode the flags seed the extension settings toggles instead of being ignored.mcp checkreports a pre-existing entry without the env block as drift.- graphql cors-policy allowed-origin add/remove now return a clear error (exit 8) instead of panicking when the data API responds with an unexpected 2xx status or a malformed CORS policy body, and authorization failure messages no longer say 'please report an issue'.
- New
neo4j-cli aura api <endpoint>command makes an authenticated request to any Aura API endpoint and prints the response. The endpoint carries its own API version segment (v1/instances,v2beta1/organizations/{org_id}/projects), and{org_id}/{project_id}are substituted from--organization-id/--project-idor the default workspace. Supports--method/-X, repeatable--field/-Fand--raw-field/-f(query parameters on GET/HEAD/DELETE, a JSON body otherwise),--inputfor a verbatim body from a file or stdin, repeatable--header/-H, plus--include/-iand--silent. Non-GET/HEAD methods require--rwand DELETE also requires confirmation (--yes --forcewhen non-interactive). With--format jsonthe response body is written byte-for-byte so it can be piped intojq; a failing status yields the usual error envelope and exit code. - New
neo4j-cli mcpcommand group (serve,tool,install,remove,list,check,bundle) behind theflag.mcp-serverfeature flag (NEO4J_CLI_FLAG_MCP_SERVER=1orneo4j-cli config set flag.mcp-server true). This targets agents and chat surfaces with no filesystem or shell access, which therefore cannot invokeneo4j-clithemselves — Claude Desktop being the reference client. Agents that can already run commands are better served byneo4j-cli skill install. Exposes the CLI through five tools:neo4j_cli_list_targets(discovers reachable Neo4j databases),neo4j_cli_list_commands(lists CLI command trees),neo4j_cli_read_docs(returns documentation from the generated skill bundle),neo4j_cli_run(executes read-only CLI commands), andneo4j_cli_run_write(executes destructive CLI commands, requires--rw). To install into Claude Desktop, runneo4j-cli config set flag.mcp-server truethenneo4j-cli mcp install --agent claude-desktop --bundle --rw, which generates a.mcpbbundle and opens the Desktop install UI; omit--bundleto writemcpServers."neo4j-cli"directly intoclaude_desktop_config.json. Write, Aura and credential access are each off by default and are enabled per-connector in the Desktop settings UI. - The
aura instance listoutput now includes anorganization_idfield alongsideproject_id, so the owning organization of each instance is visible without a separate lookup.
- Aura commands now report the API's own error message and a non-zero exit code for HTTP 413, 415, 422 and other previously unhandled statuses, instead of a "please report an issue" message with a success exit code. A 4xx or 5xx whose body is empty or not JSON now also keeps its status-class exit code rather than reporting a generic internal failure.
aura instance create,deployandloadnow accept the Aura tier names the API expects:--type free,professional,business-criticalandvirtual-dedicated-cloud. Previously no value worked —free-db/professional-db/enterprise-dbpassed the CLI's own check but were rejected by the API with avalidation_error, while the names the API asked for were rejected by the CLI as invalid arguments. The former names are still accepted and mapped to their current equivalents;professional-dsandenterprise-dsno longer exist and are now rejected with a message naming the replacement.customer-managed-key create --typeis unchanged and still takes the former names.- instance create/deploy/load: --graph-analytics-plugin on a professional instance now actually enables the GDS plugin (graph_analytics: plugin). Previously the flag was silently ignored by the v2beta1 API and every professional instance defaulted to graph_analytics: serverless regardless of the flag.
- Add
neo4j-cli admin databasecommands for database lifecycle management (list, get, create, drop, start, stop) with full connection flag parity withquery - add admin user management commands (list, get, create, drop, rename, set-password, suspend, activate)
- Add admin role commands: list, get, create, drop, grant, revoke
- Add admin privilege commands for managing Neo4j Enterprise privileges via the system database.
grant/deny/revokeeach expose a per-category subcommand (property, entity, graph, label, load, database, dbms) taking the action as a positional argument (e.g.admin privilege grant property read --on-graph * --role analyst), plusadmin privilege list - Add a global
accept-env-varsconfig key (defaultfalse) that gates whether the CLI reads credentials from environment variables. Set it withneo4j-cli config set accept-env-vars true --rw, or setNEO4J_CLI_ACCEPT_ENV_VARS=1for zero-setup CI usage with no config file. When enabled, env vars override stored credentials at the precedence flag > env var > stored, uniformly across Aura (NEO4J_AURA_CLIENT_ID/NEO4J_AURA_CLIENT_SECRET, now synthesized into an ephemeral in-memory credential), DBMS (NEO4J_URI/NEO4J_USERNAME/NEO4J_PASSWORD/NEO4J_DATABASE), and embed (NEO4J_EMBED_*,OPENAI_API_KEY,HF_TOKEN,GEMINI_API_KEY,GOOGLE_API_KEY) credentials; partial sets are rejected with a missing-variable error. BREAKING: DBMS and embed credential env vars are no longer read unlessaccept-env-varsis enabled — this coversqueryand the wholeadmincommand tree. BREAKING: the CLI-212NEO4J_DATABASEoverride applied alongside--credentialnow also requiresaccept-env-vars(the explicit--databaseflag is unaffected). Stored credentials are never modified. aura instance listoutput now includes the instancestatus.- Add
aura virtual-graphcommands for managing Aura Virtual Graphs in a project:create,get,list,update,deleteandallowed-configs.createtakes--name,--data-source-id,--import-model-id,--cloud-providerand--region, plus optional--memory,--maximum-bytes-billedand--wait, and prints the initial password once asplain_password.listreturns every virtual graph in the project, following the API's pagination on your behalf;--limitcaps how many are returned and notes on stderr when more exist
- Introduced
aura graphqlcommands for managing GraphQL Data APIs: create, get, list, update, delete, pause, resume, auth-provider, and cors-policy allowed-origin. - Aura commands now accept a --debug flag (also via NEO4J_DEBUG=1) that routes Aura API request/response activity to stderr with secrets redacted.
- Add --debug to docker commands to echo underlying docker invocations (secrets redacted) to stderr
- Add --debug to desktop commands (also via NEO4J_DEBUG=1) that routes Neo4j Desktop discovery and relate API request/response activity to stderr with secrets redacted
- query: --database flag and NEO4J_DATABASE env var can now be combined with --credential to target a specific database
- query: --database now defaults to the connecting user's home database when unset instead of the literal "neo4j", fixing DatabaseNotFound errors against instances whose home database is not named "neo4j" (e.g. AuraDB Free, where it is the instance DBID).
- Add
neo4j-cli aura instance deployto clone a local Neo4j database (from a managed Docker container or a Neo4j Desktop DBMS) into a new Aura instance. - Failing commands now save their full redacted output to a tee file under the config directory (neo4j/cli/tee) and expose its path as tee_path in the JSON/toon error envelope; controlled by the new tee-enabled and tee-limit config keys.
- Rendered output field names are now snake_case across docker (bolt_port, http_port), credential (database_name, embed_credential, base_url, vertex_project, vertex_location), workspace (organization_id, project_id, project_name), and desktop (connection_uri, pending_restart, file_path) commands. BREAKING: scripts parsing JSON/TOON keys or table headers must update to the snake_case names. CLI flags, config keys, and Docker label identifiers are unchanged.
- Add
dataset listand per-targetloadcommands (docker load,desktop dbms load,aura instance load) to load example datasets from neo4j-graph-examples repos. - Fix default output reverting to JSON instead of table in interactive terminals; default to TOON when run by an AI agent
skill checkandskill listnow report each catalog skill's available version from that skill's own remote SKILL.mdversion:instead of a single shared plugin.json version.- neo4j-cli history list and telemetry now report invoker "script" for non-TTY, non-agent invocations (piped, CI, cron); these were previously reported as "agent".
- query: accept multiple statements separated by ; at line end; --atomic runs them in a single transaction; --continue-on-error keeps going past failing statements (non-atomic only); write statements now report summary stats (nodes/relationships/properties created, etc.); comment-only statements are skipped instead of erroring
- Clearer feedback signposting: the installer now prints the GitHub issues URL, the bug-report link in error messages is corrected, and Bolt auth/connection and embedding API-key errors now include actionable next-step suggestions.
- Add
neo4j-cli historycommand (list, clear) that records a local log of recently run commands; secret flag values are redacted but query Cypher is stored verbatim. Toggle withconfig set history-enabledand cap withhistory-limit. - desktop: discover the local Neo4j Desktop 2 API via mDNS/DNS-SD (_neo4j-desktop-2._tcp.local), so it's found even on non-standard or ephemeral ports; the 44222..44232 port scan remains a fallback. On macOS a dns-sd tier covers Local Network restrictions — if discovery still fails, pass --port.
- desktop: add
neo4j-cli desktop dbms upgrade <id>to upgrade a Desktop-managed DBMS to a newer Neo4j version, with --plugin-upgrade-mode (all|none|upgradable, default upgradable), --version (auto-picks the latest stable enterprise version when omitted), --no-migrate, --backup, and --force. - aura agent invoke now prints the agent invocation id on success and failure for support/tracing
- Credentials are now stored securely in the OS keyring by default (macOS Keychain, Windows Credential Store, Linux Secret Service). Existing credentials remain in plaintext until you run
neo4j-cli config set credential-storage keyring. To keep plaintext storage, no action is required. - 'neo4j-cli skill install ' no longer accepts a positional agent name — use --agent instead. New: install any skill from the curated neo4j-contrib/neo4j-skills catalog, plus --all, --refresh, and a new 'skill refresh' leaf.
- Removed deprecated --await alias; --wait is now the only spelling (CLI-111).
- Remove deprecated 'aura tenant list/get' commands and '--tenant-id' flag (deprecated in v1.4.0). Use 'aura project list', 'aura project get' (configuration details) or 'aura organization get' (org metadata), and '--project-id' instead.
- Added Gemini and Vertex AI embedding providers.
- Credentials stored in plaintext JSON are silently used and automatically migrated to the OS keyring when credential-storage is set to keyring, preventing hard errors from out-of-sync state.
- Add OPTIONAL MATCH, vector and full-text search to the query skill's Virtual Graph forbidden-construct list
- Add 'neo4j-cli desktop' subtree for local Neo4j Desktop 2: 'desktop install' installs the app; 'desktop dbms' lifecycles local DBMSes (--wait on async leaves); 'desktop dbms plugin' manages plugins; 'desktop connection' manages saved remote connections; 'desktop list' shows both; 'desktop doctor' runs a structured health check. 'query --credential desktop' or 'desktop-connection:' reads Desktop credentials on demand without writing them to the local store.
- Curl installer now prompts to install the agent-skill bundle when run in an interactive terminal; set NEO4J_CLI_AUTO_INSTALL_SKILL=1 or =0 for unattended installs.
- Gate destructive operations on a new --yes --force confirmation: every
*/deleteand*/removeleaf (aura instance/deployment/agent/customer-managed-key/data-api/graphanalytics/auth-provider/cors-policy allowed-origin, docker, desktop dbms/connection, credential aura-client/dbms/embed) now requires both flags in non-TTY contexts or prompts y/N on a TTY. Back-compat break:docker delete --force(without --yes) anddesktop {dbms,connection} delete --yes(without --force) now exit 2 in non-TTY contexts; pass both flags going forward.
- Add skill install support for Antigravity CLI.
- :schema now detects and reports the active graph engine (e.g. Virtual Graph) and supported Cypher versions via dbms.components(), and the query skill teaches agents which Cypher constructs to avoid on Virtual Graphs (CLI-177).
- Render temporal column values (Date, DateTime, Duration, ...) as ISO-8601 strings in query JSON and table output instead of empty {}.
- Populate next-action suggestions on Aura API errors (400/401/403/404/429) and workspace/ownership errors.
- Add Aura Agent: aura agent commands (list, get, create, update, replace, delete, invoke).
- Add --debug flag (and NEO4J_DEBUG=1 env var) on query commands to route Neo4j driver diagnostics to stderr, keeping --format json/toon stdout unaffected. Per-frame Bolt wire tracing (BoltLogger) is a deliberate follow-up pending credential redaction.
- Cap Neo4j driver ConnectionAcquisitionTimeout and MaxTransactionRetryTime at 10s on query commands so interactive failures (e.g. wrong URI scheme/port) surface within seconds instead of the driver's 1m / 30s defaults that read as a hang.
- docker create: --no-print-password suppresses generated password from stdout output (CLI-161)
- Surface an actionable suggestion when an Aura instance-type quota is exceeded (e.g. attempting to create a free-db when one already exists), and surface any panic diagnostic in the CLI's panic-recovery line so unhandled API status codes are diagnosable.
- Aura API error messages now render in the same multi-line bracket format used for auth errors instead of Go's default []string stringification.
- docker create: validate --version against allowlist (CLI-160)
- docker: redact NEO4J_AUTH/PASSWORD values in error messages from docker stderr (CLI-162)
- docs: add SECURITY.md documenting update trust root (CLI-158)
- update: warn on stderr and suggest switching to a self-managed install when --force overrides package-manager detection (CLI-157)
- Add 'docker' command tree for managing local Neo4j containers (CLI-123)
- Add organization list/get, project list/get, and workspace list/use commands; replace config project subsystem with aura.default-workspace key; deprecate aura tenant list/get (use project list and organization get instead — removal planned for a future release)
- docker create: auto-increment host ports when defaults are taken (CLI-131)
- Aura workspace is now applied to all instance, customer-managed-key, and graph-analytics session commands; --organization-id and --project-id flags resolve the target project and --tenant-id is deprecated in favour of --project-id
- Add feature-flag registry; rename aura.beta-enabled to flag.aura-beta (legacy key still read until CLI-134)
- Emit structured error envelope to stdout when --format=json or --format=toon and a command fails (CLI-140)
- Add 'upgrade' alias for the update command and 'did you mean' suggestions for typo'd subcommands
- Remove residual aura-cli source/build artifacts (standalone entrypoint, skill bundle subsystem, dead workflow gating, stale docs).
- Trim whitespace from positional ID args in remaining aura subcommands (CLI-139)
- Unknown subcommands now exit 2 (usage_error) at every nesting level instead of falling through to a help dump with the wrong exit code.
- Setting NEO4J_CLI_AUTO_INSTALL_SKILL=1 before installing via npm, Homebrew, or the curl installer now automatically runs
skill install --rwafter binary placement; the feature is strictly opt-in and any failure is suppressed so the install always succeeds. - The neo4j-cli skill is now automatically refreshed in the background when the binary version changes, so agents always get up-to-date tool documentation without manual reinstall. Auto-refresh can be disabled via
neo4j-cli config set skill-auto-refresh false.
- Differentiate exit codes by error category: usage (2), not-found (3), auth (4), conflict (5), validation (6), rate-limit (7), upstream (8). See neo4j-cli agent-context for the closed set. (CLI-84)
- credential dbms add: --file accepts an Aura-exported credentials file (CLI-75)
- credential aura-client add: --file accepts an Aura-exported credentials file (CLI-100)
- Auto-detect agent harnesses; --rw no longer required when running interactively in a terminal (CLI-76)
- Add usage examples to every command's --help output (CLI-93).
- Renamed --file to --env on 'credential dbms add' and 'credential aura-client add' for consistency with 'query --env' (CLI-101).
- Renamed --await to --wait on all async commands. --await is accepted as a deprecated alias for one release; see CLI-111 for removal (CLI-87).
- Remove '-f' shorthand from '--format'; '-f' is now the shorthand for 'neo4j-cli update --force' (CLI-85).
- skill bundle: surface query :schema as the schema-first workflow on SKILL.md, query --help, and :schema --help (CLI-116)
- Fix broken Aura docs URL and update subcommand wording in the 'default credential not set' error (CLI-80).
- Fix neo4j-cli exiting 0 on command errors (CLI-64).
- fix(cli): scope query/EXPLAIN --rw note to
query --helponly (CLI-104)
- Add neo4j-cli agent-context command emitting the full CLI shape as JSON for AI-agent discovery (CLI-83)
- Expand the query subcommand's agent skill with schema-first workflow, parameter usage, embeddings, and Cypher 25 vs Cypher 5 syntax guidance via a new query-additions.md companion document.
- Add telemetry opt-out via 'config set telemetry false' and the DO_NOT_TRACK=1 environment variable
- Suppress full --help output when a command is rejected for missing --rw, invalid --format, or unknown --credential; show only the focused error message.
- skill install/remove --help now lists every supported agent (CLI-74)
- fix(cli): keep stdout clean for --format json consumers — route narration to stderr (CLI-82, CLI-95, CLI-96), TTY-gate :schema H2 headers (CLI-94)
- GA release of neo4j-cli
- Fix analytics HTTP timeout not being enforced when Mixpanel is unavailable — the RoundTrip adapter was calling http.Client.Post which discards the incoming request context, causing the inner client's 10-second timeout to apply instead of the configured 2-second one
- install script now defaults to ~/.local/bin on macOS to avoid requiring sudo
- Fix HuggingFace serverless embed URL to append /pipeline/feature-extraction, so sentence-transformers/* models route to feature-extraction instead of sentence-similarity (CLI-69)
- Fix 'update check' to print a friendly message instead of an error+usage dump, and auto-elevate via sudo when updating from a non-writable install location like /usr/local/bin.
- Fix install script checksum verification on macOS Tahoe (Darwin 25) by switching to POSIX-compatible sha256 flags that work with both GNU coreutils and BSD/Darwin sha256sum/shasum.
- Replace 'neo4j-cli update --check' flag with 'neo4j-cli update check' subcommand for consistency with 'skill check'.
- Add 'neo4j-cli update' to self-update the binary; --pre-releases opts into alpha/beta/rc, --check reports availability without installing.
- Add embedding support to neo4j-cli query: new
:embedmodifier on --param computes a vector inline (e.g.--param q:embed=hello) and feeds it as a Cypher parameter; newquery :embed [text]standalone leaf prints a vector without opening a Bolt connection; five new persistent flags onquery(--embed-credential, --embed-provider, --embed-model, --embed-base-url, --embed-dimensions) configure the provider (openai, ollama, huggingface). Newcredential embed {add,list,remove,use}subtree stores embed-provider credentials. New--embed-credentialflag oncredential dbms addand newcredential dbms set-embedleaf link a dbms credential to a stored embed credential soquerycan auto-resolve embedding config from the active dbms credential. - instance create: --name flag is now optional; when omitted, the CLI automatically generates the next available InstanceNN name within the tenant
- Fix:
neo4j-cli aura instance create --type free-dbnow correctly stores the database name inside the dbms credential
.envdiscovery forquerynow stops at the first.gitancestor or your$HOMEboundary instead of walking the whole filesystem; when a.envabove cwd is loaded, aninfo: loading .env from <path>line is printed to stderr so the overlay is never silent.
- Add --credential/-c flag to Aura resource commands (instance, tenant, deployment, dataapi, graphanalytics, customermanagedkey, import) to override the active credential per-invocation; add -c shorthand to neo4j-cli query --credential
neo4j aura instance createnow automatically saves the new instance credentials to local storage; use--credential-nameto set a custom name,--no-credential-storageto skip saving, or--no-credential-printto suppress the password from output.
- Fix
install-neo4j-cli.ps1parse error on Windows PowerShell 5.1 by replacing UTF-8 glyph and box-drawing characters with ASCII equivalents; the BOM-less file was previously misread under the system ANSI codepage.
- Nudge agents toward
--format toonin help text and skill bundles.
- Add 'credential dbms' commands (add, list, use, remove) and integrate stored dbms credentials into 'query' connection resolution via the '--credential' flag
- Stop building and releasing the standalone aura-cli binary; the
neo4j-cli aurasubcommand is the replacement - Require --rw flag for any write operation; query run now uses the Neo4j Bolt driver (--insecure is removed; use neo4j+ssc:// for self-signed certs)
- Add 'skill print' command to preview the embedded SKILL.md before installing
- Emits startup event to help track usage
- Fix:
--formator-fwas not working
- analytics: emit command-specific events for aura (AURA), query (QUERY), and skill (SKILL) commands; query events record only the command name to prevent capturing query content or credentials that may contain PII, and include an is_aura flag derived from the --uri value
- Add toon output format option (--format toon / -f toon)
- analytics: simplify Service interface — removed EmitStartupEvent, EmitCommandEvent, EmitHelpEvent, Enable, and IsEnabled; EmitEvent now accepts an event suffix and always injects base properties at send time
- Add top-level
neo4j configcommands (config get,config set,config list) supporting dot-notation keys (e.g.neo4j config get aura.base-url,neo4j config get output) --outputflag now applies uniformly to config and credential commands;aura credential listnow renders as a table by default withname,type, andidentifiercolumns (sensitive fields omitted)neo4j aura confighas been removed; useneo4j config aurainstead- Add
skillsubcommand to install agent skills into supported AI agents (Claude Code, Cursor, Windsurf, etc.) neo4j-cliis now installable vianpm i -g @neo4j-labs/cli- Add 'query' command to run Cypher against a Neo4j database via the HTTP Query API
- query/:schema: auto-detect piped/redirected stdout and default --output to json
- query/:schema: send a User-Agent header (neo4j-cli/v) so server logs identify the CLI
- Renamed
--outputto--formatand added-fas a shorthand - distribute via Homebrew: install with
brew install neo4j-labs/tap/neo4j-cli(formula auto-generated by GoReleaser on stable releases)
- Remove leftover debug log lines (help displayed, invalid command with args, command executed successfully) that were printed to stdout from the CLI entrypoint
- Surface credential commands at neo4j-cli top level
- Removed the option to enable
betaaura commands - Bugfix:
aura config listnow only prints valid config values