Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/jedisct1/dsvpn/llms.txt

Use this file to discover all available pages before exploring further.

DSVPN (Dead Simple VPN) is a minimal, secure VPN that works everywhere TCP works — including restricted networks that only allow port 443. It requires no configuration files, no post-setup, and no firewall rules to configure manually. Run one command on the server and one on the client, and you’re connected.

Installation

Build from source, install via Homebrew, or compile with Zig

Quickstart

Generate a key, start the server, and connect a client in minutes

Command Reference

Full reference for all server and client arguments

Cryptography

Learn about the Charm-based encryption used in DSVPN

Why DSVPN?

Most VPN solutions are either difficult to configure, require post-setup firewall rules, don’t work over TCP, or carry heavy dependencies. DSVPN solves a specific, common problem: routing all traffic through a trusted server when you’re on a restricted or untrusted network.

Works on TCP/443

Bypasses networks that block UDP or non-standard ports

No Config Files

All options are positional arguments — no YAML, no INI, no JSON

Modern Cryptography

Formally verified primitives via the Charm library

~25 KB Binary

No external runtime dependencies, constant memory footprint

Get Started in Three Steps

1

Build DSVPN

Clone the repository and run make to produce a single self-contained binary.
git clone https://github.com/jedisct1/dsvpn.git
cd dsvpn && make
2

Generate a shared key

Create a 32-byte random key file. Copy it to both the server and client.
dd if=/dev/urandom of=vpn.key count=1 bs=32
3

Connect server and client

Start the server, then connect from the client. That’s it.
# On the server
sudo ./dsvpn server vpn.key auto 443

# On the client
sudo ./dsvpn client vpn.key your-server-ip 443
DSVPN must run as root (or with CAP_NET_ADMIN) because it creates a TUN interface and modifies routing tables. Press Ctrl-C to disconnect cleanly.

Build docs developers (and LLMs) love