mrkeyoor.com_
Tue 01 Sept 17:43 UTC
Self-Hostedevaluationupdated 26 Aug 2026

neko-master review

Neko Master is a self-hosted dashboard that records and visualizes traffic reported by Clash, Mihomo, and Surge gateways. It turns raw connections into views by domain, IP, device, rule, region, and proxy, with a remote agent for gateways that the central server cannot reach directly.

+55stars / 7d
Verdict

Our Neko Master build passed in 87 seconds, but the install pulled 898 packages and occupied 973 MB before any traffic data was stored. It is worth running for a Clash, Mihomo, or Surge operator who wants history across several gateways and will keep the panel private. Choose a lighter dashboard for one gateway, and do not deploy it on the public internet until access control, a fixed cookie secret, persistent storage, and local or accepted GeoIP handling are settled.

We ran it

Lab card: what happened when we ran neko-masterScreenshot of neko-master (github.com/foru17/neko-master)
Install✓ · 58s898 packages · 973 MB
Build✓ · 87s
Testsn/ano test script
Repo356 files~53,736 lines of source · 19.1 MB · 5 CI workflows · Dockerfile

Answers from our run

Does neko-master build from source?

Dependencies installed in 58 seconds (898 packages), and the build succeeded in 87 seconds. We cloned commit 6f72cfd into a clean Debian container with 3 CPUs and no project-specific setup.

Does neko-master have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Who should not use neko-master?

Users of sing-box or dae who need native collection today: open issues 72 and 59 request those backends, while the docs list only Clash, Mihomo, and Surge.

What are the alternatives to neko-master?

MetaCubeXD, Zashboard, Yacd-meta. Our Neko Master build passed in 87 seconds, but the install pulled 898 packages and occupied 973 MB before any traffic data was stored.

Setup3/5Docker is clear; source install used 973 MB and 898 packages
Docs5/5Detailed Docker, proxy, agent, storage, security, and recovery guides
Community4/53,819 stars with August pushes and newer issue activity
Maturity3/5Working multi-backend design, but no root test target in our run

Who it’s for

Home-lab and small-network operators already using Clash, Mihomo, OpenClash, or Surge.
People who want historical domain, device, rule, region, and proxy traffic views instead of a live-only gateway panel.
Multi-site operators willing to place a reporting agent beside each remote gateway.
Self-hosters comfortable protecting a dashboard, gateway credentials, SQLite data, and optional ClickHouse storage.

Who it’s NOT for

Users of sing-box or dae who need native collection today: open issues 72 and 59 request those backends, while the docs list only Clash, Mihomo, and Surge.
Owners of older ARMv7 boxes: issue 91 says that architecture is unsupported; published Docker support is amd64 and arm64.
Surge deployments that require http-api-tls: issue 88 reports fetch failed when TLS is enabled.
Privacy-sensitive operators unwilling to configure local GeoIP: the deployment table sets online lookup as the default and requires separately downloaded MMDB files for local mode.
Teams expecting a tested root command: our harness found no root test script or target, so it could not run the collector's nested tests.

Setup reality

Our sandbox installed 898 pnpm packages in 58 seconds and used 973 MB. The build succeeded in 87 seconds. The root package had no test script or target, so tests were skipped.

The recommended Docker path needs a persistent /app/data mount and a fixed COOKIE_SECRET. Port 3000 serves the dashboard; real-time WebSocket routing uses 3002, with HTTP polling as fallback. Direct collection also needs network access and any secret for the Clash, Mihomo, or Surge API.

Remote sites need a neko-agent process plus a panel-generated backend token. SQLite is the default; ClickHouse adds another service, credentials, dual-write controls, and migration checks. Local GeoIP needs separately downloaded MMDB files, while public exposure needs TLS, access control, and careful reverse-proxy routing.

Stored traffic history is the reason to choose Neko Master

Neko Master collects connection data from Clash, Mihomo, OpenClash, and Surge, then groups it by domain, destination IP, source device, proxy chain, rule, and geographic region. The dashboard adds trend charts and a PWA interface instead of showing only the gateway's current connection list. Multiple backends can feed one panel, which is the main advantage over a small dashboard attached to one proxy core.

Collection differs by gateway. Clash and Mihomo provide connection updates over WebSocket, while Surge v5 or newer is polled through its HTTP API about every 2 seconds. The collector calculates traffic deltas, buffers writes, enriches destination IP data, and sends current summaries to browsers. SQLite stores the baseline data. ClickHouse is optional for larger histories and long-range aggregation.

Docker needs 2 ports for real-time updates and 1 for basic use

The minimal Compose example exposes port 3000 and mounts /app/data. The web app proxies its API internally, so port 3001 normally stays private. Real-time browser updates use port 3002, usually routed through /_cm_ws on the same public hostname. If that path is unavailable, the client falls back to HTTP polling at roughly 5-second intervals.

