Skip to content

Repository files navigation

Runewarp

Public ingress. Private by design.

Runewarp is an ingress tunneling platform for securely exposing local services over outbound QUIC connections. Publish them without opening inbound ports at the Client or exposing its public IP, while preserving end-to-end TLS by default in passthrough mode.

Install

CLI from crates.io:

cargo install runewarp

Container image from Docker Hub:

docker pull runewarp/runewarp

Get started

Choose the path that matches what you want to do:

Goals

  • TLS passthrough ingress tunneling — Server routes traffic by SNI without terminating TLS
  • Privacy-respecting by design — Server never sees HTTP headers or application plaintext
  • Traverse NAT and firewalls — Client uses outbound QUIC, so no port forwarding or public IP is required
  • Self-hostable and operator-controlled — single Rust binary for both Client and Server
  • Remain operationally simple — TOML config, a handful of CLI commands, and no companion daemon or database

Non-goals

  • Server TLS termination — Server never decrypts or re-encrypts Visitor traffic
  • HTTP-layer routing — no path-based routing, header inspection, or Layer 7 awareness of any kind

Compatibility

Runewarp is pre-1.0. Patch releases aim to stay low-risk, but minor releases may include breaking CLI or configuration changes.

Architecture

flowchart TD
    V[Visitor]
    C["Client instance"]
    B["Local backend"]

    subgraph S["Server"]
        direction TB
        P["Public listener<br/>TCP 443 by default / Visitor TLS"]
        R["SNI router<br/>select Tunnel by Public hostname"]
        U["Tunnel listener<br/>UDP 443 by default / QUIC/TLS"]
        T["Active Tunnel connection"]

        P -->|"read ClientHello + SNI"| R
        U -->|"accept and authenticate"| T
        R -->|"open stream"| T
    end

    V -->|"Visitor TLS for a Public hostname"| P
    C -->|"establish QUIC/TLS"| U
    T -->|"deliver encrypted stream"| C
    C -->|"select Service and proxy"| B
Loading

Visitors connect to the public server over TLS, and each client instance keeps one or more long-lived QUIC tunnel connections back to one or more configured server addresses. The server routes by SNI and forwards the encrypted stream to the selected client, which then proxies it to the local backend. A service can opt into terminate mode when the client, not the backend, should terminate TLS. See docs/architecture.md for the detailed transport view.

Comparison

How Runewarp compares to other tunnel tools:

A managed gateway focused on developer workflows, edge routing, and traffic policy.

  • Runewarp Server only operates on TLS: no edge traffic policy, header inspection, or request transformation on the public Server.
  • ngrok edge-side workflows: managed policy, routing, and developer ergonomics are part of the platform.

A managed connector into Cloudflare's edge, with routing and platform features built around that edge.

  • Runewarp is fully operator-run: open source on both the Client and Server, self-hosted public ingress.
  • Cloudflare fits managed-edge workflows: CDN, WAF, Access, DDoS protection, and other platform features come with the service.

A tailnet-based way to publish a local service publicly without exposing the device IP.

  • Runewarp works with custom domains: explicit Server-side hostname ownership and no dependency on a tailnet, the Tailscale daemon, or *.ts.net names.
  • Funnel for existing Tailscale users: the relay stays out of plaintext and the workflow is convenient when you already use that ecosystem.

A simple, open-source client/server tunneling tool whose config model and simple client/server architecture helped inspire Runewarp.

  • Runewarp keeps routing explicit: one QUIC/TLS Tunnel connection per effective Server address and Server-authoritative routing by Public hostname. Configuration may be static or delivered over a separate Managed session to Control; Visitor traffic never shares that session.
  • rathole supports more protocols today: service tokens, UDP forwarding, and more transport options.

Documentation

Start here

Operators

  • Configuration reference — config shapes, keys, defaults, and validation
  • Architecture — system structure, data paths, and current limits
  • Security — trust boundaries, visibility, certificates, and deployment trade-offs

Protocol specifications

Contributors and maintainers

Roadmap

  • Roadmap — forward-looking themes and live work

License

Licensed under Apache License, Version 2.0 (LICENSE).

About

Public ingress. Private by design.

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages