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:

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.