An Advanced Web Panel • Built on Xray Core
Disclaimer: This project is only for personal learning and communication, please do not use it for illegal purposes, please do not use it in a production environment
If you think this project is helpful to you, you may wish to give a🌟
- USDT (TRC20):
TYTq73Gj6dJ67qe58JVPD9zpjW2cc9XgVz
- Tezos (XTZ):
tz2Wnh2SsY1eezXrcLChu6idWpgdHzUFQcts
Features | Enable? |
---|---|
Multi-Protocol | ✔️ |
Multi-Language | ✔️ |
Multi-Client/Inbound | ✔️ |
Advanced Traffic Routing Interface | ✔️ |
Client & Traffic & System Status | ✔️ |
Date & Traffic Cap Based on First Use | ✔️ |
REST API | ✔️ |
TG Bot (DB backup + admin + client) | ✔️ |
Subscription Service (link + info) | ✔️ |
Search in Deep | ✔️ |
Dark/Light Theme | ✔️ |
bash <(curl -Ls https://raw.githubusercontent.com/alireza0/x-ui/master/install.sh)
Step 1: To install your desired version, add the version to the end of the installation command. e.g., ver 1.7.1
:
bash <(curl -Ls https://raw.githubusercontent.com/alireza0/x-ui/master/install.sh) 1.7.1
Click for details
- To download the latest version of the compressed package directly to your server, run the following command:
ARCH=$(uname -m)
case "${ARCH}" in
x86_64 | x64 | amd64) XUI_ARCH="amd64" ;;
armv8* | armv8 | arm64 | aarch64) XUI_ARCH="arm64" ;;
armv7* | armv7) XUI_ARCH="armv7" ;;
*) XUI_ARCH="amd64" ;;
esac
wget https://github.com/alireza0/x-ui/releases/latest/download/x-ui-linux-${XUI_ARCH}.tar.gz
- Once the compressed package is downloaded, execute the following commands to install or upgrade x-ui:
ARCH=$(uname -m)
case "${ARCH}" in
x86_64 | x64 | amd64) XUI_ARCH="amd64" ;;
armv8* | armv8 | arm64 | aarch64) XUI_ARCH="arm64" ;;
armv7* | armv7) XUI_ARCH="armv7" ;;
*) XUI_ARCH="amd64" ;;
esac
cd /root/
rm x-ui/ /usr/local/x-ui/ /usr/bin/x-ui -rf
tar zxvf x-ui-linux-${XUI_ARCH}.tar.gz
chmod +x x-ui/x-ui x-ui/bin/xray-linux-* x-ui/x-ui.sh
cp x-ui/x-ui.sh /usr/bin/x-ui
cp -f x-ui/x-ui.service /etc/systemd/system/
mv x-ui/ /usr/local/
systemctl daemon-reload
systemctl enable x-ui
systemctl restart x-ui
Click for details
Step 1: Install Docker
curl -fsSL https://get.docker.com | sh
Step 2: Clone the Project Repository:
git clone https://github.com/alireza0/x-ui.git
cd x-ui
Step 3: Start the Service
docker compose up -d
OR
mkdir x-ui && cd x-ui
docker run -itd \
-p 54321:54321 -p 443:443 -p 80:80 \
-e XRAY_VMESS_AEAD_FORCED=false \
-v $PWD/db/:/etc/x-ui/ \
-v $PWD/cert/:/root/cert/ \
--name x-ui --restart=unless-stopped \
alireza7/x-ui:latest
update to latest version
cd x-ui
docker compose down
docker compose pull x-ui
docker compose up -d
remove x-ui from docker
docker stop x-ui
docker rm x-ui
cd --
rm -r x-ui
Build your own image
docker build -t x-ui .
- English
- Chinese
- Farsi
- Russian
- Vietnamese
- Supports protocols including VLESS, VMess, Trojan, Shadowsocks, Dokodemo-door, SOCKS, HTTP, Wireguard
- Supports XTLS protocols, including Vision and REALITY
- An advanced interface for routing traffic, incorporating PROXY Protocol, Reverse, External, and Transparent Proxy, along with Multi-Domain, SSL Certificate, and Port
- Support auto generate Cloudflare WARP using Wireguard outbound
- An interactive JSON interface for Xray template configuration
- An advanced interface for inbound and outbound configuration
- Clients’ traffic cap and expiration date based on first use
- Displays online clients, traffic statistics, and system status monitoring
- Deep database search
- Displays depleted clients with expired dates or exceeded traffic cap
- Subscription service with (multi)link
- Importing and exporting databases
- One-Click SSL certificate application and automatic renewal
- HTTPS for secure access to the web panel and subscription service (self-provided domain + SSL certificate)
- Dark/Light theme
- CentOS 8+
- Ubuntu 20+
- Debian 10+
- Fedora 36+
Click for details
/login
withPUSH
user data:{username: '', password: ''}
for login/xui/API/inbounds
base for following actions:
Method | Path | Action |
---|---|---|
GET |
"/" |
Get all inbounds |
GET |
"/get/:id" |
Get inbound with inbound.id |
GET |
"/createbackup" |
Telegram bot sends backup to admins |
POST |
"/add" |
Add inbound |
POST |
"/del/:id" |
Delete inbound |
POST |
"/update/:id" |
Update inbound |
POST |
"/addClient/" |
Add client to inbound |
POST |
"/:id/delClient/:clientId" |
Delete client by clientId* |
POST |
"/updateClient/:clientId" |
Update client by clientId* |
GET |
"/getClientTraffics/:email" |
Get client's traffic |
POST |
"/:id/resetClientTraffic/:email" |
Reset client's traffic |
POST |
"/resetAllTraffics" |
Reset traffics of all inbounds |
POST |
"/resetAllClientTraffics/:id" |
Reset inbound clients traffics (-1: all) |
POST |
"/delDepletedClients/:id" |
Delete inbound depleted clients (-1: all) |
POST |
"/onlines" |
Get online users ( list of emails ) |
*- The field clientId
should be filled by:
client.id
for VMess and VLESSclient.password
for Trojanclient.email
for Shadowsocks
Click for details
Variable | Type | Default |
---|---|---|
XUI_LOG_LEVEL | "debug" | "info" | "warn" | "error" |
"info" |
XUI_DEBUG | boolean |
false |
XUI_BIN_FOLDER | string |
"bin" |
XUI_DB_FOLDER | string |
"/etc/x-ui" |
Click for details
The admin management script has a built-in SSL certificate application for Cloudflare. To use this script to apply for a certificate, you need the following:
- Cloudflare registered email
- Cloudflare Global API Key
- The domain name has been resolved to the current server through cloudflare
Step 1: Run thex-ui
command on the server's terminal and then choose 17
. Then enter the information as requested.
snap install core; snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
certbot certonly --standalone --register-unsafely-without-email --non-interactive --agree-tos -d <Your Domain Name>
Click for details
The web panel supports daily traffic, panel login, database backup, system status, client info, and other notification and functions through the Telegram Bot. To use the bot, you need to set the bot-related parameters in the panel, including:
- Telegram Token
- Admin Chat ID(s)
- Notification Time (in cron syntax)
- Database Backup
- CPU Load Threshold Notification
Crontab Time Format
Reference syntax:
*/30 * * * *
- Notify every 30 minutes, every hour30 * * * * *
- Notify at the 30th second of each minute0 */10 * * * *
- Notify at the start of every 10 minutes@hourly
- Hourly notification@daily
- Daily notification (00:00 AM)@every 8h
- Notify every 8 hours
For more info about Crontab
- Periodic reporting
- Login notifications
- CPU load threshold notifications
- Advance notifications for expiration time and traffic
- Client reporting menu with Telegram ID or username in configurations
- Anonymous traffic reports, search by UUID (VLESS/VMess) or Password (Trojan/Shadowsocks)
- Menu-based bot
- Client search by email (admin only)
- Inbound checks
- System status check
- Depleted client checks
- Backup on request and in periodic reports
- Multilingual support
Click for details
If you are upgrading from an older version or other forks and find that data traffic usage for clients may not work by default, follow the steps below to enable it:
Step 1: Locate the Configuration Section
Find the following section in the config file:
"policy": {
"system": {
// Other policy configurations
}
},
Step 2: Add the Required Configuration
Add the following section just after "policy": {
:
"levels": {
"0": {
"statsUserUplink": true,
"statsUserDownlink": true
}
},
Step 3: Final Configuration
Your final config should look like this:
"policy": {
"levels": {
"0": {
"statsUserUplink": true,
"statsUserDownlink": true
}
},
"system": {
"statsInboundDownlink": true,
"statsInboundUplink": true
}
},
"routing": {
// Other routing configurations
},
Step 4: Save and Restart
Save your changes and restart the Xray Service
- Loyalsoldier (License: GPL-3.0): The enhanced version of V2Ray routing rule.
- Iran v2ray rules (License: GPL-3.0): Enhanced v2ray/xray and v2ray/xray-clients routing rules with built-in Iranian domains and a focus on security and adblocking.