Configuration
This page is the canonical configuration surface for jhf-keystore.
Runtime Modes
Supported provider modes:
cli- default and preferred
- reads via local
bwexecution
serve- loopback-only
- must stay local and explicitly guarded
jhf-keystore is not a remote secret service and must not expose a public write or read API.
Primary Environment Variables
Core runtime inputs:
VW_PROVIDERVW_BW_BINVW_BW_SERVE_URLVW_REQUIRE_LOCALBW_SESSIONVW_BW_SECRET_ENV_FILEBW_PASSWORD_ENV
Live-gated verification inputs:
VW_RUNTIME_DRIFT_VERIFY_LIVEVW_RUNTIME_DRIFT_VERIFY_HOSTVW_RUNTIME_DRIFT_VERIFY_USERVW_SSO_VERIFY_LIVEVW_PROJECTION_VERIFY_LIVEVOICE_V6_VERIFY_LIVEVOICE_W7_VERIFY_LIVE
Execution-policy rule:
- secrets or passwords may be injected at runtime
- secrets must never be checked into repo truth, docs, manifests, or evidence artifacts
Configuration Truth Sources
Canonical configuration surfaces:
- STACK_CONTRACT.md (
docs/STACK_CONTRACT.md) - ../contracts/runtime-stack-contract.json (
contracts/runtime-stack-contract.json) - ../contracts/vaultwarden-sso-consumer-runtime.json (
contracts/vaultwarden-sso-consumer-runtime.json) - ../contracts/non-interactive-bw-auth-bootstrap.md (
contracts/non-interactive-bw-auth-bootstrap.md)
Deployment Profile And Resolver Boundary
Deployment profiles describe the Vaultwarden container runtime. Resolver settings describe the local process that reads from that runtime through bw or loopback-only bw serve. These are related, but they are not the same configuration layer.
Profile-owned truth:
local-example,production-hasicloud, andproduction-lowcpuare defined by ../contracts/runtime-stack-contract.json (contracts/runtime-stack-contract.json)- profile truth covers compose file order, required container environment keys, ports, volumes, healthchecks, resource limits, and rollback commands
- profile verification uses compose/readback checks such as
docker compose config,docker inspect, and the runtime materialization drift verifier
Resolver-owned truth:
VW_PROVIDER,VW_BW_BIN,VW_BW_SERVE_URL,VW_REQUIRE_LOCAL,BW_SESSION,VW_BW_SECRET_ENV_FILE, andBW_PASSWORD_ENVare process-local resolver inputscliremains the default resolver provider;serveis allowed only when loopback locality validation passes- probe and doctor checks may read resolver readiness, but they must not infer deployment success from a profile name alone
Boundary rules:
- deployment profile selection must not materialize secret values into repo truth, docs, manifests, or Gitea evidence
- resolver readiness must fail closed when
bwis missing, locked, unauthenticated, non-local, or timed out - downstream consumers must use profile readback for container/runtime posture and resolver probes for local secret-read readiness
- a green compose profile does not prove that the local resolver can read secrets, and a green resolver probe does not prove that the container profile is materially current
Execution Hooks
Primary repo-owned verification hooks:
bash scripts/verify-docs-inventory-adoption.shbash scripts/verify-runtime-materialization-drift.shbash scripts/verify-vaultwarden-projection-presence.shbash scripts/verify-vaultwarden-sso-consumer-contract.sh
These hooks are the canonical readback path for configuration drift.
Known Limits
- no live secret values in docs or manifests
- no remote control plane
- no repo-owned reconciliation of upstream identity truth
AGPLv3. See LICENSE (LICENSE).
Learn more at helpifyr.com.