OUTPOST.
zero-trust platform · self-hosted · wave protocol

Your own VPN.
Your own protocol.
Gets through where others are cut.

Outpost is a Zero-Trust network access platform that runs entirely on your servers: control plane, gateways, clients and our own Wave protocol. Policy decides who gets in, from which device, and to what. The tunnel finds its own way through DPI: TLS on port 443, UDP with rotation, MASQUE.

ZTNA platform Our own Wave protocol Your servers No trackers
214 / 88Mbit/s
Up / down from a phone
Russian mobile carrier, TLS :443 rung, Yandex Internetometer, 2026-09-14
137Mbit/s
Each direction
Laptop → production stand, Wave UDP, 95% delivered, 2026-09-21
3transports
One ladder
TLS :443, UDP with 5-tuple rotation, MASQUE — the client switches on its own
1link
From invite to tunnel
One tap — the app is signed into their account and configured

These are our own measurements on real networks, with date and conditions. We don't publish peak "gigabits per core" until we have measured it the same way.

zero-trust platform

Not a "VPN to the office" — Zero-Trust: access is decided at every step

The tunnel is only transport. The control plane decides who gets in, from which device and to what — and gateways enforce it live, without a restart.

  1. 01 · WHO

    Identity

    Sign-in through your IdP over OIDC, a second factor, users and groups from your directory over SCIM.

  2. 02 · WITH WHAT

    Device

    The client reports disk encryption, screen lock, antivirus, firewall and OS version. That becomes a trust score with your weights and a history.

  3. 03 · TO WHAT

    Policy

    A group ACL per network — full or split tunnel, firewall rules pushed to gateways. Internal apps get their own ZTNA policies, mTLS included.

  4. 04 · ALWAYS

    Checks don't stop at the door

    Revoke a device and its live session on the gateway is cut; the next handshake fails. Every action lands in an audit log with names.

trust score · androidexample
80/ 100 · high
  • Disk encryption +25
  • Antivirus 0 / 20
  • Firewall +15
  • OS version +15
  • MFA +15
  • Screen lock +10
Default weights — change them in the console to fit your policy.
not another wireguard config generator

Censors read the shape of traffic. So Wave starts with shape.

Three ways VPNs get broken today, and what Outpost answers to each.

✗ cut

WireGuard by signature

Fixed handshake sizes and a type byte in every packet — DPI recognises the protocol from the first packet.

→ wave

No magic bytes

Not a single constant field on the wire: the session ID is masked, everything else is ciphertext.

✗ cut

Obfuscation by shape

Structureless random bytes — exactly the class of UDP that mobile carriers drop after a few packets.

→ wave

TLS on 443 leads

The first rung is a single TLS session with an allow-listed SNI. On UDP the client rotates its 5-tuple before the network's packet budget runs out.

✗ missing

Proxies without a platform

L4 proxies get through, but they are a config, not a network: no users, groups, access policy, audit or SSO.

→ outpost

L3 tunnel + control plane

All of the device's traffic, not one app's. Users, groups, ACLs, Zero-Trust and an audit log out of the box.

the wave protocol

A transport ladder: cut one rung and the client takes the next

Wave is our own protocol: a Noise IK handshake, AEAD on data, a masked session ID. Outside, three transports carry it, and the client walks them on its own — no support ticket, no manual config swap.

Pick what the network does — and see how the client answers:

  • › rung STREAM · tls :443 · sni ‹allow-listed domain›
  • ✔ data crossed both ways — rung accepted
  • The fastest path: one TLS session on 443 with the SNI you set for the network in the console. Packets travel in batches, without UDP camouflage.
  • › STREAM · ✗ no data — rung demoted
  • › rung DIRECT · udp · ✔ data both ways
  • A handshake the network let through doesn't count — only data does. If STREAM dies mid-session, the tunnel stays up: the client demotes the rung on the fly.
  • › STREAM ✗ · DIRECT · the network kills a UDP flow after N packets
  • › ⟳ new port and 5-tuple before the budget runs out — the flow outlives the limit
  • We don't guess the budget, we measure it on your network: outpost-wave-cli -dpi-calibrate. The gateway listens on a port range and replies to wherever the data came from.
  • › STREAM ✗ · DIRECT ✗ — the gateway is unreachable directly
  • › rung RELAY · MASQUE CONNECT-UDP through a relay · ✔ accepted
  • The same Wave session in a different envelope: HTTP/3 through a relay on UDP 443, with the relay's key pinned in the client.
TRIES

Rungs in order

STREAM → DIRECT → RELAY. Order and parameters come from the control plane, per network.

VERIFIES

Data, not the handshake

A rung is accepted once traffic has crossed it both ways. A handshake the network let through while dropping data doesn't count.

