mrkeyoor.com_
Tue 15 Sept 19:19 UTC
Self-Hostedevaluationupdated 14 Sept 2026

panel review

PasarGuard is a self-hosted control panel for creating and managing proxy accounts across Xray-core and WireGuard servers. It gives operators one web dashboard for user limits, subscriptions, traffic statistics, node management, and several proxy protocols instead of making them edit each server configuration by hand.

trackingstars / 7d
Verdict

Our PasarGuard run installed 34 packages and built successfully, but the test command stopped after 4 seconds because the pydantic module was missing. It is worth trialing for an operator who needs one panel across Xray-core and WireGuard, can put it behind TLS, and will inspect the root-run installer first. Wait or choose a narrower panel if a clean fresh-container test run or unrestricted raw core configuration is a release requirement.

We ran it

Lab card: what happened when we ran panelScreenshot of panel (docs.pasarguard.org)
Install✓ · 33s34 packages · 37 MB
Build✓ · 11s
Tests✗ · 4sran, no count parsed
Known vulns0(pip-audit)
Repo925 files~194,837 lines of source · 10.8 MB · 7 CI workflows · Dockerfile · tests dir

Answers from our run

Does panel build from source?

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

Do panel's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does panel have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use panel?

Operators who will not audit or run a network-fetched installer as root: every quick-start command in the README pipes the PasarGuard script into sudo bash.

What are the alternatives to panel?

Marzban, 3x-ui, Hiddify Manager. Our PasarGuard run installed 34 packages and built successfully, but the test command stopped after 4 seconds because the pydantic module was missing.

Setup3/533-second install, but TLS and a root-run script need care
Docs4/5Clear quick start, database choices, paths, and English guides
Community4/52,574 stars with active September 2026 issues and pull requests
Maturity3/5v5.4.1 is current, but our fresh-container tests did not start

Who it’s for

Proxy service operators managing many users, inbounds, or server nodes.
Self-hosters who need Xray-core and WireGuard accounts under one web interface.
Administrators who want traffic limits, expiry rules, subscription links, and role-based access.
Teams prepared to run the panel behind TLS and maintain its database and proxy nodes.

Who it’s NOT for

Operators who will not audit or run a network-fetched installer as root: every quick-start command in the README pipes the PasarGuard script into sudo bash.
Local-only deployments that cannot provide HTTPS or keep an SSH tunnel open for testing: the README requires SSL for the dashboard, and issue 890 reports failed clipboard copying on an insecure v5.3.0 setup.
Advanced Xray users who need every raw core setting exposed through a headless panel: issue 878 is an open request for full configuration support.
Organizations whose software policy excludes AGPL-3.0 projects.

Setup reality

Our sandbox install succeeded in 33 seconds, adding 34 packages and using 37 MB. The build passed in 11 seconds. Tests stopped with exit code 4 after 4 seconds because tests/conftest.py could not import PydanticDeprecatedSince20; the log says the pydantic module was missing. Pip-audit found 0 known vulnerabilities.

The README's server path runs a downloaded script with sudo and asks you to choose TimescaleDB, SQLite, MySQL, MariaDB, or PostgreSQL. You then need a domain and SSL certificate for normal dashboard access, or an SSH port forward for testing. The owner account starts with a generated one-time setup key.

PasarGuard stores configuration under /opt/pasarguard and data under /var/lib/pasarguard. Operating it also means maintaining the selected database plus the Xray-core or WireGuard nodes it controls. The dashboard is documented on port 8000, and the README warns that the no-domain SSH route lasts only while the tunnel stays open.

Six proxy protocols sit behind one control panel

PasarGuard gives a proxy operator one place to manage Vmess, VLESS, Trojan, Shadowsocks, WireGuard, and Hysteria2 accounts. The dashboard covers users, multiple inbounds, traffic and expiry limits, subscription links, QR codes, node distribution, and traffic statistics. It can place several protocols on one user account and several inbounds on one port through fallbacks. That is a meaningful step up from editing Xray JSON on individual servers whenever a customer changes plan or reaches a limit.

The scope is substantial for a project whose checkout occupied 10.8 MB. We measured 925 files and about 194,837 lines of source at commit b56ffe3. PasarGuard combines a REST API, React web interface, command-line utility, Telegram bot, multi-admin roles, and support for more than one database. Buyers should treat it as an infrastructure control plane with several moving parts, rather than a thin page placed on top of one Xray process.

Five database choices make the installer easy to start, not easy to trust

The README presents 5 install variants: TimescaleDB is recommended, while SQLite, MySQL, MariaDB, and PostgreSQL are also accepted. Each quick-start command downloads pasarguard.sh and sends it directly to sudo bash. That is convenient on a new server, but it asks for root authority before the reader sees what the script changes. A cautious operator should fetch the script, read it, pin the revision, and test removal and upgrade behavior on a disposable host.

