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 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.