mrkeyoor.com_
Tue 22 Sept 22:37 UTC
Self-Hostedevaluationupdated 31 Aug 2026

3x-ui review

3X-UI is an English-documented, multilingual web panel for configuring and monitoring Xray-core proxy servers. It puts client accounts, traffic limits, subscriptions, routes, and multi-node administration in one browser interface, so a self-hoster does not need to edit every Xray setting by hand.

+248stars / 7d
Verdict

Our 3X-UI run installed 250 packages in 33 seconds and built in 7, but 5 of 38 test results failed after 839 seconds. Use it for a personal Xray server only if you already understand the Linux and network work behind the panel and can restore it from backup. The maintainers themselves say not to run it in production, which is the right boundary to respect.

We ran it

Lab card: what happened when we ran 3x-uiScreenshot of 3x-ui (docs.sanaei.dev)
Install✓ · 33s250 packages
Build✓ · 7s
Tests✗ · 839s33 passed · 5 failed of 38 (go test)
Repo1588 files~217,197 lines of source · 22.3 MB · 10 CI workflows · Dockerfile

Answers from our run

Does 3x-ui build from source?

Dependencies installed in 33 seconds (250 packages), and the build succeeded in 7 seconds. We cloned commit 1250fbb into a clean Debian container with 3 CPUs and no project-specific setup.

Do 3x-ui's tests pass?

Not all of them: 33 of 38 passed and 5 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use 3x-ui?

Production operators: the README explicitly says 3X-UI is for personal use and asks people not to use it in a production environment.

What are the alternatives to 3x-ui?

Hiddify Manager, Marzban, Xray-core. Our 3X-UI run installed 250 packages in 33 seconds and built in 7, but 5 of 38 test results failed after 839 seconds.

Setup3/533-second install, but safe deployment needs network privileges
Docs4/5Install, database, Docker, and operations guidance is specific
Community5/545,611 stars and a push on 2026-08-24
Maturity3/5Wide feature set, while 5 of 38 test results failed

Who it’s for

Experienced self-hosters running a personal Xray server on a VPS.
Administrators who need client quotas, expiry dates, IP limits, and subscription links.
Users managing several Xray nodes from one interface.
Operators prepared to secure an exposed panel, maintain backups, and inspect every upgrade.

Who it’s NOT for

Production operators: the README explicitly says 3X-UI is for personal use and asks people not to use it in a production environment.
Rootless Docker users who need enforced IP limits: the documented Fail2ban path needs NET_ADMIN and NET_RAW, otherwise bans are logged but not applied.
Teams that require the upstream suite to pass in a clean environment: our run ended with 33 passing and 5 failing results out of 38.
Administrators who cannot recover from a bad database import: the v3.7.0 release says startup runs schema migrations and tells users to back up first.
People who want a simple proxy with no control plane to protect: the generated panel credentials, access path, certificates, client data, and API create ongoing admin work.

Setup reality

Our sandbox installed 250 packages in 33 seconds and built the checked-out commit in 7 seconds. Tests then failed after 839 seconds: 33 passed and 5 failed out of 38. The log tail identifies internal/web/service as failed, while nearby email, integration, outbound, panel, Telegram bot, session, WebSocket, and Xray packages passed.

The quick installer generates a username, password, and access path, but a usable server still needs a VPS, Xray configuration, network exposure decisions, and certificate handling. SQLite is the default database; PostgreSQL is available for higher client counts or multi-node use. Telegram control and API use add their own credentials and access policy.

Docker does not remove host privileges from the design. Fail2ban-based IP enforcement uses iptables and needs NET_ADMIN plus NET_RAW; without them, bans are only logged. The latest release also says first start runs automatic schema migrations, so take a database backup before upgrading.

One panel manages more than a single proxy

3X-UI wraps Xray-core in a browser interface for VLESS, VMess, Trojan, Shadowsocks, WireGuard, Hysteria2, HTTP, SOCKS, tunnels, and TUN. It can issue client subscriptions, track traffic per client or inbound, apply quotas and expiry dates, and manage routing or outbounds. The README also lists a REST API, a Telegram bot, and 13 interface languages.

The appeal is obvious when a personal server has more than a few users or routes. Instead of hand-editing Xray configuration, an administrator can issue a share link, set an IP limit, inspect usage, or change a route in the same place. The panel is still operating Xray underneath. A bad inbound, a blocked port, an exposed subscription URL, or an unreachable VPS remains a systems problem after the form has been saved.

The README limits 3X-UI to personal use

The project's own README says it is intended for personal use and asks people not to use it in a production environment. That sentence is more useful than a feature checklist. A customer-facing proxy service needs named security ownership, incident handling, restorable backups, and a change process. A community web panel does not supply those things merely by exposing many protocols in one screen.

