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:

NamespaceWhat 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.compress and Arrow round-trips preserve bytes exactly.