AirDrop for Localhost. Pairing-grade P2P tunneling for ports + config.
Bring a teammate's service to your localhost — not a public URL.
Highlights
- ⚡ Low-latency QUIC tunnel (libp2p)
- 🔒 End-to-end encrypted by default (Noise + ChaCha20-Poly1305)
- 🧩 Local-to-local port mapping (
their localhost→your localhost) - 🧪 EnvVault to sync selected env/config
- 🧭 P2P-first discovery + NAT traversal (where possible)
Pairing on real systems is always the same mess:
- "Push to staging so I can see it" (slow)
- "Share your screen" (pain)
- "Paste your
.envin Slack" (please don't)
You don't want a public URL — you want your teammate's service to behave like it's running locally.
Rift maps their localhost into yours.
Your machine Teammate's machine
localhost:3000 ◄── E2E-encrypted ─► localhost:3000
No public endpoints. No deploy. No ceremony.
Just "connect" → debug immediately.
- ✅ Explicit approval: every inbound session requires a host Y/N prompt.
- 🔐 Encrypted by default: tunnel traffic is wrapped in Noise over QUIC (ChaCha20-Poly1305).
- 🕳️ P2P-first: data flows peer-to-peer when possible; if relays are used for connectivity, payloads remain end-to-end encrypted.
- 🧾 Secrets are opt-in: config sharing is explicit (you choose what to send). Rift never silently uploads secrets anywhere.
Threat model: built for pairing/debugging with teammates you trust — not for anonymous public access.
brew install n33levo/rift/riftOther installation methods
From source:
git clone https://github.com/n33levo/rift
cd rift && cargo build --release# On the machine running the service:
rift share 3000
# On your machine:
rift connect rift://12D3KooW.../3000Now their service is reachable on your http://localhost:3000.
# Host
rift share 3000 --secrets .env.rift
# Client
rift connect rift://.../3000 --request-secretsStop doing "set these 47 env vars" archaeology.
- 🔧 Backend ↔ Frontend pairing (no staging deploy)
- 🗄️ Databases on localhost (Postgres/Redis/Mongo)
- 🧠 GPU inference as localhost (model server on a GPU box → your laptop)
- 📈 Dashboards & demos (Streamlit/Gradio) without hosting
- 🔭 Observability ports (TensorBoard, metrics UIs)
- 🧰 Internal tooling behind NAT
👉 More: docs/USE_CASES.md
Discovery → Encrypted QUIC session → Host approval → TCP bridge (local ↔ local)
Built on libp2p:
- mDNS discovery on LAN
- QUIC transport + Noise encryption
- NAT traversal (DCUtR) where possible
Rift is not a public hosting platform.
If you need a public URL for customers/PMs, use ngrok / Cloudflare Tunnel / Vercel previews.
Use Rift when you want pairing-grade, local-to-local debugging with teammates.
- Usage Guide — CLI reference, examples
- Use Cases — Real-world scenarios
- Security — Threat model, best practices
- Architecture — How it's built
MIT License
Built with ⚡ by developers tired of deploying to staging
⭐ Give it a star if you've ever said "works on my machine" ⭐