GitHub reported 45,611 stars, 157 combined open issues and pull requests, and a last push on 2026-08-24. Release v3.7.0 was published the same day and describes scoped API tokens, multi-node changes, client renewal controls, and migration safety fixes. Those are signs of current work, not proof that a particular deployment is ready for business traffic.

The one-line installer creates an admin job

The quick start downloads and executes the project's installer. It generates a random username, password, and access path, then leaves the x-ui command for service control, credentials, and certificate tasks. A fresh VPS can get to a panel quickly, but the installer is the start of the work rather than the end.

SQLite is the default store, with PostgreSQL offered for high client counts or multi-node setups. PostgreSQL needs a DSN and another service to keep healthy; multi-node operation adds synchronization, remote authentication, and more places where a mistaken change can spread. Release v3.7.0 says the first start performs automatic schema migrations and explicitly asks operators to take a database backup before upgrading.

Docker needs network privileges for IP bans

Docker Compose uses SQLite by default, while the bundled PostgreSQL service requires its profile and environment settings. The image includes Fail2ban for client IP limits. Its documentation says Fail2ban acts through iptables and needs NET_ADMIN; the shown docker run command also adds NET_RAW. Run it without the needed capabilities and 3X-UI logs a ban without applying it, which makes an IP-limit policy look stronger than it is.

That tradeoff puts this beyond a harmless web dashboard. Granting those capabilities lets the container participate in host networking policy, while refusing them leaves a documented feature unenforced. Docker can package the application, but it cannot choose who should reach the panel or which ports are public. Rootless or tightly restricted environments should test this path before promising IP enforcement to anyone.

What happened when we ran it

Our sandbox installed commit 1250fbb in 33 seconds, pulling 250 packages, and the build completed in 7 seconds. The checkout had 1,588 files, about 217,197 lines of source, and occupied 22.3 MB before installation. We ran it in a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, the golang:1.24-bookworm image, and no secrets. The repository has 10 CI workflow files, a Dockerfile, and a compose file.

The full Go test command failed with exit code 1 after 839 seconds. It reported 33 passed and 5 failed out of 38. The final lines name github.com/mhsanaei/3x-ui/v3/internal/web/service as failed. Email, integration, outbound, panel, Telegram bot, session, WebSocket, Xray, geodata, and OpenAPI-generation packages in the same tail passed. The tail does not show the failed assertion or error, so it does not establish why those 5 results failed.

A contributor has a clean install and successful build, then a long failing test run to reproduce before making a safe change. A release-binary operator does not need to compile Go to use the panel, but our run is still evidence that this exact source checkout did not pass its full suite in the stated fresh environment. It is a finding to budget for, not an embarrassment to hide.

Multi-node convenience raises the recovery stakes

The v3.7.0 notes give a useful picture of where the project is spending effort: mTLS trust-bundle validation, rotated certificates without a panel restart, adoption of matching inbounds during node sync, and changes to avoid overwriting client extensions. That means multi-node behavior has edge cases worth treating carefully, even though the maintainers are addressing them.

For a single personal VPS, SQLite, a small client list, and a known-good backup can keep the scope reasonable. Once the same panel controls several servers, subscription output, remote nodes, and database migrations, every upgrade becomes an operational event. Test a release on a spare instance, record which values live only on each node, and make sure the backup can restore more than the database file.

Direct Xray is safer when the UI adds more risk than value

Choose 3X-UI when its 13-language panel and client-management features reduce work you are already qualified to do manually. Hiddify Manager and Marzban are sensible comparisons if you still want an Xray panel with a different deployment or user model. Direct Xray-core is the better fit when a browser control plane and its stored credentials create more exposure than benefit.

Our measured 33-second install should make a disposable trial easy, while the 839-second failing suite argues against treating it as a frictionless foundation. Keep access narrow, pin the release you tested, back up before the automatic migrations described in v3.7.0, and verify Docker IP bans on the host you will use. For personal use, those are manageable chores. For production, the README's warning remains the clearest recommendation.

Alternatives

ProjectWhat it isPick it when
Hiddify ManagerA multi-user proxy panel with a more guided deployment approach.pick this instead when you want to compare another panel built around multi-user anti-filtering deployments.
MarzbanAn Xray management panel centered on users, subscriptions, and administration.pick this instead when its user-management model and deployment stack fit your server better.
Xray-core gh↗The underlying proxy platform without 3X-UI's browser control panel.pick this instead when you can manage configuration directly and want less administrative software exposed.

What people are saying

  1. [github-trending] MHSanaei/3x-ui

Sources

  1. 3X-UI README
  2. 3X-UI repository metadata
  3. 3X-UI v3.7.0 release notes

More self-hosted reviews

radar · sftpgo · mailcow-dockerized · openGym · BackPack · PanWatch · the whole board →