APOC Compatibility
Traverse ships a built-in APOC compatibility layer covering the complete APOC core catalog - 246 functions and 190 procedures. No plugin JAR, no allowlist configuration, no apoc.conf: every call works out of the box, in the server and in the browser build alike.
Catalog overview
The major namespaces, by size:
| Namespace | What it covers |
|---|---|
apoc.coll.*, apoc.map.*, apoc.text.* | Collection, map, and string utilities - the workhorse function groups (125+ functions) |
apoc.create.*, apoc.merge.*, apoc.refactor.* | Dynamic node/relationship creation, merges, and graph refactoring (rename labels, redirect relationships, clone subgraphs) |
apoc.load.* | Load JSON, CSV, XML, Arrow, and JDBC sources into queries |
apoc.export.* / apoc.import.* | JSON (NDJSON), CSV, GraphML, Cypher script, and Arrow IPC - in both directions |
apoc.trigger.* | Triggers backed by a real graph event system - run statements on create/update/delete |
apoc.periodic.* | Batched iteration and background job scheduling |
apoc.agg.* | Extra aggregation functions (first, last, median, percentiles, statistics) |
apoc.path.*, apoc.neighbors.*, apoc.algo.* | Path expansion with label filters, neighborhood exploration |
apoc.meta.*, apoc.schema.* | Schema introspection and assertions |
apoc.date.*, apoc.temporal.*, apoc.number.*, apoc.math.* | Formatting and numeric helpers |
apoc.util.*, apoc.convert.*, apoc.hashing.* | Compression (apoc.util.compress / decompress with the BYTEARRAY type), conversions, hashes |
apoc.generate.*, apoc.static.*, apoc.spatial.* | Graph generators, static value store, geocoding |
Signatures are browsable inside Studio's reference panel (which gained APOC entries in 0.8.0), or via SHOW PROCEDURES / SHOW FUNCTIONS.
Loading data
-- Local JSON file (one value per document / array element)
CALL apoc.load.json('file:///people.json') YIELD value
RETURN value.name, value.age;
-- HTTP with headers and payload
CALL apoc.load.jsonParams($url, {Authorization: 'Bearer ' + $token}, null) YIELD value
RETURN value;
-- Relational sources via JDBC-style URLs
CALL apoc.load.jdbc('jdbc:postgresql://db.internal/warehouse',
'SELECT id, name FROM customers') YIELD row
MERGE (c:Customer {id: row.id}) SET c.name = row.name;apoc.load.jdbc supports two URL schemes: jdbc:sqlite:<path> and jdbc:postgresql://<host>/<db>. Like LOAD CSV, file loaders read local paths; loaders that reach the network (jsonParams, jdbc, geocoding) are available in server builds but not in the browser build, where they return a clear runtime error.
Batched updates
CALL apoc.periodic.iterate(
'MATCH (p:Person) RETURN p',
'SET p.processed = true',
{batchSize: 1000, parallel: false}
) YIELD batches, total, committedOperations, failedOperations;Triggers
CALL apoc.trigger.add('stamp-created',
'MATCH (n) WHERE id(n) IN $createdNodes SET n.created = timestamp()',
{phase: 'after'}
) YIELD name, installed;Triggers fire synchronously at the query boundary. Manage them with apoc.trigger.list / pause / resume / remove.
Export and import
-- Whole-graph GraphML export
CALL apoc.export.graphml.all('graph.graphml', {});
-- Query results as CSV
CALL apoc.export.csv.query('MATCH (p:Person) RETURN p.name, p.age', 'people.csv', {});
-- Columnar Arrow IPC (round-trips with apoc.load.arrow)
CALL apoc.export.arrow.all('graph.arrow', {});Differences from the APOC plugin
- Built in, not bolted on - there is no plugin directory, no sandboxing configuration, and no version matrix to manage. The catalog version-locks to the Traverse release.
- Core catalog scope - the complete APOC core surface plus selected extended-library entries (
apoc.generate.*,apoc.static.*,apoc.nodes.group,apoc.example.movies). - BYTEARRAY - binary values are a first-class type, so
apoc.util.compressand Arrow round-trips preserve bytes exactly.