Reference

Packages

Every @postel/* package, what it does, and whether it ships today.

Postel is a workspace of focused packages. Pick the ones you need; the rest don't get installed.

Available today

PackageUsed forNotes
@postel/coreInbound and Outbound — the Postel({ inbound, outbound }) factory and primitivesZero runtime dependencies. The outbound runtime is available, including the in-process InMemoryStorage adapter (import { InMemoryStorage } from "@postel/core"). Inbound sources accept an optional Standard Schema schema (zod/valibot/…) that validates and types event.data — no schema-library dependency.
@postel/httpFramework-agnostic webhook HTTP coreThe verification gate (handleInbound, fetchWebhook) and the shared PostelError→HTTP-status policy every framework adapter binds to. Depends only on @postel/core.
@postel/honoHono framework adapterHonoWebAdapter(postel, app) routing facade (inbound.<source>.post, outbound.bindJwks, admin.bindAdminRoutes) + low-level verifyWebhook() / withWebhook().
@postel/expressExpress framework adapterExpressWebAdapter(postel, app) routing facade + low-level verifyWebhook() (mounts express.raw() + the gate) / fetchToExpress; sets req.postel.
@postel/fastifyFastify framework adapterfastifyPostel raw-body plugin + FastifyWebAdapter(postel, app) routing facade + low-level verifyWebhook() preHandler / fetchToFastify; sets req.postel.
@postel/nestjsNestJS framework adapterNestjsWebAdapter(postel) (type-checked WebhookGuard) + PostelModule.forRoot(postel) + WebhookGuard(key) guard + @Event() / @WebhookResult() decorators.
@postel/adminAdmin control plane over the outbound senderadminRouter(postel, { authorize }) Fetch router (endpoint CRUD, replay, keys, message/attempt reads, tenant reads) with default-deny auth + tenant scoping; mount via Hono / fetchToExpress / fetchToFastify.
@postel/sqliteSQLite storage adapterStandalone — Postel owns the SQLite database (SqliteStorage). Full outbound Storage; also exports SqliteDedup for inbound dedup.
@postel/pgPostgres storage adapterStandalone — PgStorage({ connectionString }). Full outbound Storage (FOR UPDATE SKIP LOCKED, LISTEN/NOTIFY); also exports PgDedup for inbound dedup.
@postel/mysqlMySQL storage adapterStandalone — MysqlStorage({ connectionString }) on mysql2 (FOR UPDATE SKIP LOCKED, polling). Full outbound Storage; also exports MysqlDedup for inbound dedup.
@postel/kyselyKysely storage adapterORM/query-builder — KyselyStorage({ db, dialect }) runs Postel's storage through your Kysely (Postgres, MySQL, or SQLite).
@postel/drizzleDrizzle storage adapterORM — DrizzleStorage({ db, dialect }) runs Postel's storage through your Drizzle instance (Postgres, MySQL, or SQLite).
@postel/prismaPrisma storage adapterORM — PrismaStorage({ prisma, dialect }) runs Postel's storage through your PrismaClient's raw surface (Postgres, MySQL, or SQLite).
@postel/typeormTypeORM storage adapterORM — TypeOrmStorage({ dataSource, dialect }) runs Postel's storage through your TypeORM DataSource (Postgres, MySQL, or SQLite).
@postel/mikro-ormMikroORM storage adapterORM — MikroOrmStorage({ orm, dialect }) runs Postel's storage through your MikroORM EntityManager (Postgres, MySQL, or SQLite).
@postel/storage-helpersZero-DB helpers for custom adaptersDialect codecs, capability flags, row encode/decode, migration SQL, callback registry — what every adapter reuses.

Stubs today (name reserved, no runtime yet)

PackageWill beStatus
@postel/nextjsNext.js Route Handler ergonomicsPlanned
@postel/bunBun.serve adapterPlanned
@postel/effectEffect-TS layer over the core APIPlanned
@postel/clipostel CLI (migrate, sign, verify, replay, simulate)Planned

Each "stub" package exports only __postelPackage today, is marked private, and is not part of the published 1.0 set — a guard test fails CI if a name-only package is ever made publishable. Don't depend on them in production yet — the framework-agnostic factory recipe works directly against each runtime's native Request.

Storage adapters

The postel.outbound.* runtime runs against any Storage adapter. The full Tier-1 matrix now ships: the in-process InMemoryStorage (in @postel/core), the standalone @postel/pg / @postel/sqlite / @postel/mysql, and the query-builder / ORM adapters @postel/kysely / @postel/drizzle / @postel/prisma / @postel/typeorm / @postel/mikro-orm. See the Storage section for how to choose, and custom adapters to back Postel with any other database.

The matrix is per ADR 0007 — Postgres / SQLite as the canonical (benchmarked) first-class databases, MySQL as a first-party adapter set, query-builder / ORM adapters in their own packages. The external worker strategies (BullMQ, PgBoss) remain config slots that throw NotImplementedError until their adapters ship; the in-process worker pool is the supported runtime.

Polyglot ports (Go, Python, Rust)

Out of scope for the npm registry. See Polyglot for the per-language plan.

Compliance & tooling

PackageWhat it isStatus
@postel/complianceThe executable behavioral oracle. Vendor-neutral test suite for any Standard Webhooks producer/receiver. A port version X.Y.Z claims conformance by passing @postel/compliance@X.Y.*.Receiver + sender; the sender corpus executes end-to-end against @postel/compliance-driver.
@postel/compliance-driverThe HTTP control-plane the compliance runner drives in sender mode — it wraps a real Postel outbound instance so the cross-port runner can reset state, register endpoints, send, advance the clock, and observe outgoing deliveries.Workspace-internal harness for the suite; not a production dependency.
@postel/testWorkspace-internal test fixtures (signed payload generators, vector builders).Internal — not published.

Every export

For exact type signatures, see Errors and @postel/http, or read the source under typescript/packages/core.

On this page