Skip to content
🚧 These docs are a work in progress and may contain inaccuracies. Content is being actively reviewed and validated.

Release Process

Dubby uses a three-channel release process to balance shipping speed with stability.

ChannelSourceDocker tagCadenceAudience
DevEvery push to main:devContinuousDevelopers, early testers
BetaRelease branch:beta, :X.Y.0-beta.NWeekly during betaAdventurous self-hosters
StablePromoted beta:latest, :X.Y.ZAfter 2-week soakEveryone
main ──────────────────────────────────────────── (trunk)
\
release/1.2.0 ── beta.1 ── beta.2 ── 1.2.0 (stable)
  • main is trunk. All development happens here. Every push builds :dev images automatically.
  • Release branches (release/X.Y.0) are created only when cutting a beta. They receive cherry-picked bug fixes only β€” never new features.
  • Feature branches are merged to main via pull request. Never commit directly to main or release branches.

Dubby follows Semantic Versioning:

  • Major (X.0.0) β€” Breaking changes to the public API or database schema
  • Minor (0.X.0) β€” New features, non-breaking changes
  • Patch (0.0.X) β€” Bug fixes only

Pre-1.0, breaking changes trigger a minor bump.

  1. Create release branch from main: release/X.Y.0
  2. Tag beta: vX.Y.0-beta.1 β€” builds :beta Docker images
  3. Bug fixes: Land fixes on main first, then cherry-pick to the release branch
  4. Tag additional betas as fixes land: vX.Y.0-beta.2, etc.
  5. Promote to stable after 2-week soak with no critical issues: tag vX.Y.0
  6. Patch releases (vX.Y.1) for critical fixes after stable release

Once a database migration ships in a beta, its SQL is frozen. No modifications allowed β€” only new migrations on main. This ensures users who upgrade from beta to stable don’t hit migration conflicts.

For critical security or data-loss bugs:

  1. Fix lands on main first (with tests)
  2. Cherry-pick the fix to the active release branch
  3. Tag a new patch version
  4. The fix ships in both :dev and :latest channels

Every release publishes four images to Docker Hub:

ImageDescription
dubbytv/dubbyStandalone (server + web in one container)
dubbytv/serverAPI server only (for split deployments)
dubbytv/workerBackground worker only (for split deployments)
dubbytv/webNginx web client only (for split deployments)
Terminal window
# Standalone (most users)
docker pull dubbytv/dubby:latest # Latest stable
docker pull dubbytv/dubby:1.2.0 # Specific version
docker pull dubbytv/dubby:beta # Beta
docker pull dubbytv/dubby:dev # Development (latest main)
# Split deployment (Kubernetes)
docker pull dubbytv/server:dev
docker pull dubbytv/worker:dev
docker pull dubbytv/web:dev

All commits and PR titles follow Conventional Commits. This drives automated changelog generation and version bumping:

TypeVersion impact
featMinor bump
fixPatch bump
feat! / fix!Major bump (minor pre-1.0)
refactor, docs, choreNo version bump