tresor gives every DuckDB user one sign-in through your identity provider, then hands DuckDB exactly the credentials their role allows. Rotate or revoke a secret once, centrally, and every analyst and application gets the change.
The extension is open source and installs from the DuckDB community repository. tresor-server is free in production, embedding included.
People sign in once through Keycloak, Okta, Entra ID or any OIDC provider, in the browser or with a device code. Single sign-on through the OS keychain.
Administrators grant secrets to roles. Each user sees only what their roles allow, and the secrets join DuckDB’s own lookup for S3, Azure, databases and more.
Change a secret once, or reference it where it already lives, in Azure Key Vault, AWS or GCP Secret Manager, Vault or a Kubernetes Secret, so a rotation reaches DuckDB immediately. Remove a grant and access stops.
Services that embed DuckDB sign in with managed identities, keys or federated tokens and receive the same role-based secrets. Any parameter can be generated for each caller when it is read: a token from your identity provider, or a session the server gets by logging in to a service. Generated secrets carry their expiry, and S3 credentials refresh by themselves.
Store a secret with CREATE PERSISTENT SECRET … IN corp and grant it from DuckDB, the CLI or the admin console. Variables share a bucket, an endpoint or a path with a role the same way.
Logins, secret lookups and grants go to DuckDB’s log and to OpenTelemetry, so your monitoring shows who used which secret.
Everyone signs in with their own identity, and what they may use is a grant you can read and revoke.
Sign in once with your company account, in the browser or with a device code over SSH. Your secrets are there, and DuckDB picks the right one by path.
ETL jobs, dbt runs and scheduled notebooks log in as a service, never as a person: Kubernetes service accounts, GitHub Actions OIDC, Azure managed identity or a key on the machine. Mostly no shared secret to store.
Store a secret once, or a reference to your vault, and grant it to a role. Revoke it the same way. Only administrators place secrets where lookups find them.
A DuckDB server behind a gateway acts for each signed-in user. Every user gets exactly their own secrets, never the server’s, and the audit names the person. Which servers may act for users is set by name or by role.
Web applications too: tresor runs in DuckDB-wasm 2.0 and attaches as the user signed in to the application. It is ready for the day DuckDB publishes DuckDB-wasm 2.0 on npm. How it works
People sign in with their Entra accounts, and your MFA and device policies apply. App roles and groups become tresor roles. Jobs and servers authenticate with managed identities or federated credentials, so no secret is stored.
The extension speaks an open protocol. Anything that implements it can sit behind DuckDB. tresor-server is our implementation for organisations.
The DuckDB extension and the open specification of the secrets service behind it. Build your own server if you want: a conformance suite tells you when it is right.
The production implementation: encrypted state, your key management, no passwords of its own. The conformance suite runs against it in CI on every state store.
One container or the Helm chart. Connect your identity provider and a key in Azure Key Vault, AWS KMS, GCP Cloud KMS or OpenBao and Vault.
Administrators add secrets, or references to values in your vault, and grant them to roles.
Analysts and applications run one ATTACH. From then on, DuckDB finds the right secret by itself.
Secrets are sealed under a key in Azure Key Vault or Managed HSM, AWS KMS, GCP Cloud KMS, or OpenBao and Vault Transit. Only wrapped data keys are stored.
Reference a secret in Azure Key Vault, AWS or GCP Secret Manager, Vault KV or a Kubernetes Secret instead of copying it. It is read at each fetch, only from sources you allow.
tresor-server runs with a managed or workload identity and signs in to its database and key service with Entra ID or IAM.
SQLite for one replica, PostgreSQL or SQL Server for several, or custom resources in your Kubernetes namespace.
Users only use what they are granted; their own secrets stay local. Admin rights do not include use: an administrator needs a grant like anyone else.
Every login, lookup, write and grant is an event, with the caller and the outcome. Events never contain secret material, tokens or statement text.
The extension and the protocol are always free. For tresor-server you choose who operates it.
Run tresor-server yourself, in production too, or build it into your product. A commercial licence is needed only to sell access to it in the cloud, on its own or as part of your product.
We install, update and monitor tresor-server inside your Azure tenant. Your secrets and keys never leave it.
tresor-server is source-available under the Business Source License 1.1. Selling access to it in the cloud, as a hosted or managed service on its own or as part of another product, needs a commercial licence; talk to us. Each version becomes Apache-2.0 four years after its release.
No. tresor is how DuckDB gets secrets. tresor-server encrypts them with your key management, or reads them where they already are: Azure Key Vault, AWS or GCP Secret Manager, Vault or Kubernetes Secrets.
Yes. duckdb-secrets/1 is an open protocol, and tresor’s conformance suite checks any implementation. tresor-server is the one we build and support.
Any OIDC provider: Keycloak, Okta, Entra ID and others. Services can use managed identities, keys or federated tokens.
The extension and the protocol are free under MIT. tresor-server is free in production, embedding included; selling access to it in the cloud, on its own or as part of your product, needs a commercial licence. The managed service is a subscription from November 2026.
DuckDB 2.0.0, with tresor 0.1.1. Each new DuckDB release gets a build.
Start with the docs, or tell us about your setup and we will plan the rollout with you.