Menu

Configuration

Your dashboard is a file.

Every setting lives in signet.toml, in your git repository, and travels inside the engine. There is no toggle in a console you do not own. Every feature ships inside the one binary you run. Enterprise SSO (SAML and OIDC) is a build feature, on in the enterprise build.

Every settingThe file is the dashboard

signet.toml
# signet.toml: the whole configuration surface, in your repo.
# Secrets are env:/file: refs, never literals in the file.

[server]
base_url        = "https://auth.example.com"
trusted_origins = ["https://app.example.com"]

[database]
adapter = "postgres"          # your Postgres. A hosted console has no such key
# dsn supplied out-of-band via env:SIGNET_DATABASE_URL

[session]
expires_in = 604800           # 7 days, in seconds
fresh_age  = 900              # step-up window for sensitive actions

[password]
min = 12
max = 128
min_strength = 3             # strength score 0–4; 0 keeps length-only compatibility

[rate_limit]
window = 10
max    = 100

[[rate_limit.rules]]
path   = "/sign-in/email"     # throttle the door you most want bounded
window = 60
max    = 5

[lockout]
max_failures       = 5
window             = 600      # seconds; state persists in Postgres
lock_duration      = 900
backoff_multiplier = 2
max_lock_duration  = 86400

[email_policy]
allow = ["example.com", "*.partners.example"]
block = ["blocked.example", "abuse@example.com"]

[disposable_email]
enabled    = true
extra_deny = ["throwaway.example"]
# list_path = "/etc/signet/disposable.txt"  # replaces bundled list

[plugins]
haveibeenpwned = true         # breach-password check (HIBP)

[[social_providers]]
id            = "google"
client_id     = "env:GOOGLE_CLIENT_ID"
client_secret = "env:GOOGLE_CLIENT_SECRET"

[events]
url    = "https://app.example.com/webhooks/signet"
secret = "env:SIGNET_EVENTS_SECRET"   # must resolve to >=32 characters
# Generate the signing secret with: openssl rand -hex 32

[admin]
enabled = true                # the /admin operator surface
# key supplied via env:SIGNET_ADMIN_KEY

Every setting, as a key.

Each row pairs a hosted-dashboard capability with the real signet.toml key that does the same job. Every key traces to the generated config reference a running instance serves from inside the engine. If it is not in that reference, it is not on this page.

Hosted dashboardsignet.tomlWhat the key configures
Account lockout / cooldown[lockout]Persistent per-email failed-attempt state: max_failures, window, initial lock_duration, capped exponential backoff_multiplier, max_lock_duration, and lock_level_decay.
Email allowlist / blocklist[email_policy]Deny-first allow/block entries in exact-email, apex-domain, or *.subdomain form. Block wins; a non-empty allowlist then gates every address.
Disposable-email blocking[disposable_email]On by default for new identities with a versioned bundled list. Add extra_deny/allow carve-outs, or use list_path to replace the snapshot with a local one-domain-per-line file.
Rate-limit rules[rate_limit] [[rate_limit.rules]]A default window/max, plus one [[rate_limit.rules]] block per path (path, window, max): throttle /sign-in/email harder than the rest.
Social connections[[social_providers]]One block per provider: id, client_id, client_secret, the OAuth endpoints, and a pkce flag. google and github carry built-in defaults; a custom id declares its own endpoints.
Session lifetime[session]expires_in, update_age, and fresh_age, all in seconds. fresh_age is the step-up window that gates sensitive actions.
Password rules[password]min/max length (8–128 by default), opt-in min_strength (strength score 1–4; 0 disables enforcement), and the scrypt_concurrency cost factor. Clients can POST to /api/auth/password-strength for score and targeted feedback.
Breach-password protection[plugins] haveibeenpwnedToggle the Have I Been Pwned check; hibp_range_endpoint points it at a self-hosted mirror so even that lookup stays inside your walls.
Webhook endpoints (hosted: a third-party delivery add-on)[events]url and secret (HMAC, minimum 32 characters; generate with openssl rand -hex 32), with dead_letter for replay: the user.created, account.locked, session.created, and session.revoked event stream.
Email / SMTP settings[delivery] [delivery.smtp] [delivery.smtp.templates] [delivery.webhook]mode (smtp, webhook, or none) and dead_letter; SMTP connection + envelope fields and per-flow *_subject/*_body plain-text templates, or a signed-JSON webhook url/secret.
Allowed origins & paths[server]base_url, the API base_path, and extra trusted_origins for CORS and callback validation.
OAuth proxy[plugins] oauth_proxyA single toggle for the OAuth proxy plugin.
Admin / dashboard access[admin]enabled turns on the /admin dashboard and /admin/v1; the admin key (≥ 32 chars) is supplied out-of-band via SIGNET_ADMIN_KEY.
User impersonation & admin roles[admin_plugin]impersonation_session_duration time-boxes an impersonated session (default 3600s, 60–86400) and allow_impersonating_admins gates impersonating other admins; admin_roles, admin_user_ids, roles, and default_role decide who holds admin permissions. Every impersonation is audited.
Auto sign-in after sign-upauto_sign_in (top level)One boolean: sign a new user in immediately after sign-up rather than requiring a separate sign-in.
Where your data lives · no hosted equivalent[database]adapter, dsn, migrate, max_connections. A hosted dashboard has no such setting, because your users live in its database; here they live in yours.
The table is the whole truth. This page will not invent a key to look complete: if a hosted-dashboard control has no row here, it has no signet.toml key today. Every row traces to the generated reference a running instance serves from inside its own engine.

Sources: the generated config-reference.md (from the *FileConfig structs) and our hosted-dashboard parity audit, retrieved 2026-07-21.

The file is the dashboard.

A file in version control has an author, a timestamp, a diff, and a history. A hosted dashboard does not.

Under version controlYour entire auth configuration is a tracked file. Every change has an author, a timestamp, a diff, and a history you can read.
Reviewable in a pull requestA new OAuth provider or a loosened rate limit is a code review, not a silent click in a console. Your team approves auth changes the way it approves everything else.
Reproducible and air-gappedThe same signet.toml boots the same instance anywhere: on a colleague’s laptop, in CI, or on a sealed host with no route to anyone’s dashboard.

Your users, sessions, and secrets in your own PostgreSQL. The configuration that governs them in your own repository. PostgreSQL settings →

The config travels with the engine.

Every deployed instance serves its own generated config reference at /docs: the same keys you see here, never drifted from the build you run. Get an instance and write the file.

Enter to open · Esc to close