Quickstart

This page is the smallest generic setup path for trying CrateStack in a Rust service.

1. Include A Schema

Example schema:
Pick the macro that matches the crate’s role:
db = Postgres is the argument for a schema with a real datasource { provider = "postgresql" } block. A schema declaring datasource { provider = "none" } instead pairs with db = None — see Procedures-only servers below. The two must agree: passing db = Postgres against a provider = "none" schema (or vice versa) is a compile-time macro error, not a runtime one. Embedded (mobile / desktop / browser-via-OPFS) and HTTP-client crates use different macros — see Offline-First Embedded SQLite and the client-runtime docs respectively.

2. Build The Generated Runtime

3. Use Delegates Directly

You can use CrateStack without mounting the generated REST layer.

4. Optionally Bind Auth For Internal Callers

5. Optionally Mount Generated Routers

The () in second position is the computed-field resolver. A schema with no @computed fields needs no resolver at all, and the macro generates impl ComputedFieldResolver for () so the unit type satisfies the bound. Replace it with your own resolver once you declare a computed field — see Computed Fields.

Procedures-only servers (no database)

Not every server owns a database — see Procedures-Only Servers with No Database for datasource { provider = "none" }, db = None, and the cratestack-api facade.
  1. ../guides/auth-provider for the host auth boundary
  2. ../architecture/transport-architecture for codec, framing, and envelope rules
  3. ../overview/banking-readiness for the regulated-workload primitives
  4. ../guides/offline-first-sqlite if you want to run the same schema embedded against a local SQLite database — same .cstack file, sync API on native, OPFS-backed in the browser, no tokio
  5. ../guides/no-database-procedures for procedures-only servers with no database at all