DEMOTES

A rung that goes silent

If a rung dies mid-session, the client demotes it and moves to the next without dropping the tunnel.

handshake
Noise IK
Mutual key authentication, forward secrecy.
data
ChaCha20-Poly1305
AEAD on every packet, with a replay window.
on the wire
Masked CID
No constant field that marks a packet as Wave.
DoS defence
MAC1/MAC2 + cookie
Under load the gateway demands a cookie before expensive crypto.
gateway cluster

Gateways in any region — one control plane above them all

The control plane and gateways are separate binaries. The control plane scales out, and gateways connect to it on their own: from any region, any host, even from behind NAT.

works

Several control-plane cores

Cores behind a load balancer share PostgreSQL and Redis. Events fan out over Redis Pub/Sub; background jobs run on one core via an advisory lock — no etcd, no ZooKeeper.

works

The gateway dials in

A gateway opens a bidirectional gRPC stream to the control plane — it needs no inbound management ports. A new region is one Ansible role.

works

Changes reach every gateway

Grant or revoke access, change a rule — every gateway gets it without a restart. A deactivated gateway drops its peers in under a second.

works

Health in plain sight

Every gateway's status in the console and on the topology map; session and handshake metrics in Prometheus.

in progress

A pool with no shared state

Wave's session ID comes first in every packet, so a gateway pool can sit behind an L4 load balancer (IPVS-DSR) with no sync between gateways. Built into the protocol; the deployment is ahead.

in progress

Client failover between gateways

The CLI client already walks gateways and accepts the one that carries data. The apps are next.

features

Why teams run Outpost instead of a config on a VPS

onboarding

One link, and the phone is set up

The admin clicks "Invite" on a user's row and sends the link over any messenger. The person taps it — the app opens, signs into their account and pulls their tunnels. No config files, no QR on a monitor, no three-page instructions. For your own phone — sign in with a QR code from the console.

apps

Per-app tunnelling

Choose what goes through the VPN and what goes direct. A rule reaches the tunnel without reconnecting.

diagnostics

DPI calibration

We measure which property a specific network cuts on, instead of guessing.

reliability

Kill switch and auto-reconnect

Tunnel down — traffic doesn't leak around the VPN. Network changed — the client reconnects on its own. These are real modes: the toggle in settings reaches the platform, not just the screen.

transparency

Counters come from the tunnel

Session speed and volume on the home screen are read from the data plane, not drawn. In-app diagnostics measure the packet size on your network and export a report without adb.

For administrators

organisations

Multi-tenant

Organisations, networks, gateways and devices isolated at the query level.

audit

Audit log with names

Who did what to what — people and resources, not hex strings. CSV export.

network

Topology map

Gateways and every device on one map: zoom, pan, full screen.

branches

Site-to-site

Offices and sites in one private network, plus smart routes.

protocols

Kernel WireGuard

For uncensored networks — netlink, no userspace overhead.

console

Web console

Embedded in the binary, RU and EN, no trackers.

observability

Prometheus

Sessions, bytes, handshakes and protocol errors on /metrics.

deploy

Docker · Helm · Ansible

A stand in one command, production in one Ansible role.

who it's for

Three kinds of buyer — one set of binaries

companies with branches and remote staff

Staff access from any network — under control

People in different countries and networks; the VPN gets cut, or nobody revokes it when someone leaves.

  • SSO through your IdP, SCIM and MFA
  • ZTNA: access by device posture
  • Audit log with names and CSV export
  • Site-to-site for offices
Request a pilot →
teams and individuals

Your own VPN instead of someone else's service

A commercial VPN means someone else's logs, someone else's servers, and blocking by IP list.

  • Your server, your keys, logs only on your side
  • Self-hosted is free, no device limit
  • Clients for Android and desktop
  • For family — one link instead of instructions
Telegram @freeoutpostvpn →
comparison

Where Outpost is already ahead — and, honestly, where it isn't

Compared with what people usually run themselves: plain WireGuard, AmneziaWG and VLESS+REALITY.

PropertyOutpostVLESS+REALITYAmneziaWGWireGuard
All device traffic (L3 tunnel)✓✗L4 proxy✓✓
Passes as TLS on 443 with an allow-listed SNI✓✓✗✗
Several transports with automatic failover✓data-verified~in client config✗✗
5-tuple rotation within the network's budget✓✗✗✗
Users, groups, ACLs, audit✓~third-party panels~✗
SSO (OIDC), SCIM, MFA✓✗✗✗
Active probes see a real cover site~in progress✓✗✗

Ratings are based on each project's public documentation and our audit of 2026-09-14. We give the active-probing row to REALITY: our native cover-site camouflage is on a branch, not in a release.

