selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

meridian logo

Self-host meridian

v3.17.3

CLI tool to deploy hardened VLESS+Reality proxy servers

BetaOpen SourceMIT
Updated8 hours ago
LanguagePython
Setup difficultyModerate
Stars
499
Ports
443 (nginx stream (SNI router) for VLESS+Reality and XHTTP on TCP), 80 (nginx for ACME challenges (Let's Encrypt))
Install with Linux
Connection page with QR codes and app download links that users receive

What is meridian?

Meridian is a command-line utility that turns a clean Debian or Ubuntu VPS into a hardened, censorship-resistant proxy server supporting VLESS+Reality, XHTTP, and Hysteria2 protocols. The tool runs on your local workstation (macOS, Linux, or Windows via WSL) and connects over SSH to provision the remote machine automatically: it installs Docker, deploys Xray managed by the Remnawave panel, configures nginx for SNI routing on port 443, obtains Let's Encrypt certificates for the server's IP address, hardens SSH with key-only login and fail2ban, sets up the UFW firewall, and enables BBR congestion control. The deployment verifies actual traffic through the delivered subscription before finishing. Users get a connection page with QR codes and a subscription URL that works with clients such as Happ, FlClashX, Clash Mi, and Throne. Meridian handles multi-server fleets, domestic relay nodes (via Realm TCP forwarder), split routing rules (including Cloudflare WARP), and automatic camouflage target selection. All state lives locally in ~/.config/meridian/cluster.yml. The project uses the MIT license and is currently in beta (v4.0.0b7).

Should you self-host meridian?

meridian scores 52/100 on selfhost.directory (how scoring works) and ranks #31 of 56 in VPN. It has 499 GitHub stars.

It shipped 18 stable releases in the past year. The latest, v4.0.0b8, came out on 27 October 2026. New versions land roughly every 1 days.

Setup is moderate: expect some configuration beyond a single command. It is MIT-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is Tailscale (84/100, 38 215 stars). It scores higher overall, so compare the two before you pick. See meridian vs Tailscale side by side.

Features

  • Automatic Camouflage Target Selection
  • Checkpointed Deployments
  • Connection Pages with QR Codes
  • Diagnostic and Testing Tools
  • Domestic Relay Nodes
  • Hysteria2 Protocol
  • Let's Encrypt IP Certificates
  • Multi-server fleet management
  • Subscription URL with Auto-Refresh
  • Traffic Verification Before Completion
  • VLESS+Reality Protocol
  • WSS Protocol
  • XHTTP Protocol

meridian README

How to install meridian

Install meridian with Linux

macOS, Linux, or Windows with WSL

Installs the meridian CLI using uv (or pipx as fallback)

How to configure meridian

  • --client-ipsoffPass each client's real IP to Xray and the panel for per-user IP limits

    Pass each client's real IP to Xray and the panel for per-user IP limits

    values: on/off

  • --client-ips / --no-client-ipsoffPass each client's real IP to Xray and the panel for per-user IP limits

    Pass each client's real IP to Xray and the panel for per-user IP limits

    values: on/off

  • cluster.ymlTopology, panel access, and keys stored on the control machine

    Topology, panel access, and keys stored on the control machine

  • --domainnoneYour domain for XHTTP/WSS through Cloudflare CDN

    Your domain for XHTTP/WSS through Cloudflare CDN

    values: domain name

  • --fingerprintchromeTLS fingerprint for Reality, XHTTP, and WSS (chrome, firefox, safari, ios, android, edge, random, randomized)

    TLS fingerprint for Reality, XHTTP, and WSS (chrome, firefox, safari, ios, android, edge, random, randomized)

    values: chrome|firefox|safari|ios|android|edge|random|randomized

  • --geo-blockonRefuse Russian domains and IPs at the exit

    Refuse Russian domains and IPs at the exit

    values: on/off

  • --geo-block / --no-geo-blockonRefuse Russian domains and IPs at the exit

    Refuse Russian domains and IPs at the exit

    values: on/off

  • --hardenonSSH key-only login, fail2ban, and UFW firewall

    SSH key-only login, fail2ban, and UFW firewall

    values: on/off

  • --harden / --no-hardenonSSH key-only login, fail2ban, and UFW firewall

    SSH key-only login, fail2ban, and UFW firewall

    values: on/off

  • --hysteria2/--no-hysteria2onEnable or disable Hysteria2 on UDP/443 with salamander obfuscation

    Enable or disable Hysteria2 on UDP/443 with salamander obfuscation

    values: on/off

  • --no-client-ipsoffDo not pass client IPs to Xray and the panel

    Do not pass client IPs to Xray and the panel

    values: on/off

  • --no-geo-blockoffAllow Russian domains and IPs at the exit

    Allow Russian domains and IPs at the exit

    values: on/off

  • --no-hardenoffDisable SSH hardening, fail2ban, and UFW firewall

    Disable SSH hardening, fail2ban, and UFW firewall

    values: on/off

  • --no-warpoffDisable Cloudflare WARP

    Disable Cloudflare WARP

    values: on/off

  • servers.jsonSaved SSH server connection details

    Saved SSH server connection details

  • setup.jsonMeridian setup wizard progress (no secrets)

    Meridian setup wizard progress (no secrets)

  • --sniautoCamouflage target for Reality (auto-selected from server's network or well-known sites)

    Camouflage target for Reality (auto-selected from server's network or well-known sites)

    values: hostname

  • --warpoffSend outgoing traffic through Cloudflare WARP

    Send outgoing traffic through Cloudflare WARP

    values: on/off

  • --warp / --no-warpoffSend outgoing traffic through Cloudflare WARP

    Send outgoing traffic through Cloudflare WARP

    values: on/off

meridian releases & version history

More in Network Security

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…