BirdNET-Go: a self-hosted soundscape analyser for birds, bats and everything else that calls at night
Self-hosted realtime soundscape analyser for birds, bats and other wildlife. Multi-model local AI inference, runs 24/7 on a Raspberry Pi.
At a glance
- What is it?
- BirdNET-Go runs BirdNET v2.4, Google Perch v2 and regional bat classifiers locally on a Raspberry Pi and pushes detections to Home Assistant, Discord or MQTT. Here is what the repository actually documents, and where the setup stops being easy.
- Who is it for?
- Adopt BirdNET-Go if you want continuous, local acoustic monitoring with more than one classifier and you are prepared to keep a Linux box or Pi running 24/7. Do not adopt it if you only need occasional single-file identification, since BirdNET v2.4 standalone or a phone app covers that with far less operational surface.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What BirdNET-Go actually replaces
A microphone in a garden produces an endless stream of audio. Identifying species in that stream by hand is not feasible, and uploading it to a cloud service means shipping raw sound off your network continuously. BirdNET-Go sits in that gap: it ingests soundcard input or RTSP/RTSPS network streams, runs classification locally, and presents results in a web UI. The README describes it as a "Realtime soundscape analyser for birds, wildlife, and bats" with "Self-hosted, 24/7, local AI inference".
The intended deployment is a Raspberry Pi that runs unattended. That shapes every design decision visible in the repository: Go as the implementation language, SQLite as the default database, a Svelte 5 single-page app instead of server-rendered pages, and Docker images published for linux/amd64 and linux/arm64. The audience is people who already run a home server or a Pi and want acoustic monitoring as another always-on service, not researchers who need a desktop analysis tool they open once a week.
Multi-model inference and the consensus mechanism
The distinguishing feature is that BirdNET-Go is not tied to one classifier. The detection section lists BirdNET v2.4 as the default embedded model with 6,500+ bird species, Google Perch v2 via ONNX covering 14,795 species across birds, insects, amphibians and mammals, BattyBirdNET bat classifiers in 11 regional models, and the BirdNET Geomodel v3.0 for location-based range filtering across 12,012 species. Models are installed from inside the application, which the README states requires no rebuild.
The mechanism that ties them together is cross-model consensus. Multiple models can run in parallel against separate audio sources, and the README states that agreement between models strengthens confidence on shared detections while disagreements are flagged for review. This is a meaningful design choice: instead of trusting one classifier's score, the system treats a second opinion as evidence. It also means a single detection can consume inference from more than one model, so the compute budget on a Pi is not the same as running BirdNET alone.
False positives get a separate layer. Deep Detection requires repeat confirmation within a 15-second window before a detection is accepted, and there are per-species dynamic thresholds, a location-based range filter, privacy and dog-bark filters, and per-classifier bat false-positive levels. The documentation points to a wiki guide for Deep Detection rather than explaining the thresholds inline, so expect to read the wiki before tuning.
Installing BirdNET-Go on Debian, Ubuntu or Raspberry Pi OS
The README gives a two-command install for Debian, Ubuntu and Raspberry Pi OS. It downloads the install script from the repository and runs it:
curl -fsSL https://github.com/tphakala/birdnet-go/raw/main/install.sh -o install.sh
bash ./install.shThe script is the entry point for the native install path. Docker images are published for linux/amd64 and linux/arm64, and pre-built binaries for Linux, Windows and macOS ship with each release. The README points to a wiki installation guide, a hardware recommendations page and a security guide for the details the quick install does not cover.
After installation, first-run setup goes through an onboarding wizard. That wizard is where you select audio input and configure the initial model, so the practical sequence is: install, open the web UI, complete the wizard, then add sources. If you are running on a Pi with a USB microphone, the soundcard capture path is the one to pick; RTSP/RTSPS is for network cameras or streamers that already expose audio.
The repository also carries a podman-install.sh alongside install.sh, plus directories named Docker/, Podman/ and Unraid/, which suggests the maintainers support those deployment routes rather than treating Docker as the only packaged option.
Audio input, sample rates and the bat problem
Bird detection and bat detection are not the same engineering problem. Birds vocalise in ranges a normal microphone captures; bats mostly do not. The README states that BirdNET-Go supports sample rates up to 256 kHz for ultrasonic bat detection, and that BattyBirdNET requires Linux plus an ultrasonic-capable device. Those two constraints together rule out a large share of casual setups: a standard USB microphone will not produce the sample rate the bat models need, and the bat path is not available on Windows or macOS.
The input side is otherwise flexible. Soundcard capture and RTSP/RTSPS streams are both supported, multiple sources can run in parallel with independent model assignment, and there is an audio liveness watchdog with tiered recovery for streams that drop. Stream sample-rate probing exists, and the UI shows per-model recommendation banners when the incoming rate does not suit the selected model. Offline analysis of audio files is also listed, which is the escape hatch if you want to test a model against a recording before committing to a live source.
Per-source controls include an audio equalizer, quiet hours, a daylight filter and an extended capture mode. Quiet hours and the daylight filter matter more than they sound: they are how you stop a 24/7 system from recording and classifying during periods you do not care about.
Alerts, MQTT and Home Assistant discovery
Detections are only useful if they reach somewhere you already look. The alert rules engine supports per-rule conditions, schedules and delivery targets, and delivery goes through shoutrrr to Discord, Slack, Telegram, ntfy, Pushover, Gotify, Matrix, Bark and IFTTT, among others. Webhooks with custom templates, shell-script hooks and browser push notifications are separate paths. There is also a BirdWeather.com integration, which is the one outbound destination that is a third-party service rather than your own infrastructure.
For home automation, MQTT publishing includes Home Assistant auto-discovery, which is the mechanism that lets Home Assistant create entities for your detections without manual configuration. A Prometheus metrics endpoint is exposed as well, so the same instance can feed an existing monitoring stack. The README also mentions live spectrogram and realtime log output intended for OBS overlays on bird-feeder streams, which is a niche but concrete use case: the same detection pipeline doubles as a video overlay source.
Local-only is the default, and the README describes optional Sentry telemetry as strictly opt-in. If you are deploying this on a network you do not fully control, that default is the relevant fact, not the integrations list.
Storage, operations and what the README leaves vague
SQLite is the default database, with MySQL as an alternative and retry-aware write paths for contention. Automatic backups are included with real-time status polling. Audio clip export is format-aware, and an embedded eBird/Clements taxonomy covering 2,374 genera, 254 families and 11,145 species handles offline species lookups.
The operational surface is larger than a typical hobby project. There is OIDC/SSO, TLS certificate management, hot-reload settings, a system health page, a database doctor and one-click support dumps. A browser terminal using xterm.js over a WebSocket PTY is available for in-app administration, which is convenient and also means the web UI is not a read-only dashboard. A reset_auth.sh script sits at the repository root for the case where you lock yourself out.
Two things the README does not settle. First, licence: the badge in the README points to CC-BY-NC-SA 4.0, while the repository's licence field reports NOASSERTION, and there is a LICENSES.md file alongside LICENSE. Anyone planning commercial or institutional deployment should read those files directly rather than trusting either the badge or the metadata. Second, the README does not document rollback or downgrade procedure for a release. Upgrades are shipped as tagged releases and the install script is the documented install path, but what happens if a new release misbehaves on your hardware is not described in the README.
BirdNET-Go versus BirdNET-Pi and the standalone BirdNET
The closest comparison is BirdNET-Pi, which the project's own topics list names directly. The difference in approach is model scope and orchestration. BirdNET-Pi is built around BirdNET as the classifier; BirdNET-Go treats classifiers as installable components, with BirdNET v2.4, Perch v2, BattyBirdNET and the Geomodel all selectable from inside the app, and adds cross-model consensus on top. If your interest is birds only, that extra machinery buys you nothing and costs you memory and CPU on a Pi.
Against BirdNET v2.4 used standalone, the difference is operational rather than algorithmic. Standalone BirdNET classifies audio you hand it; BirdNET-Go is a service with a web UI, a database, backups, alert routing and a health page. The second is more work to run and more useful if you want continuous monitoring. The first is the right answer if you want to identify a recording.
A third comparison worth naming is the BirdNET Geomodel, which BirdNET-Go uses for location-based range filtering across 12,012 species. That is a filtering layer, not a competing application, but it is the reason the range filter in BirdNET-Go is worth configuring: without a location, the model set has no geographic prior to work from.
Editorial conclusion
Adopt BirdNET-Go if you want continuous, local acoustic monitoring with more than one classifier and you are prepared to keep a Linux box or Pi running 24/7. Do not adopt it if you only need occasional single-file identification, since BirdNET v2.4 standalone or a phone app covers that with far less operational surface. Before committing hardware, verify two things in the repository: whether the licence badge (CC-BY-NC-SA 4.0) matches your intended use, because the GitHub licence field reports NOASSERTION, and whether your target machine can handle the model you plan to run, since the bat classifiers are documented as requiring Linux plus an ultrasonic-capable device.
Frequently asked questions
Is BirdNET free to use?
The BirdNET-Go README displays a CC-BY-NC-SA 4.0 licence badge, while the repository's licence field reports NOASSERTION, and a LICENSES.md file is present at the repository root. Read LICENSE and LICENSES.md before relying on either signal, particularly for non-personal use.
How does BirdNET work?
In BirdNET-Go, audio arrives from a soundcard or an RTSP/RTSPS stream, one or more classifiers run locally against it, and detections are filtered before being stored and routed. The README lists BirdNET v2.4, Google Perch v2 via ONNX, BattyBirdNET and the BirdNET Geomodel v3.0 as selectable models.
How to install BirdNET-Go?
On Debian, Ubuntu or Raspberry Pi OS the README gives a two-command install that downloads and runs install.sh. Docker images are published for linux/amd64 and linux/arm64, and pre-built binaries for Linux, Windows and macOS ship with each release.
What is BirdNET-Go?
It is a self-hosted realtime soundscape analyser for birds, wildlife and bats, running local AI inference around the clock. It ingests soundcard input or network audio streams, classifies them with one or more models, and presents detections in a web UI.
Is BirdNET-Go better than BirdNET-Pi?
The repository's topics list names BirdNET-Pi as a related project. The practical difference is that BirdNET-Go treats classifiers as installable components and can run several in parallel with cross-model consensus, which costs additional compute compared with a single-classifier setup.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/tphakala-birdnet-go)