This nightly (March 10, 2026) contains critical bug fixes for the nightly released on March 9. Key fixes include audio filter chain initialization for all sources, biquad state corruption prevention in multi-source setups, MySQL v2 migration compatibility, and sound level processor stability. If you installed the March 9 nightly, updating to this release is strongly recommended.
This release also includes all features and improvements from the March 9 nightly: V2 database schema, alerting rules engine, redesigned UI pages, PWA support, and much more.
Critical Bug Fixes (since March 9 nightly)
- Audio filter chain not initialized for non-malgo sources — filter chains were only set up for malgo audio sources, leaving RTSP and other sources without filtering (#2163)
- Biquad state corruption in multi-source setups — shared filter state across audio sources caused cross-contamination; now uses per-source filter chains (#2168)
- Sound level processor error flooding and race condition — excessive error logging and a data race in the sound level processor (#2169)
- MySQL v2 AutoMigrate fails with legacy schema — v2 migration broke on MySQL when legacy tables existed (#2165)
- V2 database table name mismatch — handle pre-PR#2165 table name mismatch for existing v2 databases (#2185)
- Image provider crashes on empty scientific names — guard against empty scientific names on read paths (#2164)
- Redundant SSE audio file polling removed — eliminated unnecessary polling in the processor (#2167)
- Lifecycle management with tiered shutdown — new Service interface for clean startup/shutdown ordering (#2147)
- Race condition in LegacyService Start/Stop — eliminated race between service start and stop (#2178)
- FFmpeg exit code not captured — real exit codes now captured in handleQuickExitError (#2177)
- Logger config struct tags missing — added mapstructure tags to logging config structs (#2186)
- AviCommons now default image provider — switched default bird image provider to AviCommons (#2142, #2144)
New Features
V2 Database Schema
What changed: The database now uses a properly normalized design with separate tables for labels, models, and predictions linked by foreign keys. This enables multi-model support, model-specific labels, and significantly more efficient queries.
Migration: Existing installations can migrate to the new V2 schema from the System / Database dashboard. The migration runs in phases with progress tracking and validation and must be initiated manually by the user. Fresh installations start directly with the V2 schema.
Why it matters: Features like the new alerting rules engine, advanced analytics, and the database dashboard all require the V2 schema. Future features will be built exclusively on this foundation.
Alerting Rules Engine
A flexible, rule-based notification system that replaces simple threshold alerts. Create rules that combine multiple conditions — species, confidence, time of day, location — and route alerts to different notification channels. Managed through a new inline rule editor in the settings UI (#2010).
Database Dashboard
A new System / Database page showing real-time database health metrics, storage statistics, and performance sparklines. Includes integrated migration controls and backup management with progress tracking (#2056, #2058, #2060).
Insights Page (Backend)
New backend API endpoints for the upcoming Insights page, providing aggregated analytics data (#2145).
eBird Integration Settings
New settings UI for configuring eBird integration (#2146).
Currently Hearing Card
A new dashboard card showing species currently being detected in real-time, sorted by most recent detection with wall-clock timestamps (#2126, #2128).
PWA Install Support
BirdNET-Go can now be installed as a Progressive Web App on mobile and desktop devices for a native app-like experience (#2015).
Daylight Filter
An optional filter that can discard detections of user-specified nocturnal species during daytime hours, reducing false positives. Users must enable the filter and configure which species are affected. Uses sun position calculations based on your configured location.
Quiet Hours per Audio Source
Configure quiet hours independently for each audio source, allowing different schedules for different microphone locations (#2065).
Bird Image Proxy
Bird images are now proxied through the Go backend with a local file cache, improving privacy and load times (#2129).
UI Redesigns
- Detection Detail Page — completely redesigned with improved layout and information density (#2037)
- System Overview Page — data-dense layout with live sparklines for CPU, memory, disk, and temperature (#2046)
- Terminal Page — polished card layout with color themes and popout window support (#2047, #2062)
- Sidebar Navigation — new icons for analytics and system sections
- Windows ConPTY Support — browser terminal now works on Windows (#2049)
Performance Improvements
- ~20x faster spectrogram generation using FFT-friendly dimensions (#2027)
- ~30x faster audio duration queries by replacing ffprobe with sox --info (#2028)
- Spectrogram loading optimization with state machine and concurrent load limits (#2029)
- Spectrogram lazy loading with cache headers (#2018)
Internationalization
- Notification content now uses i18n translation keys (#2067, #2068, #2069)
- Alert schema labels translated on the frontend (#2071)
- Built-in alert rule names and notification titles translated (#2072)
- NotificationBell hardcoded English strings replaced (#2070)
Other Bug Fixes
- Duplicate predictions causing silent detection loss (#2127)
- Shutdown bugs: database double-close, 9-second hang, goroutine race (#2131)
- Extended capture buffer using wrong allocation size
- Duplicate key errors in dashboard daily summary (#2032)
- Audio device listing backend mismatch and duplicate key crash (#2031)
- SSE WriteTimeout race from heartbeat interval (#2034)
- Duplicate each-keys in Svelte components (#2035)
- Audio card display name resolution (#2036)
- Translation cache bugs causing stale translations (#2021)
- crypto.randomUUID fallback for non-HTTPS contexts (#2024)
- System metrics store initialization for sparklines (#2050)
- Scientific name extraction from concatenated labels (#2051, #2053)
- Detection detail translation and icon issues (#2055)
- DailyEventsID propagation in v2only SaveDailyEvents (#2030)
- Deduplicate predictions to prevent silent detection loss (#2127)
- System monitor simplified to pure metric collector, duplicate notifications fixed (#2130)
Telemetry Improvements
- Expanded diagnostic context with privacy-safe debugging fields (#2170)
- 5xx errors now reported to Sentry via HandleError() (#2183)
- Path anonymization centralized into privacy package (#2180)
- Error origin tags to classify code vs environment issues
- Stack traces enabled for fatal events with privacy scrubbing
- Resource snapshots attached to system/database/timeout errors