mrkeyoor.com_
Mon 07 Sept 22:59 UTC
Self-Hostedevaluationupdated 07 Sept 2026

s-ui review

S-UI is a self-hosted web panel for configuring a sing-box proxy server without hand-editing its JSON. It manages protocols, users, traffic limits, expiry dates, routes, status, and subscription links from one browser interface.

trackingstars / 7d
Verdict

Our S-UI run installed 466 packages, built successfully in 137 seconds, and passed all 12 Go tests, making it a credible trial for an experienced sing-box operator. Use it for a personal or carefully controlled server when its multi-user panel saves you from editing proxy configuration by hand. The project's own production warning, default admin credentials, and manual v1.6.0 DNS migration cases rule it out for teams that need a supported appliance.

We ran it

Lab card: what happened when we ran s-uiScreenshot of s-ui (t.me/XrayUI)
Install✓ · 121s466 packages
Build✓ · 137s
Tests✓ · 24s12 passed · 0 failed of 12 (go test)
Repo369 files~46,119 lines of source · 3.7 MB · 3 CI workflows · Dockerfile

Answers from our run

Does s-ui build from source?

Dependencies installed in 121 seconds (466 packages), and the build succeeded in 137 seconds. We cloned commit 686f233 into a clean Debian container with 3 CPUs and no project-specific setup.

Do s-ui's tests pass?

Yes: 12 of 12 passed 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 s-ui?

Production teams following the maintainer's stated support boundary: the README explicitly says not to use S-UI in a production environment.

What are the alternatives to s-ui?

3x-ui, Hiddify Manager, Marzban. Our S-UI run installed 466 packages, built successfully in 137 seconds, and passed all 12 Go tests, making it a credible trial for an experienced sing-box operator.

Setup3/5Checks pass, but TLS, ports, credentials, and upgrades need care
Docs4/5Clear installs and platform notes; testing guidance is stale
Community4/59,851 stars, current releases, and a small active issue queue
Maturity3/5v1.6.0 passes checks, but the README rejects production use

Who it’s for

Self-hosters managing several users or inbounds on one sing-box server.
Operators who need traffic caps, expiry dates, routing controls, and client subscription links in one panel.
Linux or Windows administrators comfortable securing a network-facing admin service.
Developers who want an API around the same users and proxy configuration exposed in the browser.

Who it’s NOT for

Production teams following the maintainer's stated support boundary: the README explicitly says not to use S-UI in a production environment.
Security policies that require built-in TOTP today: pull request 887, which adds TOTP, remains open.
Operators who need every sing-box upgrade migrated without review: v1.6.0 leaves two legacy DNS cases for manual work and reports them in logs.
macOS administrators who need a fully supported service: the README labels both Intel and Apple Silicon builds experimental.
Teams that need a built-in maintenance switch before changing routes: open issue 1247 requests that capability.

Setup reality

Our sandbox install at commit 686f233 succeeded in 121 seconds with 466 packages. The build passed in 137 seconds, and all 12 Go tests passed in 24 seconds. The checkout contained 369 files, about 46,119 source lines, and 3.7 MB before installation.

The quick installer needs shell access with service-management privileges. The panel defaults to port 2095, /app/, and admin/admin; subscriptions use port 2096. Internet-facing use also needs a domain, firewall choices, and your own TLS certificate. Docker needs persistent database and certificate volumes.

Linux and Windows have documented installers, while macOS is experimental. Source builds use a frontend submodule plus Go, and full builds need CGO and a C compiler. The v1.6.0 upgrade migrates most sing-box 1.14 configuration shapes once, but two deprecated DNS forms require manual changes.

Two ports cover panel administration and client subscriptions

S-UI runs a browser panel on port 2095 and a subscription service on port 2096 by default. The panel creates sing-box inbounds and outbounds, manages several clients, sets traffic caps and expiry dates, and shows connection and system statistics. It can emit link, JSON, and Clash subscription formats. That is a useful bundle for someone who understands the underlying proxy choices but would rather manage routine changes in a form than keep rewriting sing-box configuration.

The measured checkout was modest at 369 files, about 46,119 source lines, and 3.7 MB. Its scope is broader than the size suggests because the Go backend embeds the compiled frontend and wraps sing-box itself. Data lives in SQLite, while separate packages handle API requests, clients, routing, statistics, subscriptions, backups, and configuration migration. The frontend is a Git submodule, so contributors changing the interface work across two repositories.

Six interface languages sit over a long protocol list

The S-UI README documents English, Farsi, Vietnamese, Russian, Simplified Chinese, and Traditional Chinese. Its protocol list covers HTTP and SOCKS basics alongside VLESS, VMess, Trojan, Shadowsocks, Hysteria, TUIC, ShadowTLS, and other sing-box options. One user can have multiple inbounds, and generated subscriptions let compatible clients consume the resulting configuration without receiving panel access.

