Skip to main content
3X-UI is a web panel on top of Xray-core. Through the browser you create connections (inbounds) and users over the VLESS, VMess, Trojan, and Shadowsocks protocols, view traffic stats, and set limits — instead of editing Xray configs by hand. Commands are for Ubuntu/Debian, as root.
Commands are current as of writing. Before installing, check the official repo MHSanaei/3x-ui — the install script and the panel get updated.

What you’ll need

  • A Lumi server (Ubuntu 22.04 by default). The IP, root login, and password are in the server card in @lumivps_bot.
  • An SSH connection to the server as root: Connecting to the server.

Installation

Install the panel with the official script in a single command:
bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/master/install.sh)
The script will ask for the panel’s username, password, and port, install the service, and start it. The backend is SQLite by default, with the database file at /etc/x-ui/x-ui.db — no separate setup needed.
Don’t leave the defaults. Set your own username, a strong password, and a non-standard panel port right away — an exposed panel with default credentials gets probed within the first few hours.

Verify

systemctl status x-ui
You should see active (running).

Managing the panel

The management menu is opened with the command:
x-ui
In it you can change the username, password, and port, view the current settings, restart the service, and enable SSL. To restart the service manually:
systemctl restart x-ui

Accessing the panel

The panel opens in a browser at an address like:
http://IP:PORT/PATH
Where IP is your server’s address, PORT is the port you set during installation, and PATH is the panel’s web path (also set by the script; the exact values are shown by the x-ui command). Log in with the credentials you set during installation.

Open the panel port in the firewall

ufw allow PORT/tcp
Substitute the port you set during installation. More on the firewall: Firewall (ufw).
Where possible, don’t leave the panel exposed on a bare IP. Set up a domain and enable SSL (the option in the x-ui menu or a reverse proxy via nginx), and in ufw open only the port you actually use. The less is exposed to the outside, the smaller the attack surface.

Basic setup: VLESS + Reality

1

Create an inbound

In the panel, open the Inbounds section and add a new one. Choose the VLESS protocol and the Reality security type — a solid default that’s hard to tell apart from ordinary HTTPS traffic.
2

Add a client

Inside the inbound, set up a user (client). If you like, give them a traffic limit and an expiry date.
3

Hand out the link or QR

The panel generates a connection string and a QR code. Pass them to whoever will be connecting.
4

Connect from the app

The string or QR is pasted into a client app: v2rayNG (Android), NekoBox (Android/Windows), Hiddify (cross-platform). Import the link — and the connection is ready.

Lumi handles the server and network; software setup is on you. Network or port issues — message @lumisup_robot.

Where to next

Marzban

A multi-user panel with subscriptions.

SSL certificate

Add HTTPS to the panel via a domain.