Releases: tphakala/birdnet-go
Nightly Build nightly-20260322
If you're on nightly-20260321, update to this release. It fixes a critical bug that caused the Settings > Integrations page to freeze the entire UI, making all navigation unresponsive. Both Docker and bare-metal installs are affected.
This release includes all features from nightly-20260321: realtime spectrogram with live detection labels, graceful restart, onboarding wizard, OIDC-secured HLS streaming, taxonomy synonym overrides, Discord webhook notifications, and three new locales.
Critical Bug Fix
- Integrations page freeze (effect_update_depth_exceeded) โ an infinite reactive loop in eBird API key validation caused Svelte's runtime to lock up when navigating to Settings > Integrations, freezing all buttons and navigation until the tab was closed (#2475, fixes #2478, #2474)
Telemetry Improvements
- Frontend Sentry error tracking โ client-side errors are now reported to Sentry with privacy filtering, helping catch UI crashes like this one faster (#2476)
- Telemetry hardening โ nil guard, bounded event queue, logger-to-Sentry wiring, and source map support for meaningful frontend stack traces (#2477)
Nightly Build nightly-20260321-397
If you use Discord notifications, update to this release. Previous nightlies silently suppressed Discord alerts because detections were dispatched with the wrong internal notification type, causing webhook delivery to never trigger.
This release includes all features from the earlier nightly-20260321: realtime spectrogram with live detection labels, graceful restart, onboarding wizard, OIDC-secured HLS streaming, taxonomy synonym overrides, and three new locales.
Discord & Webhook Notification Fixes
- Fix silent Discord notification suppression โ detection alerts were dispatched with an incorrect internal notification type, causing Discord and other webhook notifications to be silently dropped instead of delivered (#2467)
- Pass detection metadata to webhook templates โ webhook templates now receive full detection metadata (species, confidence, location, timestamps), fixing empty or broken Discord rich embeds (#2473)
- Fix premature species tracker update โ species tracker was updated before the detection was fully created, causing stale data in notification context (#2469)
Documentation
- Discord notification setup guide โ step-by-step guide with rich embed webhook template (#2472)
Nightly Build nightly-20260321
This nightly is a large feature release. Highlights include realtime spectrogram visualization with live BirdNET detection labels, graceful binary and container restart, a first-time onboarding wizard, OIDC-secured HLS streaming, taxonomy synonym overrides, and three new locales.
New Features
Realtime Spectrogram with Live Detection Labels
Live waterfall spectrogram visualization for audio streams with real-time BirdNET detection labels overlaid directly on the spectrogram. Labels sync to the HLS playhead using program_date_time timestamps, with repeat hit indicators for continuously detected species. Includes a compact MiniSpectrogram widget for the dashboard and a new SpectrogramPlayer component that replaces the full AudioPlayer in detection rows (#2391, #2430, #2368).
Graceful Binary and Container Restart
Restart BirdNET-Go from the UI without losing data. Supports both native binary restarts and Docker container restarts with a new RestartCard in the system overview. Background migration continues syncing post-completion detections and includes startup reconciliation to catch anything missed during the restart window (#2443).
Onboarding Wizard
A new wizard dialog system for first-time setup and what's-new flows. Guides new users through initial configuration with step-by-step onboarding dialogs (#2418, #2423).
Taxonomy Synonym Overrides
User-configurable taxonomy synonym mappings for species that have been reclassified. Includes a settings UI for managing overrides, validation, and logging. Ships with built-in mappings for recently reclassified species (Streptopelia โ Spilopelia, Bubulcus โ Ardea, Cooper's Hawk scientific name) (#2427 by @tariquesani, #2395 by @tariquesani, #2440).
Public Live Audio Access
New option to allow unauthenticated access to live audio streams for public-facing installations. Supports hot-reload โ changes take effect immediately without restart (#2356).
Default Audio Gain Setting
Configurable default gain level for audio playback across all views (#2354).
Custom Config File Path
New --config / -c CLI flag to specify a custom configuration file path, useful for running multiple instances or non-standard deployments (#2455).
Alert Rule Validation
EscalationSteps are now validated on alert rule save, preventing misconfigured escalation chains (#2464).
Portainer App Template
Official Portainer app template for one-click deployment with documented UID/GID configuration.
DetectionDetail Hero Redesign
The detection detail page hero section now uses a three-card layout for improved information density.
Settings Forms Redesign
All settings forms redesigned for visual consistency with the system design language (#2336).
New Locales
Security
- HLS stream authentication โ prevent unauthenticated access to HLS audio streams using per-session stream tokens (#2406)
- Harden HTTP security headers โ stricter CSRF cookie handling and security header configuration (#2421)
- Respect AllowSubnetBypass.Enabled โ subnet bypass was always active regardless of the Enabled flag (#2419)
- Restrict COOP header to secure contexts โ Cross-Origin-Opener-Policy now only applied over HTTPS (#2422)
Bug Fixes
Audio & Analysis
- Prevent analysis buffer overruns under load โ fixes ringbuffer-full conditions during sustained high-load periods (#2282)
- FFprobe singleflight dedup โ eliminates redundant FFprobe subprocess spawns (#2344)
- Retry audio device validation for USB โ handles late USB device enumeration on startup (#2360)
- Audio clip race condition โ grace period wait prevents premature clip access (#2358)
- Restart analysis monitor after watchdog reset โ analysis resumes after stream watchdog triggers (#2388)
Frontend & Dashboard
- Dashboard layout persistence โ widget widths and visibility now persist correctly for guests and authenticated users (#2402)
- Fix empty species/daily response โ SummaryLimit correctly read from layout element (#2362)
- Push notification dispatcher hot-reload โ save button and hot-reload now work for notification settings (#2404)
- Confidence circle dark mode โ no longer renders as a pie chart in dark mode
- Toast notifications on failed actions โ DetectionRow now shows error feedback (#2381)
- Oklch color values โ percentage lightness and degree hue for correct color rendering (#2405)
- Slovak locale persistence โ valid UI locales now derived dynamically (#2353)
- Italian and Slovak in SUPPORTED_LOCALES โ both locales now available in language picker (#2367)
- Sidebar section labels โ shortened across all locales for better fit (#2363)
Database & MQTT
- MQTT TOCTOU race conditions โ publish operations now use atomic check-and-set (#2462)
- Cooldown TOCTOU race โ atomic cooldown check prevents duplicate notifications (#2463)
- Propagate database ID to Notes โ v2only Note.Save now returns the assigned ID (#2460)
- MQTT detectionId validation โ defensive ID check prevents empty IDs in MQTT payloads (#2459)
- Duplicate pending detection SSE โ suppresses duplicate SSE broadcasts (#2433)
- Dynamic threshold merge keys โ normalized keys prevent duplicate species entries (#2414)
HLS Streaming
- HLS session tracking and FIFO cleanup โ fixes race condition, stale response, and FIFO leak (#2411)
- AudioLevelIndicator fixes โ resolves HLS-related pre-existing issues (#2416)
- Stream label updates to MQTT โ label changes propagate without restart (#2279)
Notifications & Alerts
- Prevent alert test from triggering push โ test button no longer sends real push notifications (#2348)
- Reduce notification noise โ disk alerts and securefs 404s no longer flood notifications (#2446)
- Return 404 for missing mark-as-read โ correct HTTP status instead of 500 (#2280)
Configuration & Infrastructure
- Location sentinel replaced โ explicit
locationConfiguredflag instead of (0,0) sentinel (#2350) - OAuth provider session lookup โ active provider stored directly in session (#2349)
- Shutdown deadline โ prevents hanging past 9-second deadline (#2420)
- Rebuild name maps on locale change โ datastore name maps refresh when BirdNET locale changes (#2436)
- YAML tags on all settings structs โ consistent serialization (#2441)
- SecureFS base dir for spectrograms โ path resolution uses SecureFS (#2387)
Internationalization
- Restart keys translated for all non-English locales (#2445)
- Species synonym translations for all locales
- Hardcoded English strings replaced with i18n keys across multiple components
- Updated Latvian BirdNET labels (#2340 by @Anrijs)
- Separate Finnish names for Carrion and Hooded Crows (#2343 by @pasimasa)
Nightly Build nightly-20260315
This nightly brings major frontend features โ OIDC authentication, a color scheme system, audio clip extraction with processing tools, dashboard customization, and weather/moon phase display โ alongside a large batch of stability and reliability fixes.
New Features
Authentication & Security
- OIDC provider support โ connect self-hosted identity providers (Keycloak, Authentik, etc.) for single sign-on (#2324)
- OIDC frontend settings UI โ configure OIDC providers directly from the security settings page (#2328)
- RP-Initiated Logout for OIDC โ proper logout flow that signs out of both BirdNET-Go and the identity provider (#2327)
- TLS certificate management โ four certificate modes (none, self-signed, custom, ACME) configurable from the UI (#2288)
- MQTT TLS certificate management โ configure TLS certificates for MQTT connections via the settings UI (#2296)
- Allow iframe embedding โ new option to permit embedding BirdNET-Go in iframes (#2291)
- Redact credentials from browser logs โ sensitive values are scrubbed before reaching the console (#2306)
- Return error from GenerateRandomSecret โ proper error propagation instead of silently returning an empty string (#2307)
Dashboard & UI
- Color scheme system โ predefined color schemes, custom color picker, and server-side persistence (#2252)
- Customizable dashboard layout โ inline editing with adjustable widget widths (#2265)
- Weather display and moon phase โ live weather and moon phase indicator on the dashboard banner (#2300)
- Dashboard cogwheel settings โ new dropdown with map controls and dashboard options (#2289)
- Settings menu in header โ replaced theme toggle with a cogwheel settings menu (#2287)
- Reset dashboard option โ restore dashboard layout to defaults from the header menu
- Telemetry listen address selector โ IP dropdown with port field replaces free-text input (#2257)
Audio & Analysis
- Audio clip extraction from spectrogram โ extract and download audio clips directly from the spectrogram view (#2303)
- Audio processing toolbar โ denoise, normalize, and gain controls for audio playback (#2323)
- Redesigned audio processing toolbar โ unified controls with improved layout (#2334)
- Audio analysis overload notification โ alert when the system cannot keep up with real-time audio analysis (#2286)
- Audio EQ filter timing diagnostics โ timing metrics for audio equalization on RTSP streams (#2262)
Observability & Configuration
- eBird API key validation โ test eBird API connectivity from the settings UI (#2335)
- Environment detection and CPU details โ system info now shows container environment and CPU model (#2264)
- Backend connectivity check โ offline banner and polling guards when the server is unreachable (#2269)
Bug Fixes
Audio & Analysis
- Wait server-side for audio encoding โ prevents premature 503 responses for in-progress encodes (#2284)
- Prevent analysis buffer overruns โ fixes ringbuffer-full conditions under sustained load (#2282)
- Route FLAC clip extraction through temp file โ fixes corrupted FLAC headers in extracted clips
- Use temp file for AAC/ALAC clip extraction โ MP4 muxer requires seekable output
- Correct file extensions for AAC and OPUS clips โ downloads now have the right extension
Frontend
- Prevent spectrogram flickering on page load โ eliminates layout shift when spectrograms render
- Treat 0-byte spectrogram files as missing โ avoids permanent blank spectrograms
- Confidence circle dark mode fix โ no longer renders as a pie chart in dark mode
- Keep elapsed time running while offline โ CurrentlyHearingCard timer continues during connectivity loss (#2275)
- Use settings store in BannerCard โ removes redundant API call (#2321)
- Responsive audio player image โ correct object-fit property for responsive layout
- Detection card grid layout โ improved responsive container queries
- CSS import order fix โ correct import order for schemes.css
Connectivity & Streaming
- Cancel in-flight ping on watchdog deactivation โ prevents stale pings after reconnection (#2278)
- Replace setInterval with recursive setTimeout โ prevents polling pile-up during outages (#2277)
- Arm SSE error watchdog once per burst โ stops duplicate reconnection attempts (#2276)
- Await initial poll before scheduling next โ prevents race condition on first connectivity check
- Streaming JSON parser buffer persistence โ preserves partial chunks across iterations (#2309)
- Drain result channel on disconnect โ prevents goroutine leak when clients disconnect (#2308)
Database & API
- Populate species_code from eBird taxonomy โ fixes missing species codes in v2only datastore (#2233)
- Pass MySQL database name to schema validation โ fixes validation on non-default database names (#2239)
- Return 404 for missing notification mark-as-read โ correct status code instead of 500 (#2280)
MQTT & Streams
- Propagate stream label updates to MQTT โ label changes now take effect without restart (#2279)
Configuration
- Propagate default transport to RTSP/RTMP streams โ stream config inherits the global default transport (#2263)
- Validate telemetry listen address โ validates at startup, API, and runtime to prevent invalid binds (#2253)
- Reset invalid SummaryLimit โ falls back to default instead of blocking startup
Timezone & Display
- Server timestamp for relative time โ fixes cross-timezone display of detection times (#2310)
- False positive filter detection count โ slider now shows the actual computed count (#2312)
Taxonomy
- Taxonomy synonym fallback for image lookups โ falls back to synonym mappings when species images aren't found under the current name
Telemetry
- Suppress telemetry for image-not-found errors โ stops noisy error reports for expected missing images
- Suppress Sentry for expected mount point failures โ no more false alerts in containers (#2281)
- Suppress Sentry for unregistered sound level processor โ eliminates noise from unconfigured processors (#2283)
CI
Nightly Build nightly-20260311
This nightly focuses on stability and bug fixes across audio processing, database migrations, taxonomy mappings, and the frontend. It also adds Prometheus observability metrics and refreshes the Species settings page.
New Features
- Species settings page redesign โ refreshed Species settings page with the system design language for a more consistent look and feel (#2190)
- Prometheus metrics for BirdNET buffer overruns โ new metrics to monitor when the BirdNET processing pipeline drops audio segments due to buffer pressure (#2230)
- MyAudio Prometheus metrics wired up โ previously unused audio capture metrics are now exported to Prometheus (#2232)
- Buffer overrun tracking for BirdNET processing โ internal telemetry to track when audio buffers overflow during analysis (#2229)
Bug Fixes
Audio & Analysis
- 503 instead of 404 when audio is still encoding โ audio requests now return 503 (Service Unavailable) while encoding is in progress, allowing clients to retry (#2227)
- Handle missing analysis buffer during RTSP reconnection โ prevents panic when RTSP source reconnects before the analysis buffer is allocated (#2214)
- Increase audio file readiness timeout for slow storage โ longer timeout for NAS and network-mounted storage (#2210)
- Preserve exponential backoff in audio file validation retries โ backoff was accidentally flattened, now correctly exponential (#2218)
FFmpeg & Path Handling
- Prevent ingress path prefix from contaminating FFmpeg binary path โ path prefix no longer leaks into FFmpeg executable resolution (#2216)
- Extend FFmpeg path validation to all execution points โ consistent path validation everywhere FFmpeg is invoked (#2219)
Database & Datastore
- Detect and fix v2 column contamination in legacy image_caches table โ auto-repairs legacy tables that picked up v2 columns (#2188)
- Disable FK checks during MySQL orphaned table cleanup โ prevents migration failures on MySQL when dropping orphaned tables (#2208)
- Restore species_code and fix empty summary in v2only analytics โ analytics queries now return correct species codes and summaries (#2223)
Taxonomy
- Add BirdNET synonym mappings for reclassified species โ maps renamed species back to their current taxonomy (#2215)
- Resolve remaining unmapped BirdNET species โ fixes the last 10 species that had no taxonomy mapping (#2217)
Frontend
- Enforce 4:3 aspect ratio on all bird thumbnail images โ consistent thumbnail sizing across all views (#2189)
- Correct PWA manifest start_url and scope โ fixes PWA install and navigation behavior (#2221)
- Prevent each_key_duplicate errors in species lists โ eliminates Svelte console warnings from duplicate keys (#2224)
- Show scientific_name in imageprovider error notifications โ error toasts now include the species scientific name for easier debugging (#2231)
Image Provider
- Cache network failures to avoid repeated broken DNS lookups โ failed DNS lookups are cached to prevent flooding (#2222)
- Add species and provider context to ErrImageNotFound errors โ error messages now include which species and provider failed (#2225)
- Return 404 instead of 500 for missing species images โ correct HTTP status code for missing images (#2213)
Notifications & MQTT
- Display error context in notification UI โ notification errors now show actionable context (#2226)
- Improve MQTT connection error handling and reconnection backoff โ better error messages and exponential backoff for MQTT reconnects (#2220)
Infrastructure
- Handle missing mount point gracefully in containers โ system monitor no longer errors when container mount points are unavailable (#2211)
- Skip files with unexpected filename format gracefully โ disk manager ignores unrecognized files instead of erroring (#2212)
Telemetry Improvements
Nightly Build nightly-20260310
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
Dependency Updates
Nightly Build nightly-20260118
This pre-release (January 18, 2026) brings audio playback improvements, enhanced Home Assistant integration, and numerous bug fixes across the platform.
New Features
Audio Playback Speed Control
New playback speed control for detection audio clips with accessibility-focused design (#1774).
Aggregated Disk Notifications
Disk space notifications are now aggregated by mount point to reduce notification noise (#1822).
MQTT Detection ID for Home Assistant
MQTT messages now include detectionId for improved Home Assistant automation support (#1824).
Bug Fixes
Home Assistant & Reverse Proxy
- Home Assistant MQTT discovery issues resolved (#1777)
- Reverse proxy navigation support for Home Assistant Ingress (#1815)
- CSRF token generation fixed for Cloudflare Tunnel deployments (#1823)
Dynamic Threshold Learning
- Cooldown added to prevent rapid threshold learning (#1819)
- Discarded detections no longer trigger threshold learning (#1828)
- Species only added to dynamic thresholds when learning actually occurs (#1829)
Frontend & SPA Routing
- SPA routing now reactive to navigation store changes (#1820)
- SPA navigation 404 fixed for URLs with query parameters (#1826)
- Open redirect protection added to buildAppUrl (#1817)
- Mobile audio playback failure on iOS Safari resolved (#1825)
- ESLint security and quality warnings resolved (#1775)
Notifications & SSE
- Notifications now use detection time instead of processing time (#1782)
- Panic during JSON marshaling in SSE notifications prevented (#1784)
- 'Note not found in database' notifications prevented (#1783)
Internationalization
- Race condition showing translation keys on first load fixed (#1786)
- StatusBadges component now uses i18n translations (#1780)
Other Fixes
Nightly Build nightly-20260113
This pre-release (January 13, 2026) introduces a major redesign of stream configuration with multi-protocol support and real-time monitoring.
Major Features
Stream Configuration Redesign
Complete overhaul of audio stream configuration with support for named streams and multiple protocols. Streams can now be configured with distinct names and support for RTSP, HTTP, and file-based sources with automatic migration from legacy configuration (#1764).
Real-Time Stream Statistics
New stream monitoring UI with live stats updates and state history timeline for tracking stream health and performance (#1770).
Bug Fixes
- ExecuteCommand actions now work correctly without parameters (#1760)
- Script configuration errors are now surfaced to user notifications (#1761)
- MQTT BirdImage JSON field restored to PascalCase for backward compatibility (#1762)
- MQTT sound level template corrected and long device names truncated (#1763)
- Sidebar active menu item highlighting restored (#1771)
Nightly Build nightly-20260111
This pre-release (January 11, 2026) adds Home Assistant integration support.
New Feature
Home Assistant MQTT Auto-Discovery
BirdNET-Go now supports Home Assistant MQTT auto-discovery, allowing automatic integration with Home Assistant for real-time bird detection monitoring. The feature includes a new settings UI for configuration (#1749, #1750).
Nightly Build nightly-20260110
This pre-release (January 10, 2026) represents 18 days of development with numerous improvements since the previous nightly build, focusing on expanded OAuth authentication options, enhanced spectrogram customization, improved logging infrastructure, and comprehensive bug fixes.
Major Features
Expanded OAuth Authentication
Added support for Microsoft Account, LINE, and Kakao OAuth providers with a redesigned login modal featuring dynamic provider UI (#1654, #1658, #1662, #1663).
Centralized Logging System
Complete overhaul of logging infrastructure with unified structured logging, log rotation support, and dedicated spectrogram log files for easier debugging (#1676, #1678, #1741).
Spectrogram Customization
New configurable visual style presets and dynamic range settings give users control over spectrogram appearance (#1713, #1727).
Enhanced Mobile Experience
Comprehensive improvements to mobile UI across the application for better usability on smaller screens (#1685).
Weather Integration Improvements
Daily activity cards now display hourly weather icons, with complete yr.no symbol code mappings for accurate weather visualization (#1739, #1668).
Reverse Proxy Support
New Base URL configuration enables proper operation behind reverse proxies (#1636).
Scientific Name Species Lookups
Species configuration now supports lookups by scientific name in addition to common name (#1718).
Runtime Configuration
SPA migrated to runtime config fetching, eliminating need for rebuilds on configuration changes (#1660).
Performance Optimization
Added image load queue to limit concurrent spectrogram loads, improving page load performance (#1745).
Security
- Security hardening with fuzzing tests and vulnerability fixes (#1648, #1649)
- Centralized sensitive data sanitization for logging prevents accidental credential exposure (#1714)
- Support bundle redaction gaps closed for better privacy protection (#1709)
Bug Fixes
- Night detection search now correctly applies sunset/sunrise offsets (#1641)
- Weather temperature stored in Celsius with correct display-time conversion (#1650)
- Weather temperature and wind speed unit conversions corrected (#1733)
- Weather timestamps stored in local timezone for correct date queries (#1740)
- Weather icon derived from description when weatherIcon is unknown (#1737)
- Audio buffer precision loss and race conditions fixed (#1689, #1691)
- SSE write deadline reset prevents audio-level disconnections (#1675)
- Duplicate SSE notification connections eliminated (#1742)
- Duplicate Telegram/Shoutrrr notifications on timeout prevented (#1712)
- BirdWeather test connection now includes Audio and BirdNET settings (#1667)
- Detection comments API returns full comment objects instead of strings (#1731)
- Locked detections can now be unlocked (#1686)
- Comment section no longer collapses when typing (#1687)
- Notification status correctly mapped to frontend read boolean (#1688)
- Notification delete modal now appears correctly (#1695)
- Dashboard fetches more detections when pagination limit increases (#1725)
- Sox timeout handling improved with better fallback logging (#1726)
- Species config keys normalized for case-insensitive matching (#1716)
- ICU plural syntax with nested braces handled correctly (#1684)
- SPA client-side routing implemented properly (#1698)
- Horizontal scrollbar prevented when sidebar is collapsed (#1659)
- Windows FIFO logging uses internal logger correctly (#1736)