mrkeyoor.com_
Tue 08 Sept 16:08 UTC
Self-Hostedevaluationupdated 08 Sept 2026

boop review

Boop is a self-hosted notification inbox for events from your applications, scripts, and CI jobs. Its Go server stores events in SQLite, sends alerts through Apple's push service to an iOS app you build yourself, and can expose the same history to an MCP client.

Verdict

Our Boop run installed 36 packages and built in 10 seconds, but 5 of 17 tests failed at setup, so the measured commit needs a clean run with its documented Go 1.27 toolchain before deployment. It is a sharp fit for an iPhone-using developer who wants private operational alerts and will own the Apple signing work. Android teams and anyone wanting a ready mobile app should choose ntfy or Gotify.

We ran it

Lab card: what happened when we ran boopScreenshot of boop (github.com/chrisgreg/boop)
Install✓ · 30s36 packages
Build✓ · 10s
Tests✗ · 76s12 passed · 5 failed of 17 (go test)
Repo162 files~13,223 lines of source · 1.8 MB · 2 CI workflows · Dockerfile

Answers from our run

Does boop build from source?

Dependencies installed in 30 seconds (36 packages), and the build succeeded in 10 seconds. We cloned commit 881004d into a clean Debian container with 3 CPUs and no project-specific setup.

Do boop's tests pass?

Not all of them: 12 of 17 passed and 5 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use boop?

Android users who need phone alerts today: the README ships an iOS 26 client, while issue 3 asks for Android support.

What are the alternatives to boop?

ntfy, Gotify, Apprise. Our Boop run installed 36 packages and built in 10 seconds, but 5 of 17 tests failed at setup, so the measured commit needs a clean run with its documented Go 1.

Setup3/530-second install and 10-second build; 5 setup failures
Docs5/5Deployment, auth, APNs, API, backup, and MCP are explained
Community3/5742 stars and fresh pull requests, but the project is very young
Maturity3/5v1.3.0 ships binaries; iOS 27 tap fix is still open

Who it’s for

Developers who want deployment, backup, and application alerts on an iPhone without a hosted relay.
Small teams comfortable running one Go service, protecting its admin page, and backing up SQLite.
Sentry users who want server-side SDK events in a private inbox through a compatible ingest endpoint.
MCP users who want an agent to search stored operational events through a read-only interface.

Who it’s NOT for

Android users who need phone alerts today: the README ships an iOS 26 client, while issue 3 asks for Android support.
Apple users who cannot build and sign an iOS app or obtain APNs credentials: Boop does not supply a ready App Store client.
Public deployments that will leave admin credentials unset: the README says the web UI and read API are open in that configuration.
Browser applications looking for a normal public Sentry DSN: Boop's DSN contains a write-capable project key that the README says must stay server-side.
Teams deploying to iOS 27 without their own tap test: open pull request 5 reports a SIGABRT when a notification is tapped and proposes a fix.

Setup reality

Our sandbox installed 36 Go packages in 30 seconds and built Boop in 10 seconds. Tests failed after 76 seconds: 12 passed and 5 failed out of 17. The log tail shows setup failures in server/cmd/boop and server/internal/web, while five other listed packages passed; it gives no cause for those setup failures.

Stored events work without Apple credentials, but phone pushes need an Apple Developer team, APNs key, bundle ID, a mounted or encoded .p8 key, and a self-signed iOS build. Production also needs an admin username and password or an access layer such as a VPN.

The README requires Go 1.27 and Node 24 for development, while our supplied sandbox used Go 1.24. We cannot say that mismatch caused the failed tests. Linux bind mounts must be writable by UID 1000, SQLite needs a safe backup routine, and in-memory admin sessions disappear on restart.

One Go binary stores alerts in one SQLite file

Boop accepts events from applications, scripts, or CI jobs and puts them in a private inbox. The server is one Go binary with an embedded Svelte interface, while SQLite holds the history. A project key can create events but cannot administer the server. Device credentials read events and manage their own device. That split is appropriate for a small alerting service because a leaked sender key does not automatically become an administrator credential.

The repository we measured contained 162 files, about 13,223 lines of source, and occupied 1.8 MB before dependencies. That is a modest codebase for a server, web interface, and iOS client. Event payloads can include exception data, stack frames, tags, breadcrumbs, links, and up to three action buttons. Repeated events can share a fingerprint, which collapses their display while preserving every occurrence in storage.

iPhone push requires an Apple account and a signed app

