From schema to query to server — one language, one stack, zero ORM.

Schema. Declare your types once in SDL and Disc takes it from there — validating links, resolving constraints, and turning intent into structure. Your schema is the source of truth, not an afterthought.

Query. Write EdgeQL1 that mirrors the shape of your result. Select a user, pull their posts, nest a third level deep — and get back precisely that, typed end to end.

Storage. PostgreSQL 18 and up does the heavy lifting underneath, exactly as it always has. Battle‑tested storage, none of the setup.

Runtime. Built on Deno, with first‑class TypeScript, a real permissions model, and a modern standard library. Native by design, not by adapter.

Migrations. Disc diffs your schema against history and writes the DDL for you. Evolve your model with confidence and a paper trail.

Admin UI. A SvelteKit console served right alongside your server. Browse, edit, query, and watch your schema evolve.
Most databases make the schema something you wrestle into place after the fact.
Disc puts it first. You write declarative SDL — types, links, properties, constraints — and that single description drives your tables, your migrations, and your generated types.
Define it once. Trust it everywhere.
dbschema/default.discGel2‑compatible SDLLinks, properties, and constraintsValidated before a single table is built
type Merchant extending BaseRecord {
allowedOrigins -> array;
multi apiKeys -> api::ApiKey;
autoSettle -> int64 {
constraint one_of (0, 1);
# 0 === false
default := 1;
};
customBranding -> json;
required email -> str { constraint exclusive; };
metadata -> json;
onboardingCompleted -> int64 {
constraint one_of (0, 1);
# 0 === false
default := 0;
};
required organizationName -> str;
multi paymentRequirements -> payment::PaymentRequirements;
payoutAddresses -> PayoutAddresses;
multi payouts -> settlement::Payout;
settlementDelaySeconds -> int64 { default := 0; };
status -> MerchantStatus { default := MerchantStatus.PENDING; };
tier -> MerchantTier { default := MerchantTier.STARTER; };
multi transactions -> payment::Transaction;
multi webhookEndpoints -> webhook::WebhookEndpoint;
webhookRetries -> int64 { default := 3; };
#
index on ((.created, .status, .tier));
}
EdgeQL1 is the best part of the original, and Disc keeps it intact. Ask for the shape you want and get the shape you want — objects, nested links, and all — compiled straight to PostgreSQL underneath.
No ORM to fight. No mapping layer to maintain. No N+1 surprises waiting in the dark.
1 select Merchant {
2 autoSettle,
3 email,
4 organizationName,
5 transactions: {
6 amount,
7 currency,
8 status
9 }
10 } filter .email = "user@example.com"; email............. user@example.com
autoSettle........ 1
transactions...... [{...},{...},{...}]
organizationName.. Acme CorpOne query. One round trip. The exact shape you described.
Disc ships with PostgreSQL and manages its entire life for you. The right binary for your platform downloads on first run, initializes into a private instance, and starts on demand. Socket‑only by default, so there’s no port to expose and no conflict to chase.
You get the world’s most trusted storage engine without ever becoming its administrator.
Disc is built on Deno from the ground up — not ported, not wrapped. That means built‑in TypeScript, a real permissions model, and a modern standard library doing the work, with a single‑language stack from schema to server.
One runtime. One language. No glue.
Change your schema and Disc handles the rest. It reads where you are, reads where you’re going, and writes the DDL to get there — tracked, ordered, and replayable.
Migrate without the migraine.
Disc’s admin console is built to look the part — a modern, built-in interface where everything about your data comes into view. Browse your schema, edit rows inline, compose EdgeQL1 with autocomplete, and trace a query’s execution plan.
It’s your data’s identity disc, made visible.

Your schema is the contract, your types enforce it, and your queries return exactly what they promise.
Disc is built so the database tells you the truth — at compile time, not in production. Aware of your data’s shape, so you never have to guess at it.
Install Disc | Visit documentation