Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 30 Oct 2026. What's built · Install 0.1.0
jadpo
Reference: Configuration and time

Configuration and time

Secrets

A secret is a setting that must never leave the server, such as a password or an API key. Mark it with secret: true. Some types are always secret and need no flag: PostgresUrl, RedisUrl and SigningKey. Here the database's address, a PostgresUrl, is read by the connection that uses it:

example
config {    database_url: PostgresUrl}application {    connections: {        main: {            driver: Driver.postgres            url: config.database_url        }    }}

Your code can use a secret only where Jadpo itself takes the value and keeps it on the server:

All of these are written in app.jadpo or authentication.jadpo. The one other place is a crypto call's key:, written key: config.<name> with an EncryptionKey, SigningKey or PrivateKey setting (Hashing and cryptography).

Anywhere else in a function, action, query or test, reading a secret at all is an error, configuration.secret_flow. That covers returning it, storing it, logging it, putting it in a failure, building another value from it, passing it on, and even comparing it: key == config.api_key is refused, because a yes-or-no answer gives the secret away one guess at a time.

Because code never reads the secret, nothing your app prints, stores, returns or logs can hold it. jadpo config check, jadpo dev and the check before the app starts say which setting and which variable is wrong, never the value.

Markdown for agents: /docs/secrets.md.Built from Jadpo main at a707efb.