A production deployment also needs a fixed COOKIE_SECRET of at least 32 random bytes. Without it, sessions may be invalidated after a restart, especially when the data directory is not persisted. Access control is configured in the dashboard, and FORCE_ACCESS_CONTROL_OFF is an emergency recovery switch that should be removed immediately after resetting a lost token. Public demo mode can block sensitive write operations, but a private panel remains the safer default.

What happened when we ran it

Our sandbox installed commit 6f72cfd in 58 seconds, adding 898 pnpm packages and consuming 973 MB. The monorepo build finished successfully in 87 seconds. The checkout itself contained 356 files, roughly 53,736 lines of source, and used 19.1 MB before dependencies. It had 5 CI workflow files, a Dockerfile, a Compose file, and workspace configuration.

The root package did not expose a test script or target, so our harness skipped tests. There is no top-level tests directory, although the collector package contains a nested Vitest command and test files. That distinction matters: we have a passing build, not a passing repository-wide suite. The supplied measurement block included no dependency vulnerability audit, so this review makes no claim about advisories.

We also did not launch the Docker stack, connect a gateway, feed traffic, test a browser session, or measure query performance. The 58-second install and 87-second build establish that the code assembled in a 3-CPU, 8 GB Debian container. They do not validate packet accounting, multi-day aggregation, agent delivery, or data recovery on the hardware where you intend to keep the history.

Remote agents remove inbound access to home gateways

Agent mode is useful when one central panel covers several private networks. A small daemon runs near each gateway, pulls local connection data, and sends batched deltas to the panel over HTTP. Clash or Mihomo stays on WebSocket, while Surge retains its 2-second polling model. The central collector never needs a route back into the remote LAN.

Each agent backend receives a generated token, and the server derives a stable agent ID from that token. Rotation invalidates old agents. One host can run multiple named instances with separate environment and PID files. Issue 71 reports an OpenWrt init script missing a pidfile setting, causing status to say stopped while the process remained alive. OpenWrt users should verify both the manager's status and the actual process after installation.

Online GeoIP is the default unless MMDB files are mounted

The deployment table sets GEOIP_LOOKUP_PROVIDER to online. Local lookup requires mounting a geoip directory and supplying fixed filenames for City and ASN databases, with Country optional. Those files are not included in the image. Traffic analytics can reveal sensitive destinations, so sending IPs to an external lookup endpoint is a real privacy decision rather than a cosmetic preference.

For a home or company network, local MMDB is the easier policy to defend. Download the databases from a trusted source, record their update process, mount them read-only, and confirm the preference in the dashboard. The database still contains browsing-derived domain and device information, so protect backups and limit who can read the SQLite or ClickHouse volumes.

ClickHouse adds scale and another consistency problem

SQLite is always available and is the documented choice for most users. ClickHouse targets histories with hundreds of thousands of domain or IP entries and queries spanning at least 7 days. Enabling it introduces dual writes, another data directory, database credentials, health thresholds, source-selection flags, and an optional migration from older SQLite history.

The migration guide sensibly starts with ClickHouse writes while reads remain on SQLite, then offers comparison and a later source switch. Automatic fallback resumes SQLite writes after repeated ClickHouse failures, even in ClickHouse-only mode. That protects collection continuity but also means operators must understand which store answered a query and whether older data was migrated. Stay with SQLite until real query or retention limits justify the extra service.

Gateway support is active but still narrow

GitHub recorded the last code push on August 3, 2026. The latest release, agent-v1.4.5, was published July 19, while the repository had 3,819 stars and 27 combined issues and pull requests when fetched. Issue activity continued on August 23 with an ARMv7 request, so the later push date and issue activity show maintenance even though the newest release tag belongs to the agent.

Current gaps are specific. Issues request sing-box and dae backends, ARMv7 binaries, and better log-level control. Issue 88 reports Surge collection failing when http-api-tls is enabled, while issue 82 describes inaccurate tooltips for ranges over 24 hours. Neko Master is a credible historical dashboard for its documented gateways, but operators should test the exact protocol, architecture, and time range they depend on before replacing simpler live dashboards.

Alternatives

ProjectWhat it isPick it when
MetaCubeXDThe official Mihomo dashboard for direct proxy control and live status.pick this instead when you mainly need to operate one Mihomo instance and do not need Neko Master's historical analytics.
ZashboardA modern web dashboard for Clash-compatible proxy cores.pick this instead when a lighter live control panel matters more than stored multi-gateway traffic history.
Yacd-metaA Clash dashboard variant maintained around the MetaCubeX ecosystem.pick this instead when familiar Yacd controls are enough and you do not want a collector database.

What people are saying

  1. [github-trending] foru17/neko-master

Sources

  1. Neko Master README
  2. Neko Master architecture
  3. Neko Master agent overview
  4. Neko Master agent v1.4.5 release
  5. Issue 88: Surge HTTP API TLS
  6. Issue 82: multi-day tooltip mismatch
  7. Issue 91: ARMv7 support

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →