Docs
View as markdown

Troubleshooting

Go from a relate error message or exit code to its fix: symptom tables that link each error to its reference entry and to the guide that resolves it.

clicypherhttpboltmcpagents

Before you start: Install relate

This guide shows you how to get from an error to its fix. Find the message in the tables, follow the reference link for the error's cause and exit code, and follow the fix link for the steps. Every row points at a page; the errors reference holds the complete entry for each one.

Prerequisites

  • The error's text from stderr and the command's exit code The number a relate run returns to the shell; each nonzero value names a class of failure, such as 2 for usage, 5 for conflict, 6 for a rejected statement. Read more in the glossary.
  • relate on your PATH (Install relate).
  • To follow along, the shared example graph as team.rl:
cat > team.cypher <<'EOF'
CREATE (ada:Person {name: 'Ada', role: 'engineer'}),
       (grace:Person {name: 'Grace', role: 'engineer'}),
       (noor:Person {name: 'Noor', role: 'maintainer'}),
       (relate:Project {name: 'relate', language: 'Rust'}),
       (tck:Project {name: 'opencypher-tck', language: 'Gherkin'}),
       (ada)-[:WORKS_ON {since: 2024}]->(relate),
       (grace)-[:WORKS_ON {since: 2023}]->(relate),
       (grace)-[:WORKS_ON {since: 2022}]->(tck),
       (noor)-[:MAINTAINS]->(relate),
       (ada)-[:KNOWS]->(grace);
EOF
relate query --database ./team.rl < team.cypher

Read the error

Run the failing command again with --mode envelope and print the exit code. In this example, the store A relate database: a directory, a single .rl file, or :memory:, opened with --database. Read more in the glossary's name is misspelled, tema.rl, so a read-only open finds nothing to open:

relate --database ./tema.rl --read-only --mode envelope "MATCH (p:Person) RETURN count(p) AS people"
echo "exit=$?"

The path starts with the working directory, shown as <dir>. The first line is stderr, the second the error object The JSON object a failed query run prints on stdout in the json, jsonl, envelope and speedscope modes: the class, the kind, the message, the exit code. Read more in the glossary on stdout:

Failed to open Relate: storage error: database not found: <dir>/tema.rl
{"error":{"code":"fatal_error","exit_code":1,"kind":"storage","message":"storage error: database not found: <dir>/tema.rl","retryable":false}}
exit=1

The error object's code is the class and exit_code the exit code, kind narrows the class, and retryable says whether running the same command again can succeed. retryable is true for a write-write conflict (exit 5) and for a --concurrent-logical-workspace-limit refusal while other statements hold the shared pool (exit 1, kind resource; reachable when statements run concurrently, as under relate serve). A one-shot CLI run meets only the first. A message's start is enough to find its row: <name> marks a part that varies, and … marks text left out.

Find the symptom

Opening a store

SymptomExit codeReferenceWhat fixes it
Failed to open Relate: storage locked: <path>5cli-conflict-lockedAnother process holds the store. Share one store between two processes
Error: Failed to open Relate: storage locked: <path> when relate serve starts1cli-conflict-lockedThe server needs the writer lock. Share one store between two processes
storage error: database not found: <path> or storage error: read-only open requires an existing database at <path>1cli-fatal-error-storageA read-only open never creates a store. Check the path. --read-only
storage error: WAL checksum mismatch1cli-fatal-error-storageA damaged WAL; restore a backup. Recover from a crash
storage error: unsupported snapshot version <n> or storage error: unsupported graph value encoding: <n>1cli-fatal-error-storageA newer relate wrote the store. Upgrade a store
semantic error: live freshness (WAL follow) is only supported for native directory databases1--read-onlyFollow a directory store. Share one store between two processes
Error: final checkpoint failed: <reason>1cli-final-checkpoint-failedFree disk space and check permissions. Recover from a crash
An operating-system I/O failure, such as a disk with no space left1cli-fatal-error-ioCheck the path, permissions, and free space. Choose a store layout
Recent writes missing after a crash——The store ran under a relaxed durability mode. Choose a durability mode

