Modules
Bulk-create vertices and edges over ArcadeDB's POST /api/v1/batch/<db> NDJSON endpoint —
the heavy-ingest sibling of Arcadic.Import.database, for records you hold in the client.
Live change-events client for ArcadeDB's /ws WebSocket feed — arcadic's
one caller-supervised process.
A single change-feed delivery from Arcadic.Changes.
Connection handle for ArcadeDB — pure data, no process.
A server-returned ArcadeDB error, normalized to a typed reason.
Server-side database export over ArcadeDB's EXPORT DATABASE file://<name> command (symmetric to
Arcadic.Import). The target is a bare <name> written to the server's configured exports
directory — a path/traversal character is rejected value-free (ArcadeDB itself rejects a directory
in the target: "Export file cannot contain path change"). with: settings (e.g. format: "jsonl",
overwrite: true) reuse Arcadic.Import's no-parens grammar: names Arcadic.Identifier-validated,
values number/boolean/string (string values charset-allowlisted, injection-inert). Tenant-blind;
every rejection is value-free (never echoes the name/value — AGENTS.md Rule 3). The success row
(operation/toUrl/totalRecords/…) is top-level-@props-stripped by Result.normalize (a
shallow Map.drop per row — correct because the export row is flat) via command/4.
ArcadeDB full-text search — tenant-blind FULL_TEXT (Lucene) index DDL and
SEARCH_INDEX/SEARCH_FIELDS query builders, parallel to Arcadic.Vector.
ArcadeDB user-defined functions — tenant-blind DEFINE FUNCTION / DELETE FUNCTION DDL,
parallel to Arcadic.FullText/Arcadic.Geo.
ArcadeDB geospatial index DDL — tenant-blind GEOSPATIAL index create/drop, parallel to
Arcadic.FullText's single-property form.
Allowlist validation for identifiers arcadic places into a URL path or a statement (database names, labels, property names).
Bulk load over ArcadeDB's IMPORT DATABASE command (imports a CSV / JSON / JSONL / GraphML /
Neo4j / OrientDB / ArcadeDB export into conn.database, server-side).
Document bulk-insert into a target class over a transport that supports it (gRPC BulkInsert).
ArcadeDB materialized views — tenant-blind CREATE MATERIALIZED VIEW / DROP MATERIALIZED VIEW
DDL, parallel to Arcadic.Function/Arcadic.Trigger/Arcadic.Geo.
Behaviour for an ArcadeDB migration — a versioned pair of forward/backward steps.
Migrations are tenant-blind schema changes; author raw DDL/DML via Arcadic.command/4
in up/1 and down/1.
Declares an ordered list of migration modules.
Runs Arcadic.Migrations in order and tracks applied versions in the
_arcadic_migrations document type. Tenant-blind: it runs DDL/DML and records
integer versions — no tenant, scope, or Ash concept. Assumes single-process,
deploy-time execution (like every migration tool); it does not take an advisory
lock, so do not run two migrators concurrently against one database.
Constructors for ArcadeDB's typed-JSON param value-wrappers — an efficient way to send a byte array or an INT8-quantized vector as a bound parameter instead of a verbose JSON number array.
Single-record CRUD over gRPC — create/lookup/update/delete a record by its @rid, working in
raw maps (no typed Node/Edge decode; that stays ash_arcadic's job — charter-compatible).
A convenience surface over the gRPC CreateRecord/LookupByRid/UpdateRecord/DeleteRecord
RPCs; everything here is also reachable via Arcadic.command/query with SQL/Cypher. gRPC-only:
an HTTP/Bolt conn returns :not_supported.
Normalizes an ArcadeDB command/query response envelope into a list of rows.
Read-only introspection of ArcadeDB schema metadata — types, properties, indexes, and
buckets — over the SQL SELECT FROM schema:* surface (Cypher does not parse it).
Server security & auth admin: session login/logout, active sessions, and user/group/API-token
management — over ArcadeDB's HTTP admin surface. Reads (users/groups/api_tokens/sessions)
use the read-only REST endpoints; mutations (create_user/drop_user) use server commands (the
REST paths are read-only — POST /server/users → 400). Tenant-blind.
Server-level admin: create/drop/list databases, existence, readiness. Every
identifier is allowlist-validated BEFORE any request reaches the wire (fixes the
interpolation surface a hand-written create database <name> would open). Returns
are tagged tuples — a transport failure is never swallowed into a bare boolean.
Not delegated from the Arcadic facade: destructive admin stays namespaced.
Value-free :telemetry.span/3 wrapper. Owns the metadata allowlist — the single
enforcement point for "no statement text, no params, no values, and NO database
name" (the DB name is the tenant/mode selector upstream; tenant-blind includes
telemetry). An off-allowlist key raises rather than shipping identity downstream.
Mirrors ash_age's R7 allowlist pattern.
ArcadeDB time-series — tenant-blind client for the /api/v1/ts/<db> wire family (InfluxDB
line-protocol write, JSON query/latest, PromQL reads) plus the TIMESERIES DDL, downsampling
policies, and continuous aggregates. Requires ArcadeDB >= 26.7.2 (older servers answer the
/ts routes with a plain 404 %Arcadic.Error{http_status: 404}).
Session transactions. transaction/3 begins a session, runs the fun with a
session-scoped conn, and commits on a normal return. On an exception it rolls
back and RERAISES (postgrex semantics — unexpected failures propagate, they do
not become {:error, …}). Use rollback/2 for an intentional abort that yields
{:error, reason}. Nesting raises — there is no verified HTTP savepoint contract.
The transport seam (charter D2). One implementation ships — Arcadic.Transport.HTTP
(Req/Finch). A future Bolt adapter implements the same callbacks. Callbacks are
SEMANTIC (mode/session), not HTTP-verb-shaped, so a non-HTTP transport can honor
them. This behaviour is also the mock seam consumed by ash_arcadic's tests.
Bolt transport for ArcadeDB via the boltx driver (Bolt v4). Verified interop
(spec §15 P19/P20). Build the transport_options with Arcadic.Transport.Bolt.setup/1
— it returns [bolt: pool, bolt_opts: resolved], so both the query hot path (:bolt)
AND query_stream/4 (:bolt_opts) work from one call and cannot drift to different
hosts/creds. (start_link/1 returns only the pool ref — use setup/1 if you also stream.)
Optional gRPC transport over ArcadeDB's gRPC plugin (GrpcServerPlugin).
Caller-supervised shared-channel cache for Arcadic.Transport.Grpc.
The HTTP Cypher transport (the only implementation of Arcadic.Transport).
A transport/network failure with no HTTP response (connection refused, timeout,
closed). reason is the underlying Mint/Finch reason atom — value-free.
ArcadeDB triggers — tenant-blind CREATE TRIGGER / DROP TRIGGER DDL, parallel to
Arcadic.Function/Arcadic.Geo.
ArcadeDB dense vector search — tenant-blind index DDL and nearest-neighbour /
hybrid-fusion query builders over ArcadeDB's LSM_VECTOR surface.