mrkeyoor.com_
Sat 07 Nov 03:33 UTC
Self-Hostedevaluationupdated 31 Oct 2026

3x-ui review

Consider 3X-UI for personal Xray-core administration if you need a browser panel for client accounts, traffic limits and subscriptions. The maintainers explicitly ask users not to deploy it in production. Our run on 2026-08-22 at commit `1250fbb` does not establish a working deployment: the test command failed, and the build log contains errors despite a recorded zero exit status.

+336stars / 7d
Verdict

Consider 3X-UI for personal Xray-core administration, with a disposable trial before committing your server configuration to it. Respect the README's production warning. Our run at 1250fbb left a failing test command and build diagnostics that conflict with the stored success status; it did not verify a working deployment. Reproduce those issues, then check client connectivity, backup restoration and any Docker IP enforcement on the host you plan to use.

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?

No. The project's own test command finished in 839 seconds and reported 33 passed, 5 failed (go test).

Who should not use 3x-ui?

Production deployments, which the project's README explicitly discourages.

What are the alternatives to 3x-ui?

Hiddify Manager, Marzban. Consider 3X-UI for personal Xray-core administration, with a disposable trial before committing your server configuration to it.

Setup3/5Dependency installation completed, but the build tail contains missing-asset and vet diagnostics despite stored exit 0. Deployment workloads remain unverified; see the visible five-point rubric.
Docs4/5The supplied README gives specific installer, database and Docker enforcement instructions. This assesses those instructions, not the entire documentation site; see the visible rubric.
Community5/5Assesses public repository visibility only, supported by the supplied GitHub attention metadata. Support quality, actual adoption and contributor retention were not measured; see the visible rubric.
Maturity3/5Documented administration features are qualified by a failing test command, unresolved build diagnostics and the README's personal-use boundary; see the visible rubric.

Who it’s for

Experienced self-hosters who want a browser interface for a personal Xray-core server.
Administrators who need client quotas, expiry dates, subscription links and traffic statistics.
Contributors prepared to reproduce the source-build and test problems recorded in our sandbox.

Who it’s NOT for

Production deployments, which the project's README explicitly discourages.
Operators who need this review to establish working proxy traffic, Docker IP enforcement or multi-node reliability. Our run did not validate those workloads.
Users who need a verified source build without investigating the missing frontend assets reported in our build log.

Setup reality

Our sandbox run on 2026-08-22 used commit 1250fbb, with 3 CPUs, 8 GB of memory and the golang:1.24-bookworm image. The install step recorded exit 0 after 33 seconds and 250 dependencies. Its tail shows a Go 1.26.6 toolchain download, so the image name alone does not identify the toolchain used.

The build step recorded exit 0 after 7 seconds, but its tail reports internal/web/web.go:52:12: pattern all:dist: no matching files found followed by vet-exit:1. That conflict prevents us from calling this a clean build. The test step recorded exit 1 after 839 seconds without a harness timeout.

The documented installer generates credentials and an access path. That installer workflow, a running panel, client connectivity, certificates, PostgreSQL, Docker IP bans and multi-node synchronization were not validated by this run.

Should you use 3X-UI?

Choose it for a personal Xray-core server when client administration is enough work to justify a web panel. The README restricts the intended use to personal deployments and explicitly asks users not to use it in production. Our sandbox evidence also leaves source-build and test problems to investigate before relying on this checkout.

3X-UI manages client traffic quotas, expiry dates, IP limits and subscription links through a browser interface. The README at the measured commit also documents traffic statistics, routing, a Telegram bot, an API and multi-node management. These are documented capabilities, not workloads verified by our run.

What our run actually established

Our run took place on 2026-08-22 at commit 1250fbb (1250fbb734fcaa592eeacca0af70123290df9b2b). The matching stored sandbox record specifies 3 CPUs, 8 GB of memory and the golang:1.24-bookworm image. The install step recorded exit 0 after 33 seconds; its tail shows that it downloaded Go 1.26.6.

Our sandbox recorded the test command exiting with code 1 after 839 seconds. The attached stored parser summaries report 33 passing and 5 failing results, with a stored total of 38. These figures do not establish unique, exhaustive test coverage or a count of individual assertions. The raw metrics separately record four packages without tests; those are not failed or skipped tests, and we have not recomputed the attached total.

