Vision: a modern secrets management platform, secure by design, simple to operate, accessible to all.
This is the single source of truth for the planned features and milestones of egide. Every feature is designed with security as the primary concern: for the detailed threat model and guarantees, see the security model.
| Version | Theme | Status |
|---|---|---|
| 0.1.0 | Foundation: crypto core, secrets engine, seal and unseal, REST and gRPC, SQLite and PostgreSQL | released |
| 0.2.0 | Auth and policies: token management, YAML ACLs, AppRole, audit log | planned |
| 0.3.0 | KMS and Transit: named keys, rotation, encryption as a service | planned |
| 0.4.0 | PKI: internal CA, certificate issuance and revocation | planned |
| 1.0.0 | Production ready: high availability, observability, stable API | planned |
- Security first. Secure by default, with no shortcuts.
- Simplicity. Easy to understand, easy to operate.
- No lock-in. Plain REST and gRPC, hierarchical paths, YAML policies.
- Memory safety. Rust with zeroization for all sensitive data.
- Observability. Logs, metrics, and traces built in.
Goal: a functional secrets store for managing secrets in development.
-
StorageBackendtrait (async) - SQLite backend
- PostgreSQL backend
- Encrypted storage at rest (AES-256-GCM)
- AES-256-GCM encryption and decryption
- Key derivation (HKDF-SHA256), bound to secret path and version
- Secure random generation (OS CSPRNG)
- Memory zeroization for sensitive data
- CRUD operations (create, read, update, delete)
- Hierarchical paths (
/{env}/{app}/{secret}) - Secret versioning
- Soft delete with recovery
- LIST operation with prefix filtering
- Master key protection
- Shamir's Secret Sharing (basic)
- Auto-unseal in dev mode only, gated behind an explicit environment guard
-
GET /v1/secrets/{path}- read secret -
PUT /v1/secrets/{path}- create or update secret -
DELETE /v1/secrets/{path}- delete secret -
LIST /v1/secrets/{path}- list secrets - Transit encrypt and decrypt over HTTP
- gRPC transport alongside REST
-
egide secrets get <path> -
egide secrets put <path> --value <value> -
egide secrets delete <path> -
egide secrets list [prefix] -
egide operator init -
egide operator unseal -
egide operator seal
- Root token generation at init
- Native token authentication (required at boot, OIDC optional)
- Secure token storage (never logged)
Goal: multi-user support with granular access control.
- Token creation with TTL
- Token revocation
- Token renewal
- Scoped tokens (path restrictions)
- Token accessor (non-sensitive reference)
- Policy definition in YAML format
- Path-based ACL rules with glob patterns
- Capabilities:
read,write,delete,list - Explicit deny support (deny wins over allow)
- Policy assignment to tokens
- AppRole (machine to machine)
- Userpass (human users)
- Password hashing (Argon2id)
- Rate limiting per token and per IP
- Brute-force protection (lockout)
- Request size limits
- Timeout configuration
- Audit log backend trait
- File audit backend
- Log format: JSON (HMAC-signed)
- Events: auth, secret access, policy changes
- Sensitive data redaction in logs
Goal: encryption as a service for applications.
The transit engine already exposes encrypt and decrypt in 0.1.0. This milestone completes the cryptographic operations surface and adds the KMS engine.
- Key creation (named keys)
- Key rotation with versioning
- Key types: AES-256, RSA-2048/4096, ECDSA-P256, Ed25519
- Key export (optional, configurable)
- Key deletion (soft and hard)
-
POST /v1/transit/sign/{key}- sign data -
POST /v1/transit/verify/{key}- verify signature -
POST /v1/transit/hash- hash data -
POST /v1/transit/hmac/{key}- HMAC - Batch operations
- Convergent encryption option
Goal: internal Certificate Authority.
- Root CA generation
- Intermediate CA support
- CA rotation
- Certificate issuance
- Certificate revocation
- Certificate renewal
- CRL (Certificate Revocation List)
- OCSP responder
- Server, client, and code-signing certificate templates
- Custom templates
Goal: stable, production-ready deployment with high availability.
API stability: from 1.0.0, the REST API is considered stable. Breaking changes only occur in major versions.
- Connection pooling
- Migrations system
- Encrypted backups
- Prometheus metrics endpoint
- OpenTelemetry tracing
- Detailed health check endpoints
- Security event metrics
- mTLS on the gRPC API
- Connection multiplexing
- Encrypted caching layer
- Leader election
- Cluster membership
- Encrypted state replication
- Automatic failover
- mTLS for cluster communication
- Auto-seal with cloud KMS backends
- Security hardening guide
- Penetration testing checklist
- Compliance documentation
Items not yet scheduled, to be evaluated based on community feedback:
- Dynamic secrets (database credential rotation)
- Cloud KMS integration as a backend seal provider
- LDAP and OIDC authentication methods
- Multi-tenant namespaces
- Cross-datacenter replication
- HSM support
- Web administration UI
Secrets are organised as a hierarchy:
/{environment}/{application}/{secret}
Examples:
/prod/workspace/database-url
/prod/workspace/jwt-secret
/dev/workspace/database-url
/staging/api-gateway/payment-key
Policies are defined in YAML for simplicity and tooling compatibility. This format is a design preview: the policy engine ships in 0.2.0.
# policy-name.yaml
name: developer
description: Development environment access for developers
rules:
# Full access to the dev environment
- path: /dev/*
capabilities: [read, write, delete, list]
# Read-only access to staging
- path: /staging/*
capabilities: [read, list]
# Explicit deny for production
- path: /prod/*
deny: true| Capability | Description |
|---|---|
read |
Read secret value |
write |
Create or update secret |
delete |
Delete secret |
list |
List secrets at path |
| Pattern | Matches |
|---|---|
/prod/app/db |
Exact path only |
/prod/app/* |
All secrets under /prod/app/ |
/prod/*/db |
/prod/app/db, /prod/api/db, and so on |
/* |
Everything (use with caution) |
- Explicit
deny: truerules are evaluated first. - If any deny matches, access is denied.
- Allow rules are evaluated next.
- If any allow matches, access is granted.
- Default: deny (implicit).