pilot

A 7-day pilot: measurements on your networks, not a slide deck

Don't take the table's word for it — test on your own carriers. In a week you have numbers next to what you use today.

  1. Day 1

    Stand

    We deploy the control plane and a gateway in the region you need — on your server or ours.

  2. Days 2–3

    Calibration

    We measure your carriers: what gets cut, after how many packets, and on which property. The ladder is tuned to that.

  3. Days 4–6

    Your people

    Devices join with one link, and we measure speed next to your current solution.

  4. Day 7

    Report and decision

    Numbers for every network and a clear next step: Self-hosted, Managed or Enterprise.

status

What works today, and what is on its way

We don't sell what isn't switched on for users. Here is the line as of today.

Works

For live users on the production stand.

  • Wave ladder: TLS :443, UDP with rotation, MASQUE
  • Kernel WireGuard
  • Android client: Wave and WireGuard
  • One-link onboarding and QR sign-in
  • Per-app tunnelling, kill switch
  • ZTNA: posture, trust score, policies, live revocation
  • Several control-plane cores, gateways in any region
  • Multi-tenant, SSO, MFA, SCIM, audit
  • Web console in RU/EN, topology map

Built, switching on

Code and tests are in the repository; off in the product for now.

  • Post-quantum: hybrid X25519 + ML-KEM-768 (FIPS 203), Go ↔ Rust vectors match byte for byte
  • DAITA: padding and timing against traffic analysis
  • Wave data plane in Rust: Tokio, AWS-LC

In progress

Built in the open, measured before release.

  • REALITY-class: a prober sees a real cover site
  • iOS client with Wave
  • Download speed on the mobile TLS rung
  • Automatic phone failover to a standby gateway
  • Gateway pool behind an L4 load balancer
  • Automatic device blocking by trust score
  • AF_XDP fast path on the gateway
editions

Open core. Pay for what a licence can't give you

Platform features are not split across tiers: self-hosted gets everything. We charge for hosting, SLAs, support, and the right to embed our data plane in a product you sell.

community

Self-hosted

Freeno device limit
  • Control plane, gateway, web console, clients
  • WireGuard, multi-tenant, ZTNA, audit
  • Wave for your own and internal corporate use
  • Updates on par with paid plans
How to deploy →
enterprise

Enterprise

On requestscale and customisation
  • Commercial licence for the Wave data plane and SDK
  • White-label clients under your brand
  • Air-gapped install, compliance documentation
  • 24/7 on-call and a dedicated architect
Request terms
faq

What people usually ask before a pilot

Do I need my own server?

For Self-hosted, yes: an ordinary VPS with Docker will do. A stand comes up in one command, production in one Ansible role. With Managed, we run the servers.

What if the gateway's IP gets blocked?

A gateway is a separate server that dials the control plane over gRPC, even from behind NAT, so a new one comes up in one Ansible role. The ladder makes it less likely to come to that: STREAM on 443 with an allow-listed SNI holds where UDP gets cut. Automatic phone failover to a standby gateway is in progress.

How is this better than Amnezia, Outline or an Xray panel?

Those give you a tunnel or a proxy. Outpost is the whole network: an L3 tunnel, a three-transport ladder with data verification, users, groups, SSO, ZTNA and audit in one control plane. Where we still trail is stated plainly in the comparison.

Which devices does it run on?

Android — Wave and WireGuard, with live users. Desktop clients for macOS, Windows and Linux. iOS is in progress.

Where do data and logs live?

With you: PostgreSQL on your server is the single source of truth. No mandatory telemetry leaves it. The audit log stays on your side and exports to CSV.

How much does it cost?

Self-hosted is free, with no device limit. Managed and Enterprise are priced to your load: devices, regions, SLA. Usually after the pilot, once the numbers are on the table.

Can it carry our brand?

Yes: white-label clients and a commercial licence for the Wave data plane are part of Enterprise.

Can we see the code?

The repository goes public at release candidate. Before that — under NDA, for a security audit or a licence-cleanliness review.

under the hood

A stack your engineer can read in an evening

control plane

Go · gRPC · pgx/v5

One binary: API, gRPC hub and web console.

data plane

Go + Rust

The Rust implementation of Wave on Tokio and AWS-LC.

storage

PostgreSQL 17 + Redis 7

PostgreSQL is the single source of truth.

clients

Flutter

Android, macOS, Windows, Linux — one codebase.

Code access

The repository goes public at release candidate. Early access, a code audit or a licence-cleanliness review — under NDA, just write to us.

contact

Tell us where it gets cut — we'll show how to get through

Provider, company or your own team — send us the region, carriers, number of devices and platforms. We'll reply with a pilot plan. NDA on request. Write in English or Russian.