The visible raw footer names github.com/mhsanaei/3x-ui/v3/internal/web/service as failing after 360.129 seconds. That package duration is separate from the 839-second command duration. The tail includes a SQLite commit stack during database setup for TestBulkAdjust_NodeInbound_ReenablesDBLocations, but it does not establish the root cause or explain every failing parser result. Nearby package footers report success, including email, integration, panel and Xray packages.

Our build tail reports pattern all:dist: no matching files found and vet-exit:1. The harness nevertheless stored the build step as successful, with exit 0 after 7 seconds. We preserve both observations: the stored command status and the diagnostic output disagree. A successful application build is therefore unverified.

For each step, our harness stores a status, exit code, duration and output tail; it also stores parsed test summaries. Those fields need to be read together. The MrKeyoor testing methodology explains this provenance and the limits of sandbox testing. Its current description does not establish which methodology revision governed this August run. This correction uses the existing record and includes no new execution.

We did not validate a running panel, proxy throughput, client connectivity, certificate issuance, privileged firewall changes, PostgreSQL or multi-node operation. The record contains no audit result or scanned-package coverage, so security scan coverage is unknown.

Installation leaves deployment work to you

The commit-pinned README says the installer generates a random username, password and access path. It documents SQLite as the default database and recommends PostgreSQL for high client counts or multi-node setups. Those instructions help you plan a trial, but our dependency-install timing does not measure the VPS installer or the time needed to configure a usable server.

Docker IP limits deserve a separate check. The README says Fail2ban uses iptables and requires NET_ADMIN; its example also grants NET_RAW. Without the documented capabilities, bans are logged but not applied. Verify enforcement on the intended host before relying on an IP-limit policy. Our sandbox did not test that path.

Keep the measured commit separate from v3.7.0

The supplied v3.7.0 release notes identify a different commit, f727d04. They describe automatic schema migrations and instruct operators to take a database backup before upgrading. They also state that building that release from source requires Go 1.27.

Those release instructions matter if you choose v3.7.0, but our August 22 run at 1250fbb does not validate that release, its migration behavior or its later fixes. For a trial, record the exact release you install, keep a restorable backup and verify the client and administration paths you intend to use.

Which other panels should you compare?

Hiddify Manager lists both Xray and SingBox cores. Compare it when support for both cores is a requirement. Its README also lists automatic updates, automatic backups and user time and traffic limits. Those are upstream feature descriptions; we did not test Hiddify Manager or establish that its deployment is easier or safer.

Marzban is an Xray-core account-management panel built with Python and Reactjs. Compare it when that implementation stack and its documented account-management workflow suit your maintenance needs. Its installation guide describes certificate-based dashboard access and SSH forwarding for local testing. We did not run Marzban, so this is a comparison of documented roles rather than measured reliability.

Both are alternative management panels. Xray-core is the underlying server software managed by 3X-UI, so it is a component of this setup rather than a like-for-like panel replacement. Managing it directly is a different administration workflow; the supplied evidence does not establish that doing so is safer.

How to read the ratings

These editorial ratings use a five-point scale: 1 means substantial obstacles, 2 means important gaps, 3 means usable with material qualifications, 4 means strong evidence for the named dimension, and 5 means especially strong evidence within that dimension's stated scope. They are not security certifications or deployment benchmarks.

Setup ease is 3/5 because dependency installation completed, while the build diagnostics and deployment requirements leave substantial work unverified. Documentation is 4/5 for the specific installer, storage and Docker enforcement instructions in the supplied README; we did not audit the entire documentation site. Community is 5/5 for public repository visibility only, not support quality or adoption: the supplied GitHub metadata shows substantial attention, but no response-time or contributor-retention evidence. Maturity is 3/5 because the documented administration features coexist with a failing test command, unresolved build diagnostics and an explicit personal-use boundary.

Alternatives

ProjectWhat it isPick it when
Hiddify ManagerAn alternative multi-user panel whose README lists Xray and SingBox cores.Compare it when you need a panel that documents both cores; verify its deployment and enforcement behavior separately.
MarzbanAn Xray-core proxy account-management panel built with Python and Reactjs.Compare it when its implementation stack and documented dashboard-access workflow fit your maintenance needs.

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

nvke · voxl · rustdesk-server · spotifast · tapflow · lucky · the whole board →