Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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).

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

Metadata

Release files for meridian-vpn 4.0.0b10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for meridian-vpn 4.0.0b10
File Size Uploaded Provenance Actions
meridian_vpn-4.0.0b10.tar.gz 3.8 MB With provenance Details for meridian_vpn-4.0.0b10.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for meridian-vpn 4.0.0b10
File Interpreter ABI Platform Actions
meridian_vpn-4.0.0b10-py3-none-any.whl Python 3 none any Details for meridian_vpn-4.0.0b10-py3-none-any.whl

Total release size: 7.8 MB

Release files / meridian_vpn-4.0.0b10.tar.gz

Download URL meridian_vpn-4.0.0b10.tar.gz
Size 3.8 MB
Tags Source
SHA-256 checksum
How to use checksums
46134b0a0df794478a49138299b3dd0c5b5629885cd6e778373c4e75c5fe4be3
BLAKE2b-256 checksum
How to use checksums
1ff69bd6f2c4b29a1256af1e30dd601e2fde2ec7a159a0e3a8dc3efee9e3fb9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Release files / meridian_vpn-4.0.0b10-py3-none-any.whl

Download URL meridian_vpn-4.0.0b10-py3-none-any.whl
Size 4.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
1d95897979a8efe5ed2f88439eae05d5282f4ff2d4267b3b87fe229d15e2dc25
BLAKE2b-256 checksum
How to use checksums
a7b0a4dc67c77d27771a1e8bc24887eecc5a1a0f43a6cdf821d65c9c2c9e4a89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Security for meridian-vpn 4.0.0b10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for meridian_vpn-4.0.0b10.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page