Small-batch Rust · proxy kernel

Always lands
on its feet.

meow-rs is a high-performance, rule-based tunneling proxy kernel in Rust — routing, transparent proxy, DNS snooping, and a built-in dashboard, packed into one ~6 MiB static binary.

$ cargo install meow-app
or grab a prebuilt binary →
Rules in · packets out · over every wall
What's inside the tin

Guaranteed Analysis,
not vibes.

Every claim on this page is a measured fact, not a tagline. meow-rs is engineered to a quantitative footprint bar — binary size, idle memory, and hot-path allocations are all under budget, every release.

  • Zero allocations on the relay setup path — buffers live on the async stack frame, not the heap.
  • One static binary. No runtime, no sidecar, no telemetry. Drop it on a box and run.
  • 12 focused crates behind clean trait contracts — swap a protocol or a rule type without touching the core.
MEOW-RSWILD-CAUGHT ED.

Guaranteed Analysis

Serving size1 daemon (-f config.yaml)
Servings per hostas many sockets as you've got
Amount per daemon% DV*
Net wt. — stripped binary~6 MiBfits anywhere
Idle memory (typ.)~9 MBlean
Per active connection~35 KBsteady
Allocations, hot path00%
Workspace crates12
Proxy protocols10
Telemetry / phone-home0none

Ingredients: Rust, Tokio, rustls, hickory-dns, Axum, tower — and a great deal of open-source goodness. Contains: network sockets. Free from: garbage collectors, telemetry, vendor lock-in.

* Percent Daily Value is a joke. Measured on aarch64: stripped static binary ~6 MiB, idle RSS ~9 MB, ~35 KB per connection at steady state. Your mileage varies with traffic. GPL-3.0.

One config feeds it all

One YAML.
Every protocol.

Bring your existing Clash / mihomo config — meow-rs speaks the same dialect. Point it at a subscription or write rules by hand. It builds the routing table, opens the listeners, and serves a dashboard at /ui.

config.yaml
mixed-port: 7890
external-controller: 127.0.0.1:9090

proxies:
  - { name: hk, type: trojan, server: ex.com, port: 443, password: "•••" }

proxy-groups:
  - { name: Proxy, type: url-test, proxies: [hk] }

rules:
  - GEOIP,CN,DIRECT      # stay home if it's local
  - MATCH,Proxy         # everything else clears the wall
Routes anything

Pour it into any network.

A full proxy kernel, not a toy — protocols, transports, a rule engine, and the plumbing to run it as a real gateway.

🧭

Proxy protocols

Shadowsocks, Trojan, VLESS (XTLS-Vision), VMess, Hysteria2, Snell, HTTP & SOCKS5 outbounds — TCP and UDP relay.

📋

Rule engine

Domain, IP-CIDR, GeoIP, port, process, and regex rules with AND/OR/NOT logic. First match wins.

🛡️

Transparent proxy

Kernel-level interception via nftables (Linux) or pf (macOS). SNI extraction, DNS snooping, loop-safe via SO_MARK.

🔭

DNS & snooping

Built-in UDP resolver with caching, FakeIP, and an IP→domain reverse table to recover hostnames for transparent flows.

🧶

Proxy groups

Selector, URL-Test, Fallback, LoadBalance, and Relay groups with health checks. Dead nodes get skipped — it lands on its feet.

🔒

ECH & uTLS

Encrypted Client Hello via BoringSSL, DNS-sourced ECH configs, and uTLS fingerprints for Chrome, Firefox, Safari, iOS & more.

🖥️

Dashboard & REST API

Axum-powered API plus a built-in web UI at /ui — switch proxies, edit rules, watch live traffic. Mount your own dashboard too.

📡

Subscriptions

Import Clash YAML subscriptions, cache to disk for instant startup, and refresh in the background on a schedule.

Under the lid

How a packet finds its way out.

ARCHITECTURElisteners → tunnel → rules → adapters → remote
Listeners HTTP · SOCKS5 · Mixed · TProxy Tunnel (routing engine) DNS Resolver Snooping · Cache · FakeIP Rule Matching Engine Domain · IP-CIDR · GeoIP · Process · Logic Proxy Adapters & Groups SS · Trojan · VLESS · Direct · Reject | Selector · URLTest · Fallback Remote Health Check Periodic probes REST API + Web UI Axum · WebSocket logs · Dashboard Subscription Refresh Auto-update · Clash YAML Transport Layers TLS · WS · gRPC · H2 · ECH DNS Server UDP :1053
One binary · every shelf

Built for where you run.

🐧
Linux x86_64gnu / musl static
🐧
Linux aarch64Pi · routers · cloud
🍎
macOS aarch64Apple silicon · pf tproxy
Windows x86_64amd64
Twelve clean cuts

A workspace, broken down.

CratePurpose
meow-commonCore traits & types — ProxyAdapter, Rule, Metadata, ProxyHealth
meow-trieDomain trie for fast pattern matching
meow-transportTLS (rustls + BoringSSL ECH), WebSocket, gRPC, H2, HTTPUpgrade
meow-proxyProtocols (SS, Trojan, VLESS …) & groups (Selector, URLTest, Fallback, Relay)
meow-rulesRule matching engine & parser with logic composition
meow-dnsResolver, cache, snooping (IP→domain), FakeIP, UDP server
meow-tunnelCore routing engine, TCP/UDP relay, connection statistics
meow-listenerInbound handlers — Mixed / HTTP / SOCKS5 / TProxy
meow-configYAML parsing, subscription fetcher, proxy providers
meow-apiREST API (Axum) + embedded web dashboard
meow-appCLI entry point — health checks, subscription refresh, geodata
meow-benchStandalone benchmark binary (throughput, latency, DNS, memory)
Serving instructions

From clone to connected.

Build

Requires Rust 1.89+.

cargo build --release

Configure

Copy the example and add your servers.

cp config.example.yaml \
   config.yaml

Run

Start it, then open the dashboard.

./target/release/meow \
  -f config.yaml
# → 127.0.0.1:9090/ui

Connect

Point your tools at the proxy.

export https_proxy=\
  http://127.0.0.1:7890
curl https://ipinfo.io

Fresh batch ready.

Crack open the tin, point it at your servers, and watch every connection land on the right side of the wall.