Skip to content

Introduction

st8 is a lightweight, versioned key-value store designed for dynamic configuration — values your application reads at runtime without a redeployment.

Most applications have two kinds of configuration:

  • Build-time config — baked into the binary or image. Changing it requires a redeploy.
  • Environment variables — slightly more flexible, but still require a restart and leave no audit trail.

Neither approach is great for values that need to change frequently, safely, and with history: feature flags, A/B test parameters, rate limits, kill switches, algorithm weights, model routing rules.

FeatureDescription
RevisionsEvery write creates an immutable, numbered revision. Nothing is ever overwritten.
RollbacksRevert any namespace/branch to a previous revision in one operation.
CheckpointsTag a revision with a human-readable name (e.g. stable, pre-launch) for fast reference.
BranchesMultiple independent state lines within one namespace. Switch your app between them at request time.
NamespacesFlat, user-defined partitioning — one namespace per service, environment, tenant, or whatever makes sense.
HTTP APIst8d is a plain HTTP server. Any language can talk to it.
Go clientTyped, context-aware client with built-in retry-friendly design.
┌─────────────┐ HTTP ┌──────────┐ ┌──────────┐
│ your app │ ────────▶ │ st8d │──▶│ disk │
└─────────────┘ └──────────┘ └──────────┘
│ reads config at request time

st8d is the server. It stores all state on disk using pebble, a fast embedded key-value store.

st8ctl is the CLI. Use it to push config, inspect history, create checkpoints, and roll back.

Your application uses the Go client (or plain HTTP) to fetch the config it needs.

st8 is a good fit when you need:

  • Changing config without redeploying
  • A clear audit trail of who changed what and when
  • Safe rollbacks with a single command
  • A/B testing at the config layer, not the code layer
  • Per-environment or per-tenant config isolation

st8 is not a secret store, a distributed cache, or a full database. For secrets, use Vault or your cloud provider’s secret manager.