meridian is a free, open source networking & connectivity project written in Python and released under MIT. It has 500 GitHub stars, 27 forks and 15 open issues, and was last pushed 7 hours ago. On this registry it ranks #84 of 84 tracked projects in Networking & Connectivity, with 5 head-to-head comparisons available.

What is meridian?

Meridian is a Python command-line tool that turns a fresh Debian or Ubuntu VPS into a hardened, self-hosted VPN server with a single command, built for people who want to run and share their own censorship-resistant connections without becoming full-time server administrators.

What it is

Meridian lives in the Python packaging ecosystem and ships as the meridian-vpn package, alongside a shell installer hosted at getmeridian.org. It is an MIT-licensed CLI that runs on the operator's own macOS or Linux machine rather than on the server, and it drives a remote VPS over SSH. One meridian deploy run installs VLESS+Reality and XHTTP on TCP 443, Hysteria2 on UDP 443 with salamander, a camouflage front end, a control service, a self-hosted web panel, and a per-person connection page. The project is tagged around anti-censorship, censorship circumvention, self-hosted VPNs, and the specific protocols it speaks.

The problem it addresses is stated plainly in its own README: a VPN that connects can still give itself away through an open admin port, a self-signed certificate, or a container that skips the firewall. Meridian therefore sets up every layer on a fresh Debian or Ubuntu VPS and then tests the result with real traffic before handing over links. It explicitly replaces Docker-based deployment stacks and third-party panels with its own control service, keeping the server and routing topology under CLI review, and it eliminates the domain requirement by obtaining a Let's Encrypt certificate for the IP address itself.

Key capabilities

  • Deploys VLESS+Reality and XHTTP on TCP 443 and Hysteria2 on UDP 443 with salamander; every subscription lists all of them with Chrome and Firefox TLS fingerprints, and capable apps switch between them on their own.
  • Camouflages traffic with nginx routing TCP 443 by SNI without decrypting, so a probe without the key reaches a real website and receives its genuine certificate, with the target chosen from the server's own network.
  • Hardens the host with key-only SSH, fail2ban, BBR, and UFW opening only SSH and 443, plus a Let's Encrypt certificate for the IP so no domain is needed.
  • Provides a web panel via meridian panel on a secret HTTPS path behind a password and optional authenticator code, with a strict CSP and no external requests, for adding people, sharing links and QR codes, setting expiry dates, traffic limits and device caps, reissuing links, cutting off active sessions, and issuing scoped API tokens.
  • Serves a connection page at each person's subscription URL in English, Russian, Persian, and Chinese, showing recommended apps, one-tap import, a QR code, account status, and traffic, while delivering native Xray JSON, Mihomo, sing-box, or Base64 profiles to VPN apps.
  • Verifies delivery with meridian test, which pushes real traffic through the issued subscription.
  • Stores no client IPs or connection logs, keeps device and daily history tracking opt-in and off by default, and pulls an encrypted snapshot sealed to your device keys and a recovery key after every change.

Who uses it and how

  • Individuals running a personal server on one VPS who need to hand access to a few people without teaching them client configuration: meridian deploy 198.51.100.10 --client-name alice, then send Alice her connection page link, where she installs the recommended app and taps once.
  • Operators facing active blocking, who respond by adding a relay, turning on domain mode, or moving an exit, with apps picking up the change on their next refresh.
  • Small teams administering a group from the panel, using expiry dates, traffic limits, device caps, private notes and tags, and session cutoffs instead of editing configuration files per person.
  • Multi-server operators who keep server and routing topology under CLI review while each server's agent dials out to the control service, so nodes open no extra ports.

Getting started

Install on macOS or Linux with curl -sSf https://getmeridian.org/install.sh | bash, or from PyPI with uv tool install meridian-vpn (or pipx install meridian-vpn), then run meridian deploy against a fresh Debian or Ubuntu VPS reachable over SSH with a key. Adding --prerelease allow selects a beta version when the newest release is one.

How it compares

The facts name no paid products that Meridian replaces; the comparable tools they do reference are client-side, since Meridian emits subscriptions in Xray JSON, Mihomo, sing-box, and Base64 formats for those existing apps to consume rather than competing with them. Its stated contrast is with Docker-based deployment and third-party panels, neither of which it uses, in favour of its own control service and web panel under an MIT licence.