Memory and size

SymptomExit codeReferenceWhat fixes it
capacity exceeded: used=… limit=…1engine-graph-size-cap, cli-fatal-error-capacityA write reached --logical-graph-size-limit. Size a store and its memory
This statement tried to commit a single WAL record of at least <used>. …1engine-wal-payload-capCommit in smaller transactions. Size a store and its memory
This statement tried to build a single value of <size>. …1engine-expression-memory-capBuild the value in smaller pieces. Limits and sizing
The process ends with no relate error while the graph grows——The operating system stopped it for memory. Size a store and its memory

Running statements

SymptomExit codeReferenceWhat fixes it
syntax error: parse error: …6cli-validation-error-syntaxFix the statement at the reported column. Cypher overview
semantic error: ParameterMissing: Expected parameter(s): <names>6engine-parameter-missingBind each $name with --param. Script the CLI
semantic error: WriteOnReadOnlyAccessDatabase: …6engine-write-on-read-onlySend the write to a writable open. Share one store between two processes
syntax error: SafeModeViolation: …6engine-safe-mode-violationAdd the label or the LIMIT. Keep an agent safe
semantic error: ConstraintValidationFailed: …6engine-constraint-requires-properties, engine-constraint-property-typeSet the constrained property, with a value of the required type, in the same write. Indexes and constraints
semantic error: IndexAlreadyExists, semantic error: ConstraintAlreadyExists, semantic error: ConstraintNotFound6engine-index-already-exists, engine-constraint-already-exists, engine-constraint-not-foundAdd IF NOT EXISTS or IF EXISTS. Indexes and constraints
Unable to drop '<name>': the index belongs to a constraint., semantic error: AlreadyExists: there already exists an index …1 or 6engine-index-belongs-to-constraint, engine-constraint-index-already-existsDrop the constraint, not its index; drop a plain index before a constraint on the same property. Indexes and constraints
type error: VectorIndexDimensionalityMismatch, type error: vector() dimension does not match list6engine-vector-index-dimensionality-mismatch, engine-vector-dimension-mismatchEmbed with the model the index was built for. Vector search
syntax error: TraversalDepthExceeded: …6engine-traversal-depth-exceededLower the hop bound or raise --max-traversal-depth. Limits and sizing
syntax error: UndefinedVariable: …, UnknownFunction: …, type error: …, ArithmeticError: rounding necessary6 or 1engine-undefined-variable, engine-unknown-function, cli-validation-error-type, engine-division-by-zero, engine-rounding-necessaryFix the statement. Cypher overview
semantic error: NumberOutOfRange and other rejected argument values6cli-validation-error-argumentCorrect the value. Search by vector similarity
preview feature '<name>' is not enabled: set RELATE_PREVIEW=<name>6engine-preview-feature-not-enabledOpt in to the preview feature. Cypher overview
semantic error: DatabaseNotFound: Graph not found: <name>, Unsupported administration command: <statement>, a USE or WITH refused on an administration command6engine-database-not-found, engine-unsupported-administration-command, engine-use-on-administration-command, engine-with-on-systemA store has three fixed namespaces. Differences from Neo4j
A composite-only function, several USE targets in one statement—engine-composite-only-function, engine-multiple-use-targetsA statement runs against one graph. Differences from Neo4j
This database is not queryable. …, a write to system_ontologies6engine-system-ontologies-not-queryable, engine-system-ontologies-writeQuery the neo4j namespace. Limitations
NestedEvaluationBudgetExceeded: …—engine-nested-evaluation-budgetFlatten the nested subqueries. Limitations
write-write conflict5cli-conflict-conflictRun the statement again in a fresh transaction. Transactions and concurrency
A uniqueness constraint violated—engine-uniqueness-violationMERGE on the constrained key, or fix the duplicate. Cypher overview
Cannot change the namespace while a transaction is open.—engine-namespace-change-in-transactionEnd the transaction first. Transactions and concurrency
Error: query timed out after <duration>, query cancelled7cli-timeout, engine-cancelledBound the work or raise the timeout. Tune a query
A query execution failure while producing rows1cli-fatal-error-executionRead the message; it is not retryable. Exit codes and errors
internal error1cli-fatal-error-internalNot the statement's fault. Collect a report

