v0.1.0 - 2026-09-30
Initial OSS release.
Added
- SQLite default persistence with PostgreSQL selectable by config/env.
- KMS local and remote clients.
- Optional
KMS.APIJSON HTTP server inside the:kmsapplication. - Health endpoints:
/health,/health/live,/health/ready. - Telemetry events and
KMS.Telemetry.metrics/0. - RMK providers:
- local file-backed RMK;
- StackIT KMS;
- AWS KMS;
- Google Cloud KMS.
- RMK ciphertext envelopes for external providers.
- RMK decrypt caching.
- RMK-wrapped P-256 signing-key custody with prehashed digest signing and verification in caller processes.
- KEK alias encryption/decryption with AAD.
- Principal/session/binding authorization model.
- Session-protected aliases with real principal and high-entropy passphrase KEK envelopes, creator access, and passphrase grant revocation through local/remote APIs (GitLab #1).
- TOTP and WebAuthn factor support.
- Human-friendly Diceware-style passphrase generator for shared-passphrase workflows.
- Passphrase session and RMK PDK encryption helpers.
- Fallback public key registry and trusted local recovery helpers. No fallback operation is compiled into the HTTP router.
- Phoenix field-encryption example under
example/phoenix_example.
Documentation
- HexDocs/ExDoc configuration for the single
:kmspackage. - Module/function docs for important public KMS APIs.
- Product overview.
- Phoenix quickstart.
- Use-case guides:
- crypto-only library mode;
- application-wide encryption;
- embedded KMS;
- standalone KMS with SQLite;
- remote KMS;
- shared passphrase documents;
- multi-user encryption.
- Installation and configuration guides.
- Elixir API and HTTP API guides.
- Authorization/bindings guide.
- RMK provider docs.
- AAD guide.
- Security, operations, observability, fallback recovery, and upgrade docs.
Changed
- Umbrella apps refactored into a single
:kmsapplication. apps/sharedremoved; docs and example no longer reference:sharedorapps/shared.- Passphrase sessions require matching recipient envelopes instead of unrestricted alias access. Existing RMK-only aliases remain unchanged; see the session-protected alias migration notes before upgrading.
keks.master_keyis now nullable and empty for session-protected aliases. SQLite rebuilds thekekstable during migration.- Remote
get_*helpers now preserve transport, HTTP, and malformed-response errors instead of returningnil; only APInot_foundresponses map tonil(GitLab #9). - Application startup and
/health/readynow run a bounded, redacted readiness check against the configured RMK provider (GitLab #8). - KEK creation and rotation now fail atomically when required fallback envelopes cannot be created (GitLab #4).
Validation evidence
Release checks:
mix compile --warnings-as-errors
mix test.sqlite
284 tests, 0 failures
mix test.postgresql
284 tests, 0 failures
MIX_ENV=dev mix docs
MIX_ENV=dev mix hex.build
cd example/phoenix_example
MIX_ENV=test mix ecto.drop
mix compile --warnings-as-errors
mix test
7 tests, 0 failuresUpgrade stance
v0.1.0 is a new-install OSS release. No migration from private/internal/pre-release KMS databases is promised unless explicitly documented.