You are viewing archived documentation for v0.21. Go to latest →

Release Protocol

Steps to follow for every BirdNET-NG release.

Version Numbering

BirdNET-NG uses Semantic Versioning. All packages share a single version — they're released together.

Bump When Example
minor New capabilities — things the app couldn't do before v0.11 → v0.12
patch Improvements to existing capabilities — polish, fixes, translations v0.12.0 → v0.12.1
major Breaking changes, incompatible migrations v0.x → v1.0

When to bump minor

A user would say "the app can do something new":

  • New pages or major UI features (e.g., satellite detail page, field journal)
  • New infrastructure (e.g., live audio streaming, push notifications)
  • New API endpoints or data models
  • New satellite capabilities (e.g., audio autodetection, error state reporting)

When to bump patch

A user would say "that works better now":

  • Bug fixes
  • Translation fixes and i18n improvements
  • UI polish (alignment, colors, icons, auto-boost)
  • Performance improvements
  • Small additions to existing features (e.g., sort toggle, extra stat)
  • Documentation-only updates

When NOT to bump

Don't bump for every commit. Batch related changes:

  • Work on features, commit and push without bumping
  • When a coherent set of changes is ready, go through the release process
  • Multiple bug fixes can be grouped into a single patch release

Release Process

Step 1 — Update Documentation

This is the first step. Do not skip or defer it.

Update ALL documentation to reflect the current state of the codebase. This includes both the docs package AND root project files.

Root files

File Check
CLAUDE.md Migration count, container count, conventions
ARCHITECTURE.md Migration table, services, technology stack
FEATURES.md Mark completed features, add new ones

Docs package — roadmap, features, and release protocol (CRITICAL)

These are the most important pages. They MUST be updated first.

Page Check
guide/roadmap.md Move completed items to Released, update Planned, renumber future versions
guide/features.md Add new capabilities, update existing descriptions, migration count
reference/release-protocol.md Ensure process is current, update if workflow changed

Docs package — guide

Page Check
guide/architecture.md Components, services, MQTT channels, migration count + table, tech stack
guide/getting-started.md Setup instructions still accurate

Docs package — reference

Page Check
reference/api.md All endpoints listed with correct auth levels
reference/mqtt.md Message formats, channels, QoS values
reference/configuration.md All env vars, platform/tenant settings
reference/webhooks.md Event types, payload format
reference/design-system.md Button/badge classes, color palette

Docs package — deployment

Page Check
deployment/hub.md Container count, migration count, commands
deployment/workers.md Docker, standalone, GPU
deployment/satellites.md Overview, comparison table
deployment/satellite-rpi.md Setup, profiles, heartbeat, update script
deployment/satellite-android.md Features, settings, troubleshooting
deployment/docs-site.md Documentation site deployment

Sync root docs

After updating docs/versions/vX.Y/, copy the updated files to docs/ (root serves as "latest"):

cp docs/versions/vX.Y/guide/roadmap.md docs/guide/roadmap.md
cp docs/versions/vX.Y/guide/features.md docs/guide/features.md
# ... and any other changed files

Step 2 — Build and Deploy

Build all packages and deploy for testing:

pnpm build
docker compose up -d --build

Verify all containers are running:

docker compose ps

Step 3 — Test and Confirm

The user must test the deployment and explicitly confirm it's ready for release.

Checklist:

  • Web UI loads and shows current features
  • New features work as expected
  • No console errors
  • Docs site shows updated content
  • Satellite(s) connected and functioning

Do not proceed to Step 4 until the user says "good to go" or equivalent.

Step 4 — Version Bump

pnpm version:bump <minor|patch>

This automatically:

  • Bumps version in all 7 package.json files + pyproject.toml
  • Snapshots current docs to docs/versions/vX.Y/ (minor only creates new folder)
  • Prepends CHANGELOG entry
  • Creates git commit and tag vX.Y.Z

Step 5 — Push

git push origin main --tags

Step 6 — Final Deploy

docker compose up -d --build

Step 7 — Verify

  • Web UI shows new version in sidebar
  • Docs site version dropdown updated
  • Satellites show correct version (after heartbeat)

Summary

1. Update docs (roadmap + features FIRST, then all other pages)
2. Build and deploy for testing
3. User tests and confirms → WAIT FOR APPROVAL
4. Version bump (minor or patch)
5. Push to origin with tags
6. Deploy all containers
7. Verify

Hotfix Process

For urgent fixes between releases:

  1. Fix the issue
  2. Build and deploy
  3. User confirms the fix
  4. pnpm version:bump patch
  5. Push and redeploy