When to use it — and when not to

A self-hoster must supply a fresh Debian or Ubuntu VPS with key-based SSH and root or passwordless sudo, run the CLI from a macOS or Linux machine (WSL on Windows), and keep the device keys and recovery key that seal the encrypted snapshots. Those running other distributions, or expecting a server-side daemon that configures itself without a local operator machine, should look elsewhere. It is also a small project by adoption, at roughly 500 stars, 27 forks, and 15 open issues, so it suits operators comfortable with a young codebase and a CLI-first workflow.

project readme (upstream, from github) — read inline

Meridian

Meridian

CI PyPI License: MIT GitHub stars

Deploy it right. Share it easily.
One command turns a fresh VPS into a hardened self-hosted VPN server, with a built-in web panel and a connection page for each person.

meridian deploy sets up the firewall, SSH, nginx SNI routing on port 443, Xray (Reality, XHTTP, Hysteria2), Meridian's control service and web panel, and a Let's Encrypt IP certificate, then gives your people a connection page and subscription URL

A VPN that connects can still give itself away: an open admin port, a self-signed certificate, a container that skips the firewall. Meridian sets up every layer on a fresh Debian or Ubuntu VPS, tests the server with real traffic, and gives you two interfaces: a connection page for each person who connects and a web panel to manage people and servers from any browser. When an address gets blocked, add a relay, turn on domain mode, or move an exit; apps pick up the change on their next refresh.

Video: a full meridian setup, start to finish
Watch a full meridian setup, start to finish (3½ min) · download the MP4 · по-русски

Web panel and connection pages

Each person gets a connection page at their subscription URL; you get a self-hosted web panel (owner console) on the control server. Both demos below run in your browser on invented data: click around, nothing is real and nothing is sent anywhere.

A person's connection page on a phone: pick a platform and app, add the connection with one tap, then connect The web panel's People list: each person's expiry, last time online, status, and traffic against their limit
The account panel on a connection page: status, traffic this period, and days left The web panel's Servers screen: each exit's health, versions, and monthly traffic allowance

Try the connection page · Try the web panel

  • Web panel (meridian panel): runs on the control server behind a secret HTTPS path, protected by a password and optional authenticator code, with a strict CSP and no external requests. Add people, share links and QR codes, set expiry dates, traffic limits, and device caps, keep private notes and tags, reissue links, remove access, or cut off active sessions. Check server health, traffic, and monthly allowances, set the default page language and a notice for everyone, issue scoped API tokens, and choose privacy levels. Server and routing topology stays reviewed in the CLI.
  • Connection page: served at every person's subscription URL in English, Russian, Persian, and Chinese. In a browser it shows recommended apps for their device, one-tap import, a QR code, account status, traffic, and plain help; in a VPN app the same URL delivers native profiles (Xray JSON, Mihomo, sing-box, or Base64).

Install

macOS or Linux (on Windows, use WSL):

curl -sSf https://getmeridian.org/install.sh | bash

Or from PyPI: uv tool install meridian-vpn (or pipx install meridian-vpn). When the newest release is a beta, add --prerelease allow (pipx: --pip-args=--pre) to get the version this page describes.

You need a fresh Debian or Ubuntu VPS you can reach over SSH with a key, as root or a user with passwordless sudo. Meridian runs on your computer, not on the server.

Quick start

meridian deploy 198.51.100.10 --client-name alice

When it prints "Done", send Alice the connection page link. They open it, install the recommended app, and tap once to connect. Then:

meridian panel                     # web panel URL and a one-time setup link
meridian client add bob carol      # or add people from the CLI
meridian client show bob           # print their link and status
meridian test                      # real traffic through the delivered subscription

Re-run deploy at any time: keys, paths, and clients are kept. meridian setup asks the same questions as a guided wizard.

