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.API JSON HTTP server inside the :kms application.
  • 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 :kms package.
  • 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 :kms application.
  • apps/shared removed; docs and example no longer reference :shared or apps/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_key is now nullable and empty for session-protected aliases. SQLite rebuilds the keks table during migration.
  • Remote get_* helpers now preserve transport, HTTP, and malformed-response errors instead of returning nil; only API not_found responses map to nil (GitLab #9).
  • Application startup and /health/ready now 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 failures

Upgrade stance

v0.1.0 is a new-install OSS release. No migration from private/internal/pre-release KMS databases is promised unless explicitly documented.