Flags, environment, and input

SymptomExit codeReferenceWhat fixes it
Error: unknown flag: <flag>, Error: unexpected argument: <arg>2cli-usage-errorCheck the command's flags with relate <command> --help. CLI flags
Error: invalid --param value: parameter <name>: …2cli-invalid-paramQuote JSON values. Script the CLI
Error: invalid --namespace: …, Error: --namespace is not valid with pull …2cli-invalid-namespace, cli-pull-namespaceUse neo4j, system or system_ontologies, and none with pull. CLI flags
Error: invalid --durability-mode: …, Error: invalid RELATE_DURABILITY_MODE: …2cli-invalid-env-durability-modeUse full, everysecond or snapshot. Choose a durability mode
Error: invalid --logical-graph-size-limit: …, Error: invalid RELATE_LOGICAL_GRAPH_SIZE_LIMIT: …2cli-invalid-env-logical-graph-size-limitWrite the size in bytes, mb, mib, gb or gib. Size a store and its memory
Error: invalid RELATE_MAX_ROWS: …, RELATE_AGENT_MODE, RELATE_SAFE_MODE, RELATE_EXPRESSION_MEMORY_LIMIT, RELATE_CONCURRENT_LOGICAL_WORKSPACE_LIMIT or RELATE_MAX_TRAVERSAL_DEPTH2cli-invalid-env-max-rows, cli-invalid-env-agent-mode, cli-invalid-env-safe-mode, cli-invalid-env-expression-memory-limit, cli-invalid-env-concurrent-logical-workspace-limit, cli-invalid-env-max-traversal-depthFix or unset the variable. CLI flags
Failed to open Relate: semantic error: SemanticError: invalid RELATE_PREVIEW value: …1cli-invalid-env-previewUse a feature name from the message's list. CLI flags
Error: the '<command>' command is not included in this build of relate2cli-command-not-includedInstall a release binary. Install relate
parquet snapshot codec is not compiled into this build …—cli-parquet-not-compiledUse the JSON codec or a release binary. Storage formats

Scripts and the shell

SymptomExit codeReferenceWhat fixes it
Warning: exiting with an open transaction; rolling back uncommitted changes. …1cli-open-transaction-at-exitEnd the script with .commit or .rollback. Script the CLI
Error: could not read query input from stdin: <reason>1cli-stdin-read-errorPipe valid UTF-8. Script the CLI
note: write statement changed nothing; the graph is unchanged0cli-write-changed-nothingNot an error: the write matched nothing. Script the CLI
warning: result truncated to 100 rows …0cli-row-cap-warningNot an error: --max-rows 0 prints every row. Agent mode
LOAD CSV file unavailable, LOAD CSV file exceeds byte limit1cli-load-csv-unavailable, cli-load-csv-byte-limitPass --load-csv-dir and keep files under 8,388,608 bytes. Import a CSV

Agents and the skill

SymptomExit codeReferenceWhat fixes it
Error: skill: refusing to touch <dest>: …1cli-skill-refusing-to-touchThe folder wasn't written by relate. Install the agent skill
Error: skill: unknown agent: '<name>'2cli-skill-unknown-agentUse a name from the valid agents: line. Install the agent skill
Only MATCH queries are allowed for read-query, Only write queries are allowed for write-query—mcp-read-query-only, mcp-write-query-onlyThe statement went to the other MCP tool. Connect over MCP
malformed JSON-RPC message: <detail>, unsupported JSON-RPC version '<version>', an unknown method or bad parameters, Error: internal error—mcp-parse-error, mcp-unsupported-version, mcp-method-not-found, mcp-invalid-params, mcp-internal-errorThe MCP host and server disagree. Connect over MCP

Serving over HTTP, MCP and Bolt

