// the find
appleboy/gorush
A push notification server written in Go (Golang).
gorush is a standalone push notification server that sits in front of APNS, FCM, and Huawei's HMS behind one REST (and gRPC) API, so you send a single JSON payload instead of hand-rolling three separate SDK integrations. It's aimed at teams that need to fan out notifications from backend services without baking provider-specific logic into every app server.
Pluggable everything: queue backend (local channel, NSQ, NATS, Redis streams) and stats storage (memory, Redis, Bolt, Bunt, Level, Badger) can be swapped via config, so you can start with a single binary and move to a distributed setup later without changing client code. Ops basics are actually there instead of bolted on later — Prometheus metrics, /sys/stats, /healthz, graceful shutdown that drains in-flight APNs/FCM sends before exit. CI is solid for a project this size: lint, Trivy scanning, and codecov are wired into the workflow rather than just claimed in the README. Recent activity (push in the last few months) and a maintained release cadence, not an abandoned v1 project.
The config schema is huge — three notification providers each with their own cert/credential format (p8/p12/pem for iOS, service account JSON for FCM, app secret for HMS) means the first integration pass is mostly reading tables, not writing code. Retry is a flat count with no documented backoff strategy, which is a rough edge if a provider starts rate-limiting you. The sync-send mode only works with the local queue engine — a meaningful constraint that's buried in a diff snippet in the README rather than called out where queue engines are introduced. No real guidance on handling dead/invalid device tokens at scale beyond returning an error string in the log array; you're on your own for reconciling that back to your user database.