You will have a live hub and a toast on this machine — or on a phone — by the end of this page.

The source of truth is the Rabun.sh repository.

Install

Clone and install with Cargo. On Debian or Ubuntu you need pkg-config, libssl-dev, and build-essential. Rust 1.85 or newer.

git clone https://github.com/Burton-Workspaces/rabun-sh.git
cd rabun-sh
cargo install --path . --locked
rabun-sh --version

Init and serve

rabun-sh init
cp .env.example .env
rabun-sh check
rabun-sh serve

init writes rabun-sh.toml, .env.example (environment names, not tokens), and data/vapid.pem for Web Push. The hub listens on http://127.0.0.1:2586/ by default.

Pick a topic

The topic name is the password. Generate an unguessable one:

rabun-sh topic backups

Or open http://127.0.0.1:2586/ and click Generate. Leave that tab subscribed.

Publish

From another terminal:

curl -d "Backup successful" \
  -H "Title: NAS" \
  -H "Priority: high" \
  -H "Tags: white_check_mark" \
  http://127.0.0.1:2586/your-topic

Same thing with the CLI:

rabun-sh publish backups "done" --title Backup --priority high

The live list on the web page should show the message. On a desktop you can also subscribe without a browser:

rabun-sh subscribe backups --notify

Phone

On the web page, click Enable phone push and allow notifications. Install the page as a PWA if you want background push on a phone.

Or point the official ntfy Android or iOS app at the same origin, subscribe to the topic, and turn on instant delivery. If the phone is not on localhost, set RABUN_SH_BASE_URL in .env to the public HTTPS origin and restart serve.

Optional write token

When RABUN_SH_AUTH_TOKEN is unset, topics are open — the same model as public ntfy.sh. When it is set, publish needs Authorization: Bearer … (or Basic with an empty username). Subscribe stays open unless you set require_auth_read = true in the config.

Production

Pack the checkout and deploy over SSH. The public origin in the repository deploy notes is a Caddy virtual host plus a systemd unit beside Rabun.

./deploy/ubuntu/push.sh --pack --bootstrap --domain sh.example.com --env .env user@HOST

Put RABUN_SH_AUTH_TOKEN and RABUN_SH_BASE_URL in that process’s env file.

Next: architecture on GitHub, or browse the source.