SymptomExit codeReferenceWhat fixes it
HTTP 401 Unauthorized, or The client is unauthorized due to authentication failure. over Bolt—http-unauthorized, bolt-unauthorizedSend the server's password for the user relate. Share one store between two processes
transaction <id> expired after <n>s idle, transaction registry full: …—http-transaction-expired, http-transaction-registry-fullCommit sooner, or raise the server's limits. relate CLI
query result exceeds max-result-bytes limit of <N> bytes—bolt-result-too-largeReturn fewer or smaller rows. Tune a query
HTTP 400, 404 or 500, a malformed Bolt message—http-malformed-or-syntax, http-not-found, http-general, http-internal, bolt-request-invalidRead the error in the response body. Errors
MCP over HTTP answers 415, {"error":"the request content type is browser-\"simple\" …"}—mcp-http-unsupported-media-typeSend Content-Type: application/json. Serve a store over MCP
MCP over HTTP answers 401, {"error":"authentication required"}—mcp-http-unauthorizedSend Authorization: Basic with the server's credential. Serve a store over MCP
MCP over HTTP answers 403, {"error":"origin is not allowed"}, or 405—mcp-http-origin-forbidden, mcp-http-method-not-allowedSend POST requests without a browser Origin, or from a loopback one. MCP server

Starting relate serve

SymptomExit codeReferenceWhat fixes it
Error: serve has nothing to serve: …2cli-serve-nothing-to-servePass --http PORT, --mcp PORT|stdio or --bolt PORT. relate serve
Error: serve --<surface> <port>: cannot bind <host>:<port>: <reason>1cli-serve-bind-failedChoose a free port, or stop the process that holds it. Serve a store over MCP
Error: Failed to open Relate: <detail> from relate serve1cli-serve-open-failedStop the other opener, or serve a directory store --read-only beside its writer. Share one store between two processes
Error: serve takes --read-only after the verb, not before it …2cli-serve-read-only-before-verbPut --read-only after serve. relate serve
Error: --auth: expected user:password or 'none', Error: RELATE_AUTH: …, Error: --auth requires USER:PASSWORD or none1 or 2cli-serve-auth-malformed, cli-serve-env-auth-malformed, cli-serve-env-auth-empty-side, cli-serve-auth-missing-valuePass <user>:<password> or none. Authentication and TLS
Error: serve --mcp stdio skips auth …2cli-serve-auth-stdioDrop --auth from a stdio-only command. Connect over MCP

Copying stores and Neo4j

SymptomExit codeReferenceWhat fixes it
Failed to clone database: storage locked: <path>1cli-clone-lockedWait for the writer to exit, or clone a directory store. Clone and convert a store
Failed to clone database: storage error: database not found: <path>, … wal_dir is not supported for .rl single-file databases …1cli-clone-source-missing-rl, cli-clone-wal-dir-rlCorrect SOURCE; drop --wal-dir for a .rl source. relate clone
Failed to clone database: semantic error: markdown body properties are set …1cli-clone-markdown-body-properties-codecAdd --to-snapshot-format markdown, or drop --markdown-body-properties. Clone and convert a store
Error: destination database is not empty; pull writes into an empty database only …1cli-pull-destination-not-emptyPull into a new path. Pull a subgraph from Neo4j
Error: <name> missing from environment, Error: <name> missing from env file1cli-pull-credential-missing, cli-pull-env-file-keySet NEO4J_URI, NEO4J_USERNAME and NEO4J_PASSWORD. Pull a subgraph from Neo4j
Error: refusing to send Basic auth credentials in the clear: …1cli-pull-plaintextUse an https:// NEO4J_URI. relate pull
Error: shape query RETURN must be graph elements …, Error: pull cannot target :memory: …1 or 2cli-pull-shape-query, cli-pull-memoryReturn nodes, relationships or paths; name a directory or .rl path. Pull a subgraph from Neo4j
Error: push takes one of --query, --labels, or --types …, Error: --merge-key "<value>" must be NAME:PROP[,PROP] …, Error: --namespace is not valid with push …2cli-push-one-scope, cli-push-merge-key-format, cli-push-namespacePass one selector and <Label>:<property> merge keys. Push a subgraph to Neo4j

