Next-generation proxy management panel
Core-agnostic · User-centric · Real-time
English · فارسی
Features · Screenshots · Comparison · Quick Start · Protocols · Roadmap · Contributing
|
|
| VortexUI | 3x-ui | Marzban | Hiddify | |
|---|---|---|---|---|
| Proxy engines | Xray + sing-box | Xray | Xray | Xray + sing-box |
| Data model | User-centric | Inbound-centric | User-centric | User-centric |
| Traffic method | Push delta ✨ | Polling | Polling | Polling |
| Multi-node | ✅ mTLS + failover | ✅ | ✅ | ✅ |
| Balancer | ✅ | ❌ | ❌ | ❌ |
| Outbound CRUD | ✅ | Partial | ❌ | ❌ |
| Routing rules | ✅ | ❌ | ❌ | ❌ |
| REALITY keygen | ✅ | ✅ | ✅ | ✅ |
| Local node | ✅ | ✅ | ❌ | ❌ |
| API tokens | ✅ | ❌ | ❌ | ❌ |
| Audit log | ✅ | ❌ | ❌ | ❌ |
| Anti-sharing | ✅ IP enforce | IP limit | ❌ | ❌ |
| Backup | ✅ Transactional | ✅ | ✅ | ✅ |
| Notifications | Webhook + TG | TG | ✅ | TG |
| Languages | 8 | 13 | 3 | 5 |
| Backend | Go | Go | Python | Python |
| Database | PG + TimescaleDB | SQLite/PG | SQLite/Maria | SQLite |
| Theme | Dark + Light | Dark + Light | Dark | Dark + Light |
| Protocol | Inbound | Outbound | Transport |
|---|---|---|---|
| VLESS | ✅ | ✅ | TCP, WS, gRPC, HTTPUpgrade |
| VMess | ✅ | ✅ | TCP, WS, gRPC |
| Trojan | ✅ | ✅ | TCP, WS, gRPC |
| Shadowsocks | ✅ | ✅ | TCP |
| SOCKS | — | ✅ | TCP |
| HTTP | — | ✅ | TCP |
| Hysteria2 | 🔜 | — | UDP |
| TUIC | 🔜 | — | UDP |
| WireGuard | 🔜 | — | UDP |
Security layers: None, TLS, REALITY
bash <(curl -Ls https://raw.githubusercontent.com/iPmartNetwork/VortexUI/master/install.sh)The installer is interactive and asks two things:
- Installation method
- Docker Compose (recommended) — the whole stack (web · panel · node · PostgreSQL/TimescaleDB · Redis) runs in containers.
- Native (systemd) — Go binaries run as host services, the SPA is served by Caddy, and only PostgreSQL + Redis run in Docker.
- How the panel is reached
- Domain + automatic HTTPS — enter a domain (and optional email); Caddy obtains and auto-renews a Let's Encrypt certificate (needs ports 80 + 443 open and the domain's DNS pointed at the server).
- IP + HTTP — pick a plain-HTTP port instead.
It then generates secrets and mTLS certificates, brings the stack up, creates the
first admin, prints the URL/credentials, and installs the vortexui command.
To script it non-interactively:
VORTEXUI_METHOD=docker VORTEXUI_NONINTERACTIVE=1 \
VORTEXUI_ADMIN_USER=admin VORTEXUI_ADMIN_PASS='s3cret' \
bash install.shAfter install, run vortexui for an interactive menu (3x-ui style):
1) Start 2) Stop
3) Restart 4) Status
5) Logs 6) Update
7) Create admin 8) Change web port
9) Domain / SSL 10) Settings / URL
11) Uninstall 0) Exit
Or use it as a subcommand: vortexui start|stop|restart|status|logs|update|admin|settings|uninstall.
# Clone
git clone https://github.com/iPmartNetwork/VortexUI && cd VortexUI
# Dependencies
docker compose up -d # PostgreSQL + TimescaleDB + Redis
# Configure
cp .env.example .env
# Set VORTEX_JWT_SECRET: openssl rand -hex 32
# Build & Run
make build
make certs # dev mTLS certificates
make run-panel
# Create admin
./bin/panel admin create --username admin --password 'your-password' --sudoOpen http://your-server:8080 and login.
# Build images
make images
# Full stack (panel + node + DB + Redis)
make stack-upVORTEX_NODE_LISTEN=:50051 \
VORTEX_CORE=xray \
VORTEX_CORE_BIN=/usr/local/bin/xray \
VORTEX_TLS_CERT=node.crt VORTEX_TLS_KEY=node.key VORTEX_TLS_CA=ca.crt \
./bin/nodeOr enable local node (in-process):
VORTEX_LOCAL_NODE=true
VORTEX_LOCAL_NODE_HOST=your-public-ipThe web tier is Caddy. Set a domain (SITE_ADDRESS in deploy/.env, or pick it
during install) and Caddy automatically obtains and renews a Let's Encrypt
certificate — no certbot, no cron. Leave it as :80 for plain HTTP behind your own
proxy. Switch any time with vortexui → Domain / SSL. Certificates persist in the
caddy-data volume. Requires ports 80 and 443 reachable.
The panel streams domain events to the browser over Server-Sent Events
(GET /api/events/stream). The UI subscribes once and refreshes the affected views
the instant something changes — a node goes down, a user hits their limit, sharing is
detected — instead of polling. Events also drive toasts. Caddy proxies the stream
transparently; the token is passed as ?access_token= since EventSource can't set
headers.
Each node ships with geoip.dat / geosite.dat. Nodes → Update Geo downloads the
latest Iran-v2ray-rules
databases (adds geoip:ir, geosite:ir, category-ir, ad/malware categories, …)
into the node's asset dir and reloads the core, so routing rules can target Iranian
IPs and domains (e.g. Iran direct, everything else via proxy). Custom URLs are
accepted via the API (POST /api/nodes/:id/geo-update).
A background loop compares each user's distinct online source IPs (Xray
GetStatsOnlineIpList) against their device limit. Violations raise a user.ip_limit
alert (webhook/Telegram) and, with VORTEX_SHARE_AUTOLIMIT=true, automatically limit
the offender (reversible).
| Topic | Link |
|---|---|
| API Reference (OpenAPI 3.0) | docs/openapi.yaml |
| Environment Variables | .env.example |
| Docker Deploy | deploy/ |
| CI/CD | .github/workflows/ |
| Changelog | CHANGELOG.md |
| Contributing | CONTRIBUTING.md |
- Core-agnostic engine (Xray + sing-box)
- User-centric data model
- Push-based delta traffic accounting
- Auto-failover + migrate-back
- Outbound/Routing/Balancer management
- REALITY key generation
- Webhook + Telegram notifications
- Backup/Restore (transactional)
- Audit log
- API tokens (PAT)
- Account-sharing guard (online IP enforcement)
- Import from 3x-ui / Marzban
- 8-language frontend + RTL
- Real-time dashboard with live charts
- Live updates over SSE (push, not polling)
- Automatic HTTPS (Caddy + Let's Encrypt)
- GeoIP/Geosite updater with Iran routing rules
- One-line installer +
vortexuimanagement console - Hysteria2 / TUIC / WireGuard protocols
- DNS management
- Evasion profiles (fragment, fingerprint presets)
- Payment integration
- Reseller sub-panels
- Mobile app (React Native)
- Grafana integration
- Cluster mode (multi-panel HA)
If you find VortexUI useful, please consider:
- ⭐ Star this repository
- 🍴 Fork and contribute
- 📢 Share with others
- 💰 Donate crypto to support development
| Network | Address |
|---|---|
| USDT (TRC20) | TRLnjZ7YDSwjh3oay28qigEYNieGPMs6ew |
| BTC | bc1qszt4g7jdv7ev2t3pexctc07ults8nfflht3nj5 |
| TON | UQAYSSSirtQ9_67ZHYUgLVLMx9Ir9vvh3vpcq2qbpit_8-Db |
💡 Replace the addresses above with your actual wallet addresses.
Contributions are welcome! Please:
- Fork the repo
- Create a feature branch (
git checkout -b feat/amazing) - Commit (
git commit -m 'feat: add amazing feature') - Push (
git push origin feat/amazing) - Open a Pull Request
See CONTRIBUTING.md for detailed guidelines.
| 🇺🇸 English | 🇮🇷 فارسی | 🇹🇷 Türkçe | 🇸🇦 العربية |
|---|---|---|---|
| 🇷🇺 Русский | 🇨🇳 中文 | 🇯🇵 日本語 | 🇪🇸 Español |
Full RTL support for Persian and Arabic.
This project is licensed under the GPL-3.0 License — see the LICENSE file.
© 2026 iPmart Network. All rights reserved.
Made with ❤️ by iPmart Network
⭐ Star this repo if you find it useful!





