Joowd

Rusty Bee

LiveOpen SourceDeveloper Tools

Your phone, your server: a tiny Rust SMS gateway with a REST API and webhooks for OTPs and testing SMS flows.

Visit site

README

🐝 Rusty Bee

A self-hosted SMS gateway that runs on your own Android phone.

Plug in a spare phone, run one small server, and you get an SMS API. You don't need a Twilio account, you don't pay per message, and nobody else sees your messages. Texts go out through your phone's normal SIM.

What it's good for

  • OTP and 2FA for side projects. Send login codes from your own app without signing up for an SMS provider.
  • Reverse OTP. Have users text a code to your number instead. Rusty Bee forwards every incoming SMS to your webhook, so you can verify phone ownership without sending anything.
  • Testing SMS flows. Point dev and staging at a real phone and see real delivery, failures and replies, without spending provider credits.
  • Alerts from your homelab. Uptime checks, backups, Home Assistant, n8n: anything that can make an HTTP call can text you.
  • An SMS inbox for your code. Every received message becomes a webhook, so you can build bots, auto-replies or a shared inbox.

How it works

your app ──HTTPS──▶ Rusty Bee server ◀──WebSocket── Android phone ──▶ SMS
                    (API, dashboard,                 (sends and receives
                     webhooks, SQLite)                with your SIM)

The phone keeps one connection open to your server, so it needs no open ports or public IP. Messages are queued on both sides, so nothing is lost if the phone drops offline. Everything is replayed when it reconnects.

Quick start

docker run -d --name rustybee -p 8080:8080 -v rustybee-data:/data \
  -e RUSTYBEE_PUBLIC_URL=https://sms.example.com \
  -e RUSTYBEE_ADMIN_PASSWORD='pick-a-long-password' \
  ghcr.io/joowdx/rustybee:latest
  1. Install the APK from the latest release on an Android 16+ phone.
  2. In the dashboard, open Devices → Pair a device and scan the QR code with the app.
  3. Create an API key and send your first text:
curl https://sms.example.com/api/v1/messages \
  -H "Authorization: Bearer rbk_…" -H 'Content-Type: application/json' \
  -d '{"to":["+15551234567"],"body":"Hello from Rusty Bee 🐝"}'

Why it's nice to run

  • Tiny. An image of about 8 MB and roughly 10–30 MB of RAM. It runs on a Raspberry Pi, NAS or cheap VPS.
  • One binary, one SQLite file. No Redis, no broker and no separate database to babysit.
  • Written in Rust. Memory stays flat and predictable, and a strict message state machine means no double-sends.
  • FOSS by default. The recommended app build has zero Google code. An optional build adds Firebase wake-ups for aggressive phones.
  • Safe to expose. The dashboard login can use a code texted to your own phone, with optional Cloudflare Turnstile, signed webhooks and rate-limited logins.

Learn more

Full setup, the API reference, webhooks, reverse proxies and configuration are in the repo: github.com/joowdx/rustybee

MIT licensed. Started as a fork of textbee and rewritten from scratch in Rust.

Journey

Building a dev tool or hiring developers? Get seen here. Become our Sponsor

Stays free because of
  • Michael William Mesina
  • King Salomon
  • RCastromero()
  • exciar
  • Lewis John Villamor
  • Carlo Dandan
  • John Cyrill Corsanes
  • rodge-dev
  • Denmark Crisostomo
  • Doctor Scoliosis
  • Nico Alumbro
  • Mon Albert Gamil
  • Ruri
  • Lixter Niño D. Dinawanao
  • DXT303
  • <JRJDev>
  • Kaihzan-Nixxo Jamilla
  • Benson
  • euphydev
  • Ian de Jesus
  • JB Benedicto
  • Blairwitchii
  • wacxv
  • Joowd
  • UrAvgProgrammer
  • </Peter> "21st Dev Vinci"
  • John Javier R. Idmilao
  • Michael William Mesina
  • King Salomon
  • RCastromero()
  • exciar
  • Lewis John Villamor
  • Carlo Dandan
  • John Cyrill Corsanes
  • rodge-dev
  • Denmark Crisostomo
  • Doctor Scoliosis
  • Nico Alumbro
  • Mon Albert Gamil
  • Ruri
  • Lixter Niño D. Dinawanao
  • DXT303
  • <JRJDev>
  • Kaihzan-Nixxo Jamilla
  • Benson
  • euphydev
  • Ian de Jesus
  • JB Benedicto
  • Blairwitchii
  • wacxv
  • Joowd
  • UrAvgProgrammer
  • </Peter> "21st Dev Vinci"
  • John Javier R. Idmilao
Join them

Oct 16, 2026, 8:10 AM

Why

I wanted my apps to send login codes and alerts without an SMS provider reading every text. I already had an old Android phone with an unlimited-text SIM.

The problem

I forked textbee, but idle it took:

  • 4 containers, ~280 MB RAM, ~4.8 GB of images

  • a required Firebase project

Too heavy for a Raspberry Pi.

The rewrite

Rebuilt from scratch for one person: a Rust binary with SQLite, a native Kotlin app, and one WebSocket.

  • Containers: 4 → 1

  • Idle RAM: ~280 MB → ~13 MB

  • Image: ~4.8 GB → 8 MB

Good for

  • OTPs and login codes

  • Server, uptime and smart-home alerts

  • Reminders and notifications

  • Receiving replies into your app via webhooks

Private by design

No accounts, no cloud, no Google in the default app. Your texts stay on your phone and your server.

Thanks to the textbee authors. The idea came from them. 🐝

Building a dev tool or hiring developers? Get seen here. Become our Sponsor

Stays free because of
  • Kaihzan-Nixxo Jamilla
  • Carlo Dandan
  • Blairwitchii
  • Denmark Crisostomo
  • John Javier R. Idmilao
  • Lewis John Villamor
  • RCastromero()
  • euphydev
  • Mon Albert Gamil
  • exciar
  • Joowd
  • Ian de Jesus
  • Ruri
  • Nico Alumbro
  • DXT303
  • Benson
  • wacxv
  • Doctor Scoliosis
  • Michael William Mesina
  • King Salomon
  • John Cyrill Corsanes
  • rodge-dev
  • JB Benedicto
  • Lixter Niño D. Dinawanao
  • UrAvgProgrammer
  • </Peter> "21st Dev Vinci"
  • <JRJDev>
  • Kaihzan-Nixxo Jamilla
  • Carlo Dandan
  • Blairwitchii
  • Denmark Crisostomo
  • John Javier R. Idmilao
  • Lewis John Villamor
  • RCastromero()
  • euphydev
  • Mon Albert Gamil
  • exciar
  • Joowd
  • Ian de Jesus
  • Ruri
  • Nico Alumbro
  • DXT303
  • Benson
  • wacxv
  • Doctor Scoliosis
  • Michael William Mesina
  • King Salomon
  • John Cyrill Corsanes
  • rodge-dev
  • JB Benedicto
  • Lixter Niño D. Dinawanao
  • UrAvgProgrammer
  • </Peter> "21st Dev Vinci"
  • <JRJDev>
Join them