raba is a self-hosted, open-source alternative to ngrok, Cloudflare Tunnel, and frp — expose a local HTTP, TCP, or UDP server to the internet from a single Docker image you control, with a web dashboard, multi-tenant teams, and automated TLS.
raba is Hausa for "to divide, separate, share, or distribute." Both senses map onto what
this tool actually does: the "share/distribute" sense is the pitch (share your localhost
with the world); the "divide/separate" sense is the exact problem being solved (bridging a
machine that's cut off from the public internet by NAT/firewall). The logo's arch, bridging
two connection points, is a direct visual read of that same idea — see BRAND.md
for the full brand guide.
- HTTP, TCP, and UDP tunneling — expose a local server on any of the three, from a single CLI command.
- Self-hosted, single Docker image — your own server, your own domain, no third-party relay.
- Web dashboard — projects, request logs, traffic stats, team management, all served by the same binary.
- Multi-tenancy — teams, per-team roles, and per-team custom domains with automated DNS-01 TLS issuance/renewal (Let's Encrypt via Cloudflare DNS today).
- Byte-level forwarding — the server never parses HTTP request/response bodies; it forwards raw bytes. Nothing you tunnel is inspected or logged beyond connection metadata.
curl -fsSL https://raw.githubusercontent.com/codad5/raba/master/install-server.sh | bash
Interactive: prompts for your domain, optional automated TLS (Let's Encrypt via Cloudflare
DNS-01), and Docker vs. a direct systemd install — generates JWT_SECRET for you. See
docs-site for the full walkthrough, or
docker/.env.example to configure by hand.
curl -fsSL https://raw.githubusercontent.com/codad5/raba/master/install.sh | sh
Windows: irm https://raw.githubusercontent.com/codad5/raba/master/install.ps1 | iex in PowerShell.
raba login --server https://your-domain.example
raba http 3000
See raba --help for the full command list (tcp, udp, connect, team, stats,
update, ...).
npm install
npm run dev
Runs the server (auto-restarting on change) and the dashboard dev server together.
Dashboard: http://localhost:5173. Server: https://127.0.0.1:7222 (self-signed dev cert
— your browser will warn once, that's expected locally).
Under active development, pre-release. Every numbered build phase — core protocol, server,
dashboard, multi-tenancy, dynamic TLS/domain automation, hardening (rate limiting, logging,
graceful shutdown, traffic stats), and CI/CD (test+clippy on every PR, Docker image +
cross-platform CLI binaries published on tag) — is done. linux-arm64 release binaries
aren't published yet (needs a Docker-based cross-compile toolchain, deferred rather than
shipped untested).
Issues and PRs welcome — open one on GitHub. No formal contributing guide yet; for anything nontrivial, opening an issue first to discuss the approach is appreciated.
Functional Source License, Version 1.1, Apache 2.0 Future License — free to use, copy, modify, and self-host, including commercially, for any purpose other than offering it (or a substitute for it) as a competing hosted/managed service. Each version automatically becomes available under Apache License 2.0 two years after its release.