Z User 4f59ab4e7a fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
fix(ui): create user/node returns after validate; loading feedback; deferred Mihomo restart
Symptom: confirm button seemed dead, refresh showed the create had succeeded —
HTTP waited on full core restart and often timed out after DB write.
- ApplyConfigDeferredRestart: save+validate sync, restart async
- Listener path uses deferred apply so create/delete respond quickly
- Users modal: confirmLoading + disable while submitting
- Listeners: always toast errors; refresh list without blocking success path
2026-09-11 15:55:57 +00:00
2026-08-19 21:18:31 +08:00

3m-ui

3m-ui logo

Languages / 语言: README · English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Español · Français · Deutsch · Русский · Português (Brasil) · Tiếng Việt · Bahasa Indonesia · ไทย · Türkçe · العربية · हिन्दी · Polski · Українська

Mihomo server web management panel

Stable first: install and update use formal releases by default. Pre-releases require an explicit choice. Full bundles and Docker images ship a pinned Mihomo core — see installation docs.

Lightweight and self-hosted. Manage Mihomo listeners, users, subscriptions, and runtime status on Linux.

License Go

Documentation: https://3m-ui.top/docs/ · Website


Features

Area Capabilities
Nodes Protocol-registry listeners (VLESS / VMess / Trojan / Shadowsocks / Hysteria2 / TUIC / AnyTLS / Snell / ShadowQUIC, …); REALITY target scan; TLS self-signed certs; transport field validation
Users Bind nodes, traffic limits, expiry, IP/HWID limits, batch ops, subscription tokens
Subscriptions UA routing for Clash/Mihomo YAML, v2ray Base64, sing-box JSON; optional ?target=; HTML info page
Config Generate → validate → apply; rollback previous config.yaml on failure
Ops Core start/stop/update, logs, dashboard metrics, Geo files, panel SSL/ACME, backup/restore
Telegram Alerts and bot commands (token + chat IDs)
Cluster Register remote panels, health checks, node mirror sync, merged subscriptions

Install

curl -fsSL https://raw.githubusercontent.com/kazeyukiro/3m-ui/main/scripts/install.sh | sudo sh

After install, update with:

sudo 3m-ui update
# sudo 3m-ui update v1.0.2

Default panel: http://SERVER_IP:8080/ — user admin, one-time random password printed at install (change on first login).


Build from source

cd frontend && npm install && npm run build
cp -r dist ../backend/cmd/server/web/dist
cd ../backend && CGO_ENABLED=0 go build -tags sqlite_modernc -trimpath -ldflags='-s -w' -o ../3m-ui ./cmd/server

Static Linux binaries for multiple architectures are on Releases.


Acknowledgements

  • Mihomo — core engine and listener model
  • clashmeta-inbound — listener examples
  • 3x-ui / s-ui — panel UX inspiration
  • Gin, GORM, React, Ant Design, Zustand, golang-jwt/jwt
  • Go, Node.js, and the open-source community

Contributors: kazeyukiro, freephilx


License

Eclipse Public License 2.0

Third-party notices: THIRD-PARTY-NOTICES.md.

S
Description
Lightweight self-hosted web panel for Mihomo: listeners, users, subscriptions, SSL/ACME, Telegram, and multi-node cluster.
https://3m-ui.top
Readme EPL-2.0
6.3 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 49.9%
TypeScript 44.7%
Shell 2.5%
CSS 0.9%
Python 0.9%
Other 0.9%