Skip to main content
[AVAILABLE] for memory, supabase and postgres. Declared but unimplemented for sqlite, see below.

Providers, precisely

postgres and supabase select the same implementation. Despite its name, SupabaseStorageProvider writes through a direct Postgres connection (DATABASE_URL), so a self hosted Postgres works under either name. Both refuse to start without DATABASE_URL. sqlite throws at startup, by design (fails closed rather than silently falling back).

What’s stored

Business Transactions and Execution Trust Records (the append-only ledger behind every Execution Trust Record), Execution Intents, Refusal Records, pending policy changes and their signed approval records, approval issuers, external connectors, the execution and caller audit events, and the single-use nonces for authorizations, approvals and step up envelopes. Each has a Memory* implementation for tests and a Supabase* (Postgres) implementation; see packages/storage/src/index.ts.

Configuration

PARMANA_STORAGE is the only variable read. An older DATABASE_PROVIDER variable existed briefly as a second, disconnected path to the same setting and is now retired: if it’s present in the environment, config loading fails at startup naming PARMANA_STORAGE as the replacement, rather than silently ignoring it. Tests: packages/storage/tests/. See @parmana/storage for the package’s full export list if you’re consuming it directly rather than through the default server.