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.jsonfiles +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:
- Fix the issue
- Build and deploy
- User confirms the fix
pnpm version:bump patch- Push and redeploy