Our sandbox installed 34 packages in 33 seconds and used 37 MB on disk, so Python dependency setup itself was modest. Production work begins after that step. The README places files in /opt/pasarguard, persistent data in /var/lib/pasarguard, and configuration in an .env file. You must choose and back up a database, connect the proxy nodes, issue an SSL certificate, and generate a one-time key before creating the owner account.

What happened when we ran it

Our run used commit b56ffe3 in an unprivileged Debian container with 3 CPUs and 8 GB of RAM. Installation succeeded in 33 seconds, with 34 packages installed and 37 MB consumed. The build also succeeded, taking 11 seconds. Pip-audit reported 0 known vulnerabilities in the installed Python packages. Those results cover the stated checkout and environment, not every released image or host configuration.

The test command failed with exit code 4 after 4 seconds. Pytest stopped while loading tests/conftest.py, where an import of PydanticDeprecatedSince20 raised ModuleNotFoundError: No module named 'pydantic'. The log does not tell us why that module was absent, and no test total was produced. The defensible conclusion is limited: the suite did not start successfully in our fresh container even though installation and build had completed.

HTTPS is part of normal operation, and v5.3.0 showed why

The README says the dashboard requires an SSL certificate and gives https://YOUR_DOMAIN:8000/dashboard/ as the normal route. Without a domain, its testing workaround forwards port 8000 over SSH and disappears when that session closes. Open issue 890 reports that v5.3.0 displayed a successful copy notification on an insecure local deployment even though configuration links never reached the clipboard. Browsers restrict clipboard access outside secure contexts, so the documented TLS requirement affects daily panel work, not only the address bar.

This matters because the panel returns sensitive subscription material. Our 10.8 MB source checkout cannot answer whether a particular reverse proxy, certificate renewal job, or firewall is safe. Operators need to decide which interface is public, limit dashboard access, protect the generated owner setup key, and verify backups. The integrated Telegram bot also deserves separate credentials and an explicit access policy if enabled. PasarGuard collects control of many proxy users in one service, which increases the cost of a careless exposure.

Version 5.4.1 is active, while raw core control remains incomplete

GitHub recorded 2,574 stars, 78 combined issues and pull requests, and a push on September 14, 2026. Release v5.4.1 arrived on September 12 with node configuration and WireGuard DNS fixes. Current pull requests cover user synchronization, statistics query load, subscription routing, and security behavior. That recent push plus live issue and pull request traffic is stronger evidence of maintenance than the release number alone. The combined count should not be read as 78 confirmed bugs.

An advanced limitation is visible in issue 878, an open request for a headless core mode with full configuration support. The reporter says panel-managed inbounds can ignore core fields such as clients and asks for remote raw JSON editing. PasarGuard already allows customized Xray configuration, but that issue shows a gap between supporting a core and exposing everything the core can do. Teams with hand-tuned Xray files should reproduce their required settings before moving account management into the panel.

Seven CI workflows do not replace a deployment rehearsal

Our scan found 7 CI workflow files, a Dockerfile, a compose file, and a tests directory in the 925-file repository. Those are good signs for maintainers and packagers, but our 4-second test failure proves that visible automation does not guarantee the supplied checkout will pass in a fresh Python environment. A sensible evaluation should cover database migration, node reconnection, certificate renewal, owner recovery, subscription generation, and rollback with your chosen install method.

PasarGuard earns a trial when one team already operates several proxy nodes and wants policy, accounts, and usage in one dashboard. The 33-second install and 11-second build make that trial cheap, while the root-run script, mandatory TLS, and failed test startup keep it out of the install-and-forget category. Compare Marzban if the work is mostly Xray, and test 3x-ui or Hiddify Manager when their protocol and deployment choices fit your servers better.

Alternatives

ProjectWhat it isPick it when
MarzbanAn Xray-focused multi-user proxy management panel with a web interface and API.pick this instead when Xray is your main transport and you want a narrower, established panel to compare.
3x-ui gh↗A multi-protocol Xray panel with a large menu of inbound types.pick this instead when broad protocol coverage matters more than PasarGuard's combined Xray and WireGuard model.
Hiddify ManagerA multi-user anti-filtering panel built around simple deployment and many protocols.pick this instead when you want another opinionated full panel and its installation model better matches your server.

What people are saying

  1. [github-trending] PasarGuard/panel
  2. [github-trending] shy3130/tick-stock-panel
  3. [github-trending] shy3130/tickflow-stock-panel
  4. [github-trending] bia-pain-bache/BPB-Worker-Panel

Sources

  1. PasarGuard panel repository and README
  2. PasarGuard English documentation
  3. PasarGuard v5.4.1 release
  4. Issue 878: headless core with full config support
  5. Issue 890: clipboard behavior on an insecure connection

More self-hosted reviews

openfang · SparkyFitness · sonic · Aether · lx-music-desktop · checkcle · the whole board →