Phone delivery goes directly from the server to Apple Push Notification service. Boop needs an Apple team ID, key ID, bundle ID, and .p8 private key. You must open the included Xcode project, select your team, use the same bundle ID, install the app, and pair it with the server by QR code. Without those credentials, events still reach SQLite and the web inbox, but Boop skips push delivery.

Our 3-CPU, 8 GB sandbox did not exercise APNs or build the iOS application. It installed and compiled the Go server path in an unprivileged Debian container. That boundary matters: a successful server build says nothing about Apple signing, notification permissions, public HTTPS, or whether a tap opens the right event on your phone. Budget a real-device acceptance test before depending on Boop for overnight failures.

What happened when we ran it

Our sandbox installed 36 packages in 30 seconds, and the build completed in 10 seconds. The checkout was commit 881004d under server/ using the supplied Go 1.24 Bookworm image. Installation and compilation therefore worked in that environment, despite the README now listing Go 1.27 and Node 24 for development. We did not measure delivery latency, memory use, notification arrival time, or mobile reliability.

Tests ended with exit code 1 after 76 seconds. The harness counted 12 passed and 5 failed out of 17. The log tail identifies setup failures for github.com/chrisgreg/boop/server/cmd/boop and github.com/chrisgreg/boop/server/internal/web; API, APNs, MCP, projects, and two event packages are listed as passing. The available lines do not name the missing dependency or configuration, so any claim about the cause would be guesswork.

An unset admin password leaves the interface open

Boop can put the web interface behind a username and password, with 30-day sessions held in memory. When both variables are unset, the README says everything is open and recommends placing the service behind a proxy, Tailscale, or VPN. A restart signs out every admin because sessions are not stored. Project and device keys remain restricted to their narrower roles, but that does not protect an unguarded admin page.

The 1.8 MB checkout keeps deployment mechanics understandable, yet operating it still means owning HTTPS, access control, backups, and key rotation. SQLite uses WAL mode and the README recommends its .backup command for a consistent live copy. The APNs private key must be backed up separately. Docker runs as UID 1000, so a root-owned Linux bind mount can prevent the database from opening unless ownership is fixed or a named volume is used.

MCP exposes five read-only tools to an agent

Boop's Streamable HTTP endpoint supplies five tools for projects, event lists, search, event detail, and grouped occurrences. There is no language model in the server. An MCP client queries the same stored operational data through a bearer token of at least 16 characters, a device credential, or admin authentication. The settings page can disable the endpoint completely. Project write keys are refused, which keeps event senders from becoming readers.

Our test log lists the internal MCP package as passing in 4.389 seconds, one of the concrete successes inside the failed 76-second suite. That does not prove a remote client can reach a production endpoint through your proxy. Test the custom authorization header, TLS termination, disabled-state response, and query scope with the agent you use. Operational events may contain customer IDs or error context even after Boop redacts its default list of sensitive keys.

v1.3.0 is current, while the iOS client still needs caution

GitHub showed 742 stars, 4 open issues and pull requests, and a last push on August 30, 2026. Release v1.3.0 was published the same day with Sentry envelope ingestion and prebuilt binaries for Linux, macOS, and Windows on amd64 and arm64. Open work was still moving on September 8, when pull request 5 proposed a fix for an iOS 27 notification-tap abort. The combined open count is not a defect count.

Boop is unusually clear about its trust boundaries for a project that began in August 2026. Its small 13,223-line codebase and direct APNs design make it inspectable, while the 5 failed setup checks stop short of a clean recommendation for commit 881004d. Try it if an iPhone is central to your workflow, rerun the suite with Go 1.27, protect the admin route, and verify taps on the exact iOS version you deploy.

Alternatives

ProjectWhat it isPick it when
ntfy gh↗A self-hosted publish and subscribe notification service with broad client support.pick this instead when Android, browser, and ready-made mobile clients matter more than Boop's developer-event detail.
GotifyA self-hosted server for sending and receiving application messages.pick this instead when an Android-first notification client fits your devices and you do not need Boop's APNs path.
AppriseA notification library and CLI that sends through many existing services.pick this instead when delivery to many providers matters more than owning a searchable event inbox.

What people are saying

  1. [velocity-scout] chrisgreg/boop

Sources

  1. Boop README
  2. Boop v1.3.0 release
  3. Boop Android support issue 3
  4. Boop iOS 27 tap fix pull request 5

More self-hosted reviews

FlClash · zulip · mediamtx · toolhive · HAMi · filebrowser · the whole board →