/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
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 (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))