explaingit

appleboy/gorush

8,724GoAudience · developerComplexity · 3/5Setup · moderate

TLDR

A self-hosted push notification server written in Go that sends messages to iOS, Android, and Huawei devices through a simple HTTP or gRPC API call, no third-party SaaS required.

Mindmap

mindmap
  root((gorush))
    What it does
      Sends push notifications
      iOS Android Huawei
    How it works
      HTTP and gRPC API
      Worker queue
      YAML configuration
    Deployment
      Docker
      Kubernetes
      AWS Lambda
    Features
      Metrics endpoint
      TLS auto-provision
      Statistics dashboard
    Audience
      Backend developers
      Mobile app teams
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Route all mobile push notifications from your backend through a single gorush HTTP endpoint instead of calling Apple and Firebase directly

USE CASE 2

Run a lightweight push notification server in Docker using under 30MB of memory to notify your app users

USE CASE 3

Send bulk push notifications to thousands of iOS and Android devices in a single API request with queue-based processing

Tech stack

GoDockergRPCKubernetesYAML

Getting it running

Difficulty · moderate Time to first run · 30min

Requires Apple Push Notification Service certificates or Firebase Cloud Messaging credentials configured in a YAML file before the server can send notifications.

In plain English

Gorush is a self-hosted push notification server written in Go. It acts as a central service you run on your own infrastructure that sends push notifications to iOS, Android, and Huawei devices on your behalf. Instead of each part of your backend talking directly to Apple or Google's notification systems, everything goes through gorush via a simple HTTP API call. To send a notification, you POST a JSON payload to gorush specifying the device token, the platform (iOS, Android, or Huawei), a title, and a message. The server takes care of forwarding that to Apple Push Notification Service, Firebase Cloud Messaging, or Huawei's equivalent, whichever applies. You can include multiple notifications in a single request. The server queues incoming requests and processes them with a configurable number of worker processes running in parallel, which helps maintain throughput under load. Setup involves downloading a binary (or running the provided Docker image), creating a YAML configuration file that specifies your Apple or Firebase credentials and which platforms to enable, and starting the server. The average memory footprint is around 28 megabytes. There is also a built-in statistics endpoint that shows how many notifications succeeded or failed. Beyond the basics, gorush supports running as a gRPC service in addition to HTTP, integrates with several queue backends for higher-volume deployments, can expose metrics for monitoring tools, and handles TLS certificate provisioning automatically. It can run inside containers and is documented for deployment on Kubernetes and AWS Lambda. A live demo instance is available, and the repository links to a sample Flutter application to test notifications end to end. The full README is longer than what was shown.

Copy-paste prompts

Prompt 1
I'm building a mobile app backend and want to send push notifications through gorush. Show me the Docker setup and a sample JSON payload for sending a notification to an iOS device.
Prompt 2
I'm configuring gorush to send Android notifications via Firebase Cloud Messaging. How do I set up the YAML config with my Firebase credentials and test it with a sample device token?
Prompt 3
My gorush server needs to handle high volume. How do I tune the worker pool size and which queue backend should I choose for reliability?
Prompt 4
I want to use gorush as a gRPC service instead of HTTP in my Go microservice. Show me the configuration and a Go client code example.
Open on GitHub → Explain another repo

← appleboy on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.