What one deploy sets up

  • Methods: VLESS+Reality and XHTTP on TCP 443, Hysteria2 on UDP 443 with salamander. Every subscription lists all of them (with Chrome and Firefox TLS fingerprints), and capable apps switch on their own.
  • Camouflage: nginx routes TCP 443 by SNI without decrypting. A probe without the key reaches a real website and gets its genuine certificate. Deploy picks the target from the server's own network.
  • Hardening: key-only SSH, fail2ban, BBR, UFW opening only SSH and 443, and a Let's Encrypt certificate for the IP. No domain needed.
  • Control service and web panel: Meridian's own, on a secret HTTPS path: users, subscriptions, and the web panel. Shared links never reveal the path, and each server's agent dials out to it, so nodes open no extra ports. No Docker, no third-party panel.
  • Privacy and backups: no client IPs or connection logs are stored; device and daily history tracking are opt-in and off by default. After every change your machine pulls an encrypted snapshot sealed to your device keys and a recovery key. If the control server is lost or seized, meridian restore rebuilds it on another server.

Options worth knowing:

meridian deploy 198.51.100.10 --domain vpn.example.com    # XHTTP + WSS through Cloudflare when the IP is blocked
meridian deploy 198.51.100.10 --display-name "Family VPN" # label on every connection page
meridian deploy 198.51.100.10 --no-geo-block              # allow Russian sites through the VPN (blocked by default)
meridian deploy local                                     # run on the server itself

Grow the fleet

meridian node add 198.51.100.20 --name germany        # another exit
meridian relay add 203.0.113.10 --exit 198.51.100.10  # domestic entry point (Realm TCP forwarder)
meridian route add germany --preset ai --via warp     # route chosen destinations through WARP
meridian node replace EXIT_ID 198.51.100.30           # move a blocked exit, keys and clients included
meridian setup                                        # any shape: relay chains, routing gateways

Every change edits one topology in ~/.config/meridian/cluster.yml. meridian plan shows what would change; meridian apply applies exactly that, with checkpoints, so an interrupted run resumes. Back up that folder and the recovery key deploy shows once: together they bring the fleet back on a new machine.

When something breaks

meridian test 198.51.100.10           # which step fails: network, TLS, subscription, or tunnel
meridian test 198.51.100.10 --probe   # the server as a censor sees it (run from inside the censored network)
meridian check                        # server health over SSH
meridian doctor --ai                  # redacted report, ready to paste into an AI chat

IP blocked? Follow the recovery guide. Users can run "Check my connection" on their own page.

Commands

deploy, setup Set up one server, or any fleet with the wizard
panel Print the web panel address and a one-time owner setup or reset link
client add|show|list|set|extend|reset-traffic|devices|reissue|enable|disable|remove The people who connect
node add|list|restart|replace|sni|remove, relay add|list|sni|remove Exits and relays
route add|list|remove, server add|list|set|remove Route chosen sites; save servers, allowances, and payment dates
plan, apply, context list|use|rename|remove Review and apply the topology; switch between fleets
test, probe, check, scan, doctor, logs Verify traffic, probe camouflage, inspect health, scan SNI targets, view redacted logs
fleet status|inventory|history|events|usage|routing|contact|notice|language|upgrade|export|import Fleet overview, revisions, client routing, notices, language, upgrades
privacy, backup, restore, migrate Choose what is stored, manage snapshots and the recovery key, rebuild a lost control server, move a Remnawave fleet
teardown, update, api, help agents Remove Meridian from a server, update the CLI, inspect JSON contracts, explain Meridian to an AI agent

Every command takes --help; most take --json. Full list: CLI reference.

Client apps

App Platforms
Happ iOS, Android, Windows, macOS, Linux
FlClashX Android, Windows, macOS, Linux
Clash Mi iOS, Android, Windows, macOS, Linux
Throne Windows, macOS, Linux

The connection page recommends one for each device and links more.

AI agents

meridian help agents

prints a guide for Claude Code, Codex, Cursor, and other agents: how Meridian works and how to drive it safely (--yes, --json envelopes, exit codes, meridian api contracts). Every docs page is also served as Markdown, indexed at getmeridian.org/llms.txt.

More

Frequently asked questions

Is meridian free to use?

meridian is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does meridian do?

One command deploys a hardened self-hosted VPN: VLESS+Reality, XHTTP and Hysteria2 on port 443, a built-in web panel, and a connection page for each person.

What is meridian written in?

meridian is primarily written in Python. Its source is publicly available at https://github.com/getmeridian/meridian, and it has 500 GitHub stars.