Nodes, subscriptions, plans, payments and a Telegram bot in one place. Nothing leaves your machines: the panel, the database and the subscription service all run on your own hardware.
Rust and PostgreSQL. One command to install, one to attach a node.
Not a checklist — the things you actually end up using every day.
The agent keeps in touch with the panel, applies the profile and reports traffic, who is online and how loaded the box is. Attaching a node is one command; geo databases keep themselves up to date.
VLESS, VMess, Trojan, Shadowsocks 2022, Hysteria2. Transports: Reality, WebSocket, gRPC, XHTTP, HTTPUpgrade, mKCP. Eleven ready-made configuration presets.
Xray JSON, Clash, sing-box, base64 — the format follows the client's app. The subscription service moves to its own domain, so blocking the panel does not cut people off.
Plans with periods, promo codes, an affiliate programme, auto-renewal. Payment providers are wired up with keys inside the panel, with no file editing.
Selling and renewal happen in the bot; its texts and buttons are edited in the panel. Broadcasts by segment, with scheduled sending.
Traffic per client and per node, limits and scheduled resets, devices by HWID, what the servers cost you and what is left after them.
You need a Debian or Ubuntu server, a domain for the panel and a domain for subscriptions.
git clone https://github.com/STEALTHNET-APP/stealthnet-software.git
cd stealthnet-software
cp .env.example .env # addresses, bot token, database access
docker compose up -d
Then head to the quick start: first administrator, configuration profile, first node and first client.
So you don't find out after installing.
Prices and reports use a single currency for the whole service. Several at once would mean exchange rates, conversion and figures that disagree. The one exception is Telegram Stars: they have their own unit and their own price.
There is no extension catalogue. Blocking and bypassing are done with routing rules inside the configuration profile — enough for nearly every case.
The engine reads its client list at start-up, so a purchase or a revoked subscription means restarting it on the node. The window is up to 15 seconds.
Every change to the panel has its own page, newest first.
The first public release has not happened yet: the code opens together with it. Below is what already works and has been checked on a live installation.