A 466-package install is a reminder that the tidy binary interface rests on a substantial dependency graph. S-UI also owns operational state: client identities, quota counters, expiry rules, certificates, traffic history, and the configuration that starts the proxy core. A wrong route or exposed panel can affect every client on that server. The browser saves typing, but it does not remove the need to understand DNS, ports, transport settings, and firewall exposure.

What happened when we ran it

Our sandbox installed commit 686f233 in 121 seconds and pulled 466 packages. The build succeeded in 137 seconds. That commit contains the sing-box 1.14 migration work released as v1.6.0, and the successful compile is meaningful because the backend includes protocol-specific build tags and CGO-dependent pieces. The run used a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and the golang:1.24-bookworm image.

All 12 Go tests passed in 24 seconds, with 0 failures. The repository had 3 CI workflow files, a Dockerfile, and a compose file, although it had no directory literally named tests. We did not measure proxy throughput, connection latency, browser behavior, or a live upgrade, so the passing suite answers a narrow question: this pinned source installed, compiled, and cleared its available Go tests in our stated environment.

Default admin credentials require work before network exposure

The documented first login is admin/admin, with the panel at /app/ on port 2095. S-UI supports HTTPS, but the installation instructions put the domain and certificate in the operator's hands. Change the credentials before allowing outside access, restrict the panel port, and persist both the database and certificate directories when using Docker. The compose example publishes 2 ports and mounts both paths.

Teams that require a second login factor should stop here. Pull request 887, opened in November 2025, proposes TOTP and remained open when checked. Session authentication and API tokens exist, but the current README does not document TOTP as a released feature. The repository also says the software is for personal learning and communication and explicitly tells readers not to use it in production. That warning sets a clear support boundary.

v1.6.0 migrates most sing-box 1.14 settings once

The v1.6.0 release notes say stored configurations move to sing-box 1.14 shapes automatically on first start. Two DNS cases are excluded because automatic rewriting could change name resolution: rules using legacy address filters, and the deprecated strategy rule action. S-UI logs those cases with an upstream migration link. An upgrade therefore needs a database backup, log review, and a manual DNS check before clients depend on the new configuration.

Our 12 passing tests include migration-oriented Go coverage at the measured commit, but the contributor guide says there are no *_test.go files and recommends manual checks. That text is stale. The same contributor guide at 686f233 correctly explains the frontend submodule, CGO compiler requirement, build tags, and backend-only route. Documentation is useful for getting started, yet maintainers should verify commands against the source instead of treating every status statement as current.

September 2026 activity is current and the open queue is small

GitHub showed 9,851 stars and 6 combined open issues and pull requests when fetched on September 7, 2026. The last push was September 2, one day after v1.6.0, and the latest open issue was filed September 4. Three of the 6 open items were pull requests. Those dates show active maintenance and user reports together; the combined count is not a count of confirmed bugs.

The open reports also reveal ordinary panel friction. Issue 1249 says enabling Multi-Domain prefixes a Clash subscription node name with a number. Issue 1247 asks for a maintenance mode that temporarily stops the core while routes or panel settings change. Neither request invalidates the 137-second successful build, but both matter to operators who promise stable names or scheduled maintenance behavior to users.

S-UI best suits a hands-on single-server operator

S-UI earned a serious look because our 466-package install completed, its 137-second build passed, and all 12 tests succeeded. The panel covers far more than a basic proxy toggle, especially for several users sharing one sing-box host. Its sweet spot is a technically capable self-hoster who will change the default login, supply TLS, back up SQLite, read migration logs, and test subscriptions after upgrades.

Larger deployments should compare 3x-ui, Hiddify Manager, and Marzban before committing. Those projects make different choices around Xray, deployment structure, and node management. S-UI remains the sharper choice when sing-box is fixed and one panel should own users, routes, and subscriptions. The maintainer's production disclaimer still matters: passing 12 tests makes evaluation easier, but it does not turn the project into a supported network appliance.

Alternatives

ProjectWhat it isPick it when
3x-ui gh↗A multi-user Xray panel with a wider Xray-centered operator community.pick this instead when Xray-core compatibility and a much larger user base matter more than S-UI's sing-box focus.
Hiddify ManagerA multi-user anti-censorship panel covering more than 20 protocols and Telegram proxy support.pick this instead when a guided multi-domain deployment and broader client ecosystem are central requirements.
MarzbanAn Xray-powered multi-user panel with an API and a separate node agent.pick this instead when you want an Xray control plane or plan to manage multiple nodes through Marzban-node.

What people are saying

  1. [github-trending] alireza0/s-ui

Sources

  1. S-UI README
  2. S-UI v1.6.0 release notes
  3. Measured commit 686f233
  4. S-UI contributor guide at commit 686f233
  5. Open TOTP pull request 887
  6. Multi-Domain node-name issue 1249

More self-hosted reviews

dozzle · snagtime · opencloud · obsidian-livesync · koodo-reader · LunaTV · the whole board →