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)