Extensions

SymptomExit codeReferenceWhat fixes it
Error: no installed action '<name>' …, Error: run requires an action name …2cli-run-not-installed, cli-run-no-actionInstall the extension, then name its action. Install and run an extension
Error: the extension child exited with <n>: <stderr>, Error: the extension wrote no MCP request within 10s1cli-extension-child-exited, cli-extension-no-requestRead the child's stderr; check the package with relate extension check. Write an extension
executable: failed: the extension executable <path> is not executable2cli-extension-check-not-executableSet the execute bit on the file the manifest names. Write an extension
Error: extension install: --url accepts only https URLs …2cli-extension-url-schemeUse an https:// URL. Install and run an extension
Error: extension remove: no installed extension '<name>' …, Error: extension init: <dir> already exists …1cli-extension-remove-not-installed, cli-extension-init-existsCheck the name with relate extension list; choose another directory. relate extension

Client libraries and the browser

These errors come from a client library, not the CLI, so they have no exit code.

SymptomExit codeReferenceWhat fixes it
librelate_ffi not found; looked in … (Node.js)—node-ffi-not-foundInstall the package again with its optional dependencies, or set RELATE_LIB. Use the Node.js client
query params must be a plain object, query params: <path> … (Node.js)—node-params-not-object, node-param-not-cypher, node-param-int64-rangePass one plain object of numbers, strings, booleans, lists and maps. Use the Node.js client
a synchronous <call> cannot start while an async query is in flight on this connection (Node.js)—node-sync-while-asyncAwait the async query, or use another connection. Use the Node.js client
storage error: OPFS needs a dedicated worker, storage error: OPFS is not available in this browser—wasm-opfs-needs-worker, wasm-opfs-unavailableRun the engine in a dedicated worker; use an in-memory store where OPFS is missing. Use relate from a web page
storage locked: opfs://<name>, OPFS name must be 1-64 characters from [A-Za-z0-9_-]—wasm-opfs-locked, wasm-opfs-nameSend statements to the worker that holds the store; rename it. Use relate from a web page
failed to fetch Wasm: <status> <statusText> fetching '<url>'—wasm-fetch-failedServe relate_bg.wasm beside relate.js. Use relate from a web page
null out pointer (C)—c-null-out-pointerPass a pointer to a variable for the call to fill. Use the C ABI

Client library errors lists every client message, including the exception classes of each language.

Collect a report

When a row says to report, or no row fits, these four things let someone else reproduce the problem without your data:

PartHow to get it
The relate versionrelate --version; relate --version --json adds the operating system and architecture
The store's layout, format, and countsrelate info --database <path> --json, which reads metadata only: layout, format, counts, and each index and constraint with its label and property keys, never property values
The error object and exit codeThe failing command with --mode envelope, then echo "exit=$?"
The statement and the flagsThe command line as run, with any RELATE_ environment variables that were set

The version check prints two lines:

relate --version
Relate v0.1.2
License: Apache 2.0 (binary)

Verify

After the fix, the command that failed exits 0. With the store's name spelled right:

relate --database ./team.rl --read-only --mode envelope "MATCH (p:Person) RETURN count(p) AS people"
echo "exit=$?"
{"columnTypes":["INTEGER"],"columns":["people"],"notifications":[],"planCache":"miss","rows":[{"people":3}],"timings":{"elapsed_ms":0.339834,"execute_ms":0.17541700000000002,"lex_parse_ms":0.028416999999999998,"lower_ms":0.041665999999999995,"parse_ms":0.102959,"plan_ms":0.052375,"result_generation_ms":0.00033299999999999996,"rewrite_ms":0.008291999999999999},"truncated":false}
exit=0

If it goes wrong

  • The message is in no table. Search the errors reference for its first words; it lists every error with its cause and remedy.
  • The exit code is 3, 4, or 8. relate reserves those codes and doesn't produce them. Check which program in the pipeline returned it (exit codes).
  • internal error. An engine invariant failed, which is not the statement's fault. Collect a report with the statement that caused it.