No Vault complexity. No cloud dependency. No SaaS trust issues. Drop one binary on your server and you're done."

$

WHY Lockr

01

Vault is overkill

Needs Consul or etcd. Dedicated ops knowledge. You wanted secrets management, not a distributed systems project.

Lockr needs nothing but a passphrase.

02

Cloud means lock-in

Your secrets live in their region, billed by their API, gone if you leave. That is not ownership.

Your server. Your region. Your rules.

03

SaaS means trust

Doppler. Infisical. Great products — but your production secrets live on someone else's infrastructure.

Air-gapped by design. No SaaS required.

CORE CAPABILITIES

$
Note: 5 versions kept. 30-day soft delete. Recoverable.

ENCRYPTION

Secret encryption
AES-256-GCM (per secret, not per database)
Key derivation
HKDF-SHA256 with path as derivation input
Master key
Argon2id-protected, never stored in plaintext
Session tokens
Argon2id hash only, lvt_ prefix, 1h TTL
Transport
TLS 1.3 minimum, no fallback, self-signed CA on init
Audit log
Append-only NDJSON, secret values never written

Encryption Flow

WRITE PATHYour AppHKDF-SHA256Per-path keyAES-256-GCMBadgerDB
AUTH PATHpassphraseArgon2idmaster.key.encTLS 1.3session token

Each path has its own derived key. Compromising one secret exposes nothing else.

GET RUNNING IN 4 COMMANDS

One binary. No database. No agents. No cloud.

View on GitHub →
01

# build the binary

$go build -o Lockr ./cmd/Lockr
02

# initialise data directory

$Lockr init --data-dir /var/lib/Lockr

master key generated ✓ TLS certificate created

03

# start the server

$Lockr_PASSPHRASE=yourpassphrase Lockr server

listening on https://0.0.0.0:8300

04

# write your first secret

$Lockr set secrets/prod/stripe '{"key":"sk_live_abc123"}' --token <token>

written secrets/prod/stripe (version 1)

INTENTIONALLY OUT OF SCOPE

Lockr does one thing completely. These are not planned features.

The goal is to remain small and operationally simple. Forever.