waitlist
Module · Growth
Per-product waitlists with confirmation, queue position, referral codes and admin export.
cratefield-module-waitlist
Shippingcrates.io 0.4.4updated
fz add waitlistWhat you get
A menu of backend modules, not a blank database. Supabase hands you general-purpose primitives — Postgres, auth, storage, a SQL editor — and the product is yours to assemble. A Cratefield module is the other end of that trade: an opinionated workflow whose routes, data model, admin export and abuse controls are already decided, and which you switch on. Both columns, with sources.
01
A visitor submits an address, gets a signed confirmation link, and is confirmed only when they follow it: double opt-in, so a confirmed list means the mail arrived. The join endpoint answers the same bytes whatever the row state, so it never reveals whether an address is already on it. The confirmed list is a CSV export behind the harness admin token. email-signup, 0.3.0 on crates.io.
02
A queue per product, an email confirmation, a dense position assigned inside one atomic batch so two simultaneous confirmations never share a place, referral codes that credit a confirmed referrer, and a CSV export of the whole list behind that same token. Its join endpoint gives nothing away either. waitlist, 0.3.0 on crates.io.
Both take their mail through the Mailer port — adapter-resend is one implementation — and accept Captcha and RateLimiter as optional ports. adapter-turnstile is the Captcha, and it fails closed.
Two ways to end up with a backend
01
The intended path: pick supported modules from a hosted console, fill in their settings, deploy, and get a backend with a database of its own. No such console is running today. The control plane behind it is unbuilt, and the dashboard screens are written but have nowhere to run. What the managed service would cover. Everything below this describes the other path.
02
Implement the Module trait, write forward-only migrations in the portable SQL subset, run the conformance kit, and compose the module into a backend at compile time. That is what ships. A supported module is a cargo add, or an fz add for the short registry the CLI carries; your own is written the same way and linked the same way. How composition works.
Before you pick
Changing the module set regenerates Cargo.toml and harness.rs and deploys a new backend, with a build log. Today each new module set is compiled to wasm, which takes seconds (measured); a build artifact keyed on the module set — so that a deploy of a set already built would upload it instead of compiling — is Designed (#59), not yet built. There is no instant activation, and this page does not draw one.
Each backend is one Worker with one D1 database of its own, which is where the isolation comes from: no shared tables, and no cross-tenant policy to get wrong. Modules can also reach outside it — a mailer, a captcha — and those providers carry their own accounts and their own invoices; the Cloudflare usage is billed by Cloudflare. None of it is a Cratefield bill, because there is nothing to buy. How the boundary works.
Not in this baseline: the sidecar programme is Designed in epic #56 — the mount exists, the deployment model for a module you did not build does not — and a Durable Object behind the Realtime port is Designed and unbuilt (#103).
The double opt-in, the signed links, the identical responses and the admin routes behind the harness admin token: those are properties of the modules we support, not of the platform. Code you write yourself is not sandboxed and is not automatically secure. It is compiled into your Worker and runs there with the same bindings and the same access as everything else you deployed, so it is yours to read and yours to review before you ship it.
/modules/ · 76 crates
Every module, adapter, runtime and tool in the harness, with its status and the line that adds it. 65 are on crates.io; 11 are in the repository only, and say so.
Shippingin the repo Designedpublic issues, unbuilt crates.iopublished Git dependencyin the repo, not published yet
Four that show what a module is for.
Module · Growth
Per-product waitlists with confirmation, queue position, referral codes and admin export.
cratefield-module-waitlist
Shippingcrates.io 0.4.4updated
fz add waitlistModule · Auth
WebAuthn registration and login, verified in pure Rust. A passkey cannot be removed when it is the account's only way in.
cratefield-auth-passkeys
ShippingGit dependency
cargo add cratefield-auth-passkeys --git https://github.com/Cratefield/harnessModule · Messaging
Device and browser subscriptions, per-category preferences, and a fan-out other modules call.
cratefield-module-notifications
Shippingcrates.io 0.3.3updated
fz add notificationsLibrary · Security
Envelope encryption over the Database port, in two tiers. A copied, renamed or rolled-back row fails to decrypt rather than quietly succeeding.
cratefield-secrets
Shippingcrates.io 0.4.2updated
cargo add cratefield-secretsEvery mark here belongs to an adapter or a runtime further up this page, built against that vendor’s own API. The marks are the vendors’, used to say who, and imply nothing else.
The core, the runtimes and the tools every venture starts from.
Library · Platform
The facade: one dependency that pulls in the core, a runtime, adapters and modules by feature, at versions known to agree.
cratefield
Shippingcrates.io 0.2.2updated
cargo add cratefieldLibrary · Platform
The kernel: the Module trait, the Harness builder, the ports, problem+json errors.
cratefield-core
Shippingcrates.io 0.10.1updated
cargo add cratefield-coreRuntime · Platform
Cloudflare Workers. D1, KV, rate limiting, R2 and wait_until mapped to ports.
cratefield-runtime-cloudflare
Shippingcrates.io 0.5.0updated
cargo add cratefield-runtime-cloudflareRuntime · Platform
The same harness as one tokio binary: axum on a TcpListener, Redis ports, in-process cron.
cratefield-runtime-native
Shippingcrates.io 0.4.4updated
cargo add cratefield-runtime-nativeRuntime · Platform
The harness in the browser: wasm, with SQLite over OPFS as the database.
cratefield-runtime-browser
ShippingGit dependency
cargo add cratefield-runtime-browser --git https://github.com/Cratefield/harnessTool · Platform
CLI: migrations collect and apply, doctor, modules, data export and import. It links against your venture's own harness.
cratefield-cli
Shippingcrates.io 0.7.2updated
cargo add cratefield-cliTool · Platform
The shared test suite every module must pass; run it in your own crate. Fake ports, an in-memory database, no network.
cratefield-testing
Shippingcrates.io 0.5.3updated
cargo add cratefield-testingLibrary · Platform
Renders every module's declared surface: forms and admin pages at /ui, a 4 KB embed for static sites, styling by plain CSS.
cratefield-ui
Shippingcrates.io 0.4.2updated
cargo add cratefield-uiLibrary · Platform
The venture manifest, and the deterministic composition generator it drives.
cratefield-manifest
Shippingcrates.io 0.3.2updated
cargo add cratefield-manifestLibrary · Platform
Server-side localisation: Fluent catalogs, BCP 47 negotiation and text direction.
cratefield-i18n
Shippingcrates.io 0.2.0
cargo add cratefield-i18nTool · Platform
Generates a typed TypeScript client from a venture's /__surface contract.
cratefield-client-ts
Shippingcrates.io 0.4.3updated
cargo add cratefield-client-tsTool · Platform
A Model Context Protocol server over fz --json: the CLI's own JSON, nothing of its own to drift.
cratefield-mcp
ShippingGit dependency
cargo add cratefield-mcp --git https://github.com/Cratefield/harnessAdapter · Platform
CustomHostnames over the Cloudflare for SaaS custom-hostnames API.
cratefield-adapter-cloudflare-saas
Shippingcrates.io 0.2.2updated
cargo add cratefield-adapter-cloudflare-saasSign-in methods, sessions and tokens.
Module · Auth
Users, identities, credentials, sessions and single-use tokens. Authorization code with PKCE, ES256 JWTs with JWKS, account linking on verified email only.
cratefield-auth-core
ShippingGit dependency
cargo add cratefield-auth-core --git https://github.com/Cratefield/harnessModule · Auth
WebAuthn registration and login, verified in pure Rust. A passkey cannot be removed when it is the account's only way in.
cratefield-auth-passkeys
ShippingGit dependency
cargo add cratefield-auth-passkeys --git https://github.com/Cratefield/harnessModule · Auth
Google and Apple over OpenID Connect, written against a provider descriptor, so a provider arrives as data plus whatever quirk it insists on.
cratefield-auth-oidc
ShippingGit dependency
cargo add cratefield-auth-oidc --git https://github.com/Cratefield/harnessModule · Auth
Email and password login for the harness: Argon2id, lockout on the credential, the same answer whatever the account state. Needs the paid Workers plan, and the measurement is on its page.
cratefield-auth-password
ShippingGit dependency
cargo add cratefield-auth-password --git https://github.com/Cratefield/harnessModule · Auth
Sign in by email. Thirty-two random bytes stored only as a hash, fifteen minutes by default, single-use under concurrency rather than by convention.
cratefield-auth-magic-link
ShippingGit dependency
cargo add cratefield-auth-magic-link --git https://github.com/Cratefield/harnessModule · Auth
Facebook Login, in its own crate: Meta has no discovery document, no ID token and no nonce, so it is not an OpenID Connect provider.
cratefield-auth-meta
ShippingGit dependency
cargo add cratefield-auth-meta --git https://github.com/Cratefield/harnessModule · Auth
The OAuth 2.0 device grant (RFC 8628): a CLI or a TV shows a code, a signed-in person approves it.
cratefield-module-device-auth
Shippingcrates.io 0.3.2updated
cargo add cratefield-module-device-authLibrary · Auth
Verifies auth-service tokens in a consuming app: JWKS fetch and cache, ES256, an axum extractor.
cratefield-auth-client
Shippingcrates.io 0.3.4updated
cargo add cratefield-auth-clientLibrary · Auth
OAuth 2.0 over the HttpClient port: authorize URLs, code exchange, refresh, revocation, PKCE.
cratefield-oauth-client
Shippingcrates.io 0.3.2updated
cargo add cratefield-oauth-clientDatabases, declared tables and content.
Library · Data
A schema a venture declares in its manifest, and the artifacts derived from that one declaration.
cratefield-tables
Shippingcrates.io 0.4.2updated
cargo add cratefield-tablesModule · Data
A small content store with an editor: typed collections, versioned, in the venture's own database. Public reads, admin-token writes.
cratefield-module-cms
Shippingcrates.io 0.3.2updated
fz add cmsAdapter · Data
Database over rusqlite. Every test, and single-node self-hosting.
cratefield-adapter-sqlite
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-sqliteAdapter · Data
Database over sqlx Postgres, for the native runtime. Refuses to compile to wasm.
cratefield-adapter-postgres
Shippingcrates.io 0.3.3updated
cargo add cratefield-adapter-postgresAdapter · Data
Database over SQLite compiled to wasm, persisted in the browser's OPFS.
cratefield-adapter-sqlite-wasm
ShippingGit dependency
cargo add cratefield-adapter-sqlite-wasm --git https://github.com/Cratefield/harnessLibrary · Data
Reads a live database's own catalog over the Database port, in the tables vocabulary.
cratefield-introspect
Shippingcrates.io 0.3.2updated
cargo add cratefield-introspectLibrary · Data
Who may reach which rows of a declared table. The routes that will serve them are not built yet.
cratefield-tables-api
Designedcrates.io 0.1.2updated
cargo add cratefield-tables-apiTool · Data
Step one of a Supabase move: inspect the project read-only and produce the migration report, classifying every object.
cratefield-import-supabase
Shippingcrates.io 0.2.2updated
cargo add cratefield-import-supabaseMail, push and outbound events.
Module · Messaging
Device and browser subscriptions, per-category preferences, and a fan-out other modules call.
cratefield-module-notifications
Shippingcrates.io 0.3.3updated
fz add notificationsModule · Messaging
Outbound webhooks: per-subject endpoints, HMAC-signed POSTs, backoff, dead letters and replay.
cratefield-module-webhooks
Shippingcrates.io 0.4.2updated
cargo add cratefield-module-webhooksAdapter · Messaging
Mailer over the Resend API, through the runtime's HttpClient port.
cratefield-adapter-resend
Shippingcrates.io 0.4.3updated
cargo add cratefield-adapter-resendAdapter · Messaging
Mailer over the Owlpost API: the second mail provider, on the same Resend-compatible wire.
cratefield-adapter-owlpost
Shippingcrates.io 0.2.3updated
cargo add cratefield-adapter-owlpostAdapter · Messaging
Push over Apple Push Notification service.
cratefield-adapter-apns
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-apnsAdapter · Messaging
Push over Firebase Cloud Messaging (HTTP v1), the same shape as the APNs adapter.
cratefield-adapter-fcm
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-fcmAdapter · Messaging
Push over Web Push (RFC 8030/8188/8291/8292): browsers and UnifiedPush.
cratefield-adapter-webpush
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-webpushLibrary · Messaging
The provider JWTs push adapters sign: ES256 for APNs and VAPID, RS256 for Google, with a keyed cache.
cratefield-push-auth
Shippingcrates.io 0.3.2updated
cargo add cratefield-push-authLibrary · Messaging
Assembles the Push port from the environment: one variable table for serve(), fz push and fz doctor.
cratefield-push-wiring
Shippingcrates.io 0.3.2updated
cargo add cratefield-push-wiringAdapter · Messaging
The TelegramBot port over the Telegram Bot API: send, edit and answer.
cratefield-adapter-telegram
Shippingcrates.io 0.1.2updated
cargo add cratefield-adapter-telegramModule · Messaging
Telegram as a channel: the webhook, account linking, and consent buttons that can deny anything and only arm what moves value.
cratefield-module-telegram
Shippingcrates.io 0.1.2updated
cargo add cratefield-module-telegramModule · Messaging
Owlpost’s signed inbound-mail and delivery webhooks, deduplicated, emitted as harness events.
cratefield-module-owlpost
Shippingcrates.io 0.1.2updated
cargo add cratefield-module-owlpostLibrary · Messaging
Branded, email-client-safe HTML and a plain-text twin for every message, themed with the venture’s own colours and logo.
cratefield-mail-templates
Shippingcrates.io 0.1.3updated
cargo add cratefield-mail-templatesSign-ups, waitlists, releases and usage counts.
Module · Growth
Per-product waitlists with confirmation, queue position, referral codes and admin export.
cratefield-module-waitlist
Shippingcrates.io 0.4.4updated
fz add waitlistModule · Growth
Double opt-in email capture with signed confirmation links and CSV export.
cratefield-module-email-signup
Shippingcrates.io 0.4.2updated
fz add email-signupModule · Growth
A project's releases, mirrored into the venture's own database and served over an API.
cratefield-module-changelog
Shippingcrates.io 0.3.3updated
fz add changelogModule · Growth
Counted, aggregate usage telemetry with consent built in, and no stored link to a person.
cratefield-module-telemetry
Shippingcrates.io 0.3.2updated
fz add telemetryThe records a venture runs on: people, companies, and the teams they belong to.
Module · Business
Contacts, organisations and the tags that label them, with an idempotent upsert API other modules can call.
cratefield-module-crm
Shippingcrates.io 0.1.2updated
cargo add cratefield-module-crmModule · Business
Organizations, memberships, roles and email invitations: a person creates an organization and invites people by address.
cratefield-module-orgs
Shippingcrates.io 0.1.3updated
cargo add cratefield-module-orgsTaking money without card data crossing a port.
Adapter · Payments
Payments over the Stripe REST API, with HMAC webhook verification and no card data across the port.
cratefield-adapter-stripe
Shippingcrates.io 0.3.4updated
cargo add cratefield-adapter-stripeAdapter · Payments
Payments over Polar, a Merchant of Record: Polar sells, collects VAT and sales tax worldwide, and pays you out, so a venture without a company can sell from day one.
cratefield-adapter-polar
Shippingcrates.io 0.2.3updated
cargo add cratefield-adapter-polarWallets, keys and signing: linking an address, and every guardrail between a request and a signature.
Adapter · Wallets
The KeySigner port over Turnkey: a sub-organization per end user, and our backend only a delegated user inside it.
cratefield-adapter-turnkey
Shippingcrates.io 0.1.2updated
cargo add cratefield-adapter-turnkeyLibrary · Wallets
Key-reference signing: a venture names a key, never touches raw key material, and every sign call passes the guardrails first.
cratefield-signer
Shippingcrates.io 0.1.1updated
cargo add cratefield-signerLibrary · Wallets
Scoped, capped, expiring, revocable automation keys for Kernel accounts, EIP-7702, Swig roles and Squads vaults.
cratefield-session-grants
ShippingGit dependency
cargo add cratefield-session-grants --git https://github.com/Cratefield/harnessModule · Wallets
The policy engine every automated value-moving action must pass: hard denies, caps, a kill switch, and an append-only audit chain.
cratefield-module-guardrails
Shippingcrates.io 0.1.2updated
cargo add cratefield-module-guardrailsModule · Wallets
Link a person’s own EVM or Solana wallet to an account they have already signed in to, by signature rather than by password.
cratefield-module-wallets
Shippingcrates.io 0.1.2updated
cargo add cratefield-module-walletsText models and classifiers behind ports.
Adapter · AI
TextModel over the Anthropic Messages API.
cratefield-adapter-anthropic
Shippingcrates.io 0.3.3updated
cargo add cratefield-adapter-anthropicAdapter · AI
TextModel over the chat-completions wire, at any base URL: hosted or local.
cratefield-adapter-openai-compatible
Shippingcrates.io 0.2.3updated
cargo add cratefield-adapter-openai-compatibleAdapter · AI
Classifier over the venture's own TextModel, via JSON-schema structured output.
cratefield-adapter-classifier-llm
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-classifier-llmAdapter · AI
Classifier over TypeSafe's Jev evaluation API, on the operator's own key.
cratefield-adapter-typesafe
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-typesafeAdapter · AI
Classifier over the Cloudflare Workers AI binding. Workers only, no API key.
cratefield-adapter-workers-ai
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-workers-aiLibrary · AI
A word-level diff for showing what a rewrite changed, with protected ranges reported as locked rather than as edits.
cratefield-text-diff
Shippingcrates.io 0.1.0
cargo add cratefield-text-diffLibrary · AI
Keeps the facts when a model rewrites text: find the spans that must not change, then check the rewrite kept them.
cratefield-text-guard
Shippingcrates.io 0.1.0
cargo add cratefield-text-guardTrackers, OAuth connections and third-party accounts.
Module · Integrations
Per-person third-party OAuth connections: authorize, sealed tokens, refresh and revoke.
cratefield-module-connections
Shippingcrates.io 0.2.3updated
cargo add cratefield-module-connectionsAdapter · Integrations
Tracker over the GitHub Issues REST API.
cratefield-adapter-github-issues
Shippingcrates.io 0.3.3updated
cargo add cratefield-adapter-github-issuesAdapter · Integrations
Tracker over the Jira Cloud REST API v3.
cratefield-adapter-jira
Shippingcrates.io 0.2.3updated
cargo add cratefield-adapter-jiraAdapter · Integrations
Tracker over a webhook the tenant configures, signed with HMAC-SHA256.
cratefield-adapter-webhook-tracker
Shippingcrates.io 0.3.2updated
cargo add cratefield-adapter-webhook-trackerLibrary · Integrations
GitHub App auth: RS256 app JWTs, cached installation tokens and the user-to-server code exchange.
cratefield-adapter-github-app
Shippingcrates.io 0.2.2updated
cargo add cratefield-adapter-github-appModule · Integrations
Runs a LinkedIn Company Page from the harness: connect once over OAuth, then create, schedule, edit and delete posts, upload media, and address showcase pages. Private, never published.
fz-module-linkedin
ShippingPrivate
Adapter · Integrations
Tracker and StatusWebhook over the Linear GraphQL API.
cratefield-adapter-linear
Shippingcrates.io 0.1.2updated
cargo add cratefield-adapter-linearAdapter · Integrations
An HTTP client for the Colonizer mothership: colonies, questions and whoami, over the runtime’s HttpClient port.
cratefield-adapter-colonizer
Shippingcrates.io 0.1.2updated
cargo add cratefield-adapter-colonizerSecrets, keys, privacy and abuse checks.
Library · Security
Envelope encryption over the Database port, in two tiers. A copied, renamed or rolled-back row fails to decrypt rather than quietly succeeding.
cratefield-secrets
Shippingcrates.io 0.4.2updated
cargo add cratefield-secretsLibrary · Security
Wrap a data key, unwrap a data key. That is the whole trait. The development provider refuses to construct in production.
cratefield-kms
Shippingcrates.io 0.2.0
cargo add cratefield-kmsModule · Security
What this deployment holds about a person, and everything it holds about one.
cratefield-module-privacy
Shippingcrates.io 0.3.3updated
fz add privacyAdapter · Security
Captcha over Cloudflare Turnstile, fail-closed.
cratefield-adapter-turnstile
Shippingcrates.io 0.3.3updated
cargo add cratefield-adapter-turnstileModule · Security
The server half of sealed blobs: opaque ciphertext at rest, crypto-shred erasure, and no server-side recovery path.
cratefield-module-sealed
Shippingcrates.io 0.1.2updated
cargo add cratefield-module-sealedNothing matches. Try a port, such as Mailer or Push, or a provider, such as stripe.
Writing one
The conformance kit runs every module against the same contract: problem+json errors, rate-limit headers, request-id propagation, concurrent-request safety, migration idempotency. A module that passes on SQLite runs unchanged on D1.
cargo add cratefield, or depend on cratefield-core directly if you want only the trait.Two mounts Shipping
A module can be mounted two ways, and the caller cannot tell which. Compiled in is the default: the crate is linked into the worker alongside every other module. Sidecar is the other: the module is its own worker, compiled on its own, reached over a service binding and mounted at the same /v1/<name> path. Both workers live in the same account, which in the default mode is yours. The platform runs them on the same thread of the same server, so the hop costs no measurable latency and nothing extra to run.
The reason it matters is not performance. A sidecar is built and deployed by whoever owns it, which means a module you will not share can run inside your backend without the source ever reaching us. It binds the same database as everything else, so it is a real module with real ports, not a webhook. It is not meant to get the same secrets either: a module we did not build should never hold the key that signs the rest of your backend’s links, so it would be provisioned its own. The secrets layer that makes that possible is Shipping; wiring a sidecar to its own store is part of the sidecar programme, still Designed.
The mount itself is merged: ADR 0009, the Dispatcher port, and a sidecar's surface folded into the same /__surface the compiled-in modules answer with. What is still Designed is the programme around it: the build-artifact cache, the cold-start handshake, a module template you build yourself, conformance parity across both mounts, and the deployment model for customer-supplied modules. Those are epic #56, issues #59 and #61 to #67.
Want a module we have not built yet? Tell us what you are running today.