/interfaces

Open tables and APIs

Every interface speaks to the same unified model. SQL, GraphQL, REST, or streams. Your choice of tooling, one source of truth.

SQL

Attach with DuckDB, Trino, or Spark. Query the ontology with standard SQL. The schema reflects relationships discovered during migration.

DuckDB

ATTACH 's3://dbsof/catalog' (secret='...');

Trino

CREATE SCHEMA dbsof WITH (location='s3://dbsof/catalog');

Spark

spark.read.format('iceberg').load('dbsof.invoices_fact')

GraphQL

Typed relations mirror the ontology directly. Traverse from orders to customers to shipments without joins. Schema registry entries back each endpoint.

Relationships discovered during schema introspection become traversable edges.

Mutations respect versioning and provenance, keeping operational writes deterministic.

REST

FRAND REST endpoints mirror canonical objects and events. Standard HTTP verbs, predictable paths, OpenAPI specs generated from the ontology.

rest-api.http
rest-api.http
GET /v1/orders/{id}
GET /v1/orders?party_id=...
POST /v1/events (content-type: application/json)
Authorization: Bearer <token>

Streams

Zero-copy, policy-aware CDC feeds. Filter by object, field, tenant, or enrichment tags. Drive downstream systems without duplication or lag.

Subscribe to changes at any granularity. Field-level filters reduce noise.

Backpressure and replay built in. No separate stream infrastructure required.

Lakehouse

Expose Delta, Iceberg, or Hudi-style tables with ACID, schema evolution, and time travel. Register in your catalogue. Share without copying.

invoices-fact.sql
invoices-fact.sql
-- invoices_fact (Iceberg-style)
invoice_id STRING, party_id STRING, po_id STRING,
total DECIMAL(18,2), currency STRING,
posted_at TIMESTAMP, effective_from TIMESTAMP, version INT
PARTITIONED BY (bucket(64, party_id), days(posted_at))