Compare commits

...

625 Commits
1.4.1 ... main

Author SHA1 Message Date
kastov
c4440b58e3 docs: update Remnawave Panel changelog for version 2.7.4 with new bug fixes and update SDK compatibility 2026-03-30 03:00:49 +03:00
kastov
7caf103fe6 docs: update Remnawave Panel version compatibility to include version 2.7.3 2026-03-30 01:07:53 +03:00
kastov
e55bb89247 docs: update Remnawave Panel changelog for version 2.7.3 with new features and bug fixes 2026-03-30 00:58:00 +03:00
kastov
8c3acb1dc5 docs: add warning for Torrent Blocker configuration regarding sniffing settings 2026-03-29 18:29:14 +03:00
kastov
f416efbe64 fix: remove optional field from example 2026-03-29 02:10:05 +03:00
kastov
95e6f4ceab docs: update Torrent Blocker documentation by removing unnecessary field description and clarifying includeRuleTags as optional 2026-03-29 01:58:47 +03:00
kastov
9d3a54058e docs: clarify Hysteria2 protocol support in configuration profiles documentation 2026-03-28 19:03:44 +03:00
kastov
69b94f65c7 fix: tunnel placement 2026-03-28 19:02:47 +03:00
Nick
8ec4062626 Update panel's confiig docs (#380) 2026-03-28 19:01:18 +03:00
kastov
2baa6514ef docs: update Remnawave Panel version compatibility for SDK 2.7.0 to include 2.7.2 2026-03-28 18:48:27 +03:00
kastov
8fcc72fc88 docs: add includeRuleTags field and update Torrent Blocker documentation with routing rules example 2026-03-28 18:48:07 +03:00
kastov
3324d51819 docs: update Remnawave Panel changelog for version 2.7.2 to include fixes for Hysteria2 Xray-Json generation and base64 serverDescription 2026-03-28 18:09:43 +03:00
kastov
0f47eebbfb fix: core version 2026-03-28 17:26:17 +03:00
kastov
bb1b0e9902 fix: correct directory path 2026-03-28 08:24:20 +03:00
kastov
449e861518 docs: add hotfix entry for custom remarks in Remnawave Panel changelog for version 2.7.1 2026-03-28 07:55:24 +03:00
kastov
37336917ac docs: remove development warning from Node Plugins documentation and update changelog with release date for version 2.7.0 2026-03-28 06:42:37 +03:00
kastov
3a6e6db9cc docs: update Remnawave panel changelog to include release date for version 2.7.0 2026-03-28 05:11:31 +03:00
kastov
43fd5ea174 docs: add torrent_blocker events to webhook documentation for Remnawave Panel v2.7.0 2026-03-28 02:42:00 +03:00
kastov
ea87ce6faa fix: url 2026-03-28 02:28:23 +03:00
kastov
62d10de2e9 docs: update Remnawave panel changelog with new Grafana dashboard link and additional features for v2.7.0 2026-03-28 02:27:00 +03:00
kastov
27d9cceeec docs: enhance Remnawave panel changelog 2026-03-28 02:22:14 +03:00
kastov
f1e76c2569 docs: add version compatibility note for Telegram OAuth2 guide across multiple languages 2026-03-28 02:14:01 +03:00
kastov
1ee5d658ae docs: update AUTH_METHODS_TELEGRAM documentation to reflect new bot configuration steps and known error solutions for Telegram OAuth2 2026-03-28 02:12:46 +03:00
kastov
a784bc1ddd docs: update environment variables documentation for Telegram notifications and add new variables; clarify minimum Xray-Core version for plugins 2026-03-28 02:10:12 +03:00
PentiumB
303e4a3322 Update AUTH_METHODS_TELEGRAM.md (#362)
Обновление  справки под новый OAuth2
2026-03-28 02:10:03 +03:00
kastov
4a2464dd7d fix: typos 2026-03-27 20:59:24 +03:00
kastov
f52596525d docs: update Remnawave panel changelog to reflect changes in Node response structure, including removed and added fields 2026-03-27 20:58:51 +03:00
kastov
c9bfba6905 docs: add changelog entry for Remnawave Node v2.7.0 2026-03-25 20:54:15 +03:00
kastov
6de614b83f docs: enhance Remnawave panel changelog for v2.7.0 with backup instructions and update order 2026-03-25 20:44:12 +03:00
kastov
b997f57ad8 docs: update Remnawave migration guide for v2.1.0, including new flags for squad assignments and improved token handling 2026-03-25 20:39:55 +03:00
kastov
267799b356 docs: update Remnawave panel changelog 2026-03-21 16:40:47 +03:00
kastov
fb0d6d3e5e docs: add CIDR support details to node plugins documentation, specifying supported plugins and examples 2026-03-21 07:57:06 +03:00
zuckerhalo
f5a01fc41c docs: update srr (#374) 2026-03-21 02:01:13 +03:00
kavore
62abff91eb remove remnawave tg shop (#373) 2026-03-21 00:23:21 +03:00
Boris Kovalskii
2d78544388 docs: Update INCY client details and add download links (#372) 2026-03-20 16:41:53 +03:00
kastov
bc053dfa40 docs: update Remnawave panel changelog to reflect the refactor of RAW subscription response, replacing rawHosts with resolvedProxyConfigs and detailing new structure and options 2026-03-20 16:40:23 +03:00
kastov
01bbe1f0d2 docs: update Remnawave panel changelog for v2.7.0, including breaking changes, new features, and improvements 2026-03-16 23:33:51 +03:00
kastov
28b4519d17 docs: update kernel version requirement and clarify plugin warnings in node plugins documentation 2026-03-16 04:46:40 +03:00
kastov
3667783857 fix: rename 2026-03-15 08:13:58 +03:00
kastov
742fb99c48 docs: rename blacklist to ingress-filter in node plugins documentation 2026-03-15 08:09:47 +03:00
kastov
82335bd882 docs: update node plugins documentation to correct blacklist command reference 2026-03-15 08:07:38 +03:00
kastov
41a32049ee docs: update node plugins documentation to include ingress and egress filters 2026-03-15 08:07:23 +03:00
kastov
ef696a7dd4 docs: enhance node plugins documentation 2026-03-15 07:53:47 +03:00
Max Shalenkov
7c9693276f docs: add MCP server Remnawave to awesome-remnawave (#359)
* add MCP server Remnawave to awesome-remnawave

* change pic mcp-server
2026-03-12 23:55:23 +03:00
0-Kutya-0
577b4116a1 docs: Add Incy client (#349) 2026-03-12 05:50:31 +03:00
kastov
0748cd419a docs: add new features section to Remnawave Subscription Page changelog 2026-03-08 07:47:31 +03:00
kastov
7b893170f2 docs: update action needed section in remnawave-panel changelog 2026-03-07 21:39:57 +03:00
kastov
7cb5321db1 fix: anchors 2026-03-07 21:39:11 +03:00
kastov
9e8447f5b9 feat: changelog 2026-03-07 21:30:50 +03:00
kastov
c809f31257 fix: typos 2026-03-07 20:49:56 +03:00
kastov
a31008b009 docs: add Executor section to node plugins documentation 2026-03-07 20:15:34 +03:00
kastov
de52793774 fix: typos 2026-03-07 20:05:33 +03:00
kastov
af14e4f61a docs: expand node plugins documentation 2026-03-07 20:03:30 +03:00
kastov
8c13e647e5 docs: node plugins draft 2026-03-07 19:16:53 +03:00
hosternus
b73871e1d0 Update python-sdk.md (#352) 2026-03-04 18:21:52 +03:00
Remerd
fc5e5663dc Edit description DB env variables (#361) 2026-03-04 18:21:23 +03:00
kastov
dd66e75a8b 2026-03-03 20:15:55 +03:00
kastov
3e8fee303d docs: add Kcp with FinalMask section to PAGE_CONFIG_PROFILES.md 2026-03-02 19:11:10 +03:00
Artem
60852fa6d7 docs(xray-json): clarify virtual host role in inject flow (#357)
* docs(xray-json): clarify virtual host role in inject flow

- document that the virtual host acts as a wrapper for the template and metadata
- explain that its address and profile can be arbitrary and are not used for the actual user connection
- clarify that real connection parameters are taken from injected hosts' outbounds

* Update xray-json-advanced.md
2026-02-27 18:51:31 +03:00
Artem
a3fe7cc90c docs: add balancer rule and update interval in Xray example (#355)
- Add routing rule with balancerTag for balancer to work
- Update burstObservatory interval from 5m to 1m
2026-02-25 17:14:35 +03:00
kastov
cf095dfb70 docs: rename addHostOutbound to addVirtualHostAsOutbound in xray-json-advanced.md 2026-02-25 16:41:08 +03:00
kastov
a96002949c docs: add missing contract version mapping for Remnawave Panel in typescript-sdk.md 2026-02-25 16:40:47 +03:00
kavore
29757b8dd7 docs: document addHostOutbound parameter (#354)
Add documentation for the new addHostOutbound field in the
remnawave injector section, including usage examples and explanation
of outbound ordering when enabled.
2026-02-25 16:40:10 +03:00
kastov
d83d061623 docs: update contract version mapping for Remnawave Panel in typescript-sdk.md 2026-02-25 04:21:53 +03:00
kastov
1ce4068029 docs: update Remnawave version requirement and enhance injectHosts section in xray-json-advanced.md 2026-02-25 03:00:10 +03:00
kastov
b288e1098b docs: update contract version mapping in typescript-sdk.md 2026-02-24 21:44:56 +03:00
kastov
e885803422 docs: clarify injectHosts selection criteria in xray-json-advanced.md 2026-02-23 20:58:51 +03:00
kastov
07e508c16a fix: formatiing 2026-02-22 22:19:51 +03:00
kastov
a829daa344 docs: remove subscription page customization tip and clean up formatting in quick-start and users documentation 2026-02-21 18:18:44 +03:00
kastov
75635acbe3 docs: remove deprecated code snippets from subscription page documentation 2026-02-21 18:17:46 +03:00
kastov
89ac706d57 docs: remove outdated customization guide for subscription page 2026-02-21 18:14:21 +03:00
kastov
3ec0163130 docs: update xray-json-advanced.md 2026-02-21 08:21:56 +03:00
kastov
b4656f3b44 docs: update remnawave structure in xray-json-advanced.md to support multiple injectHosts groups 2026-02-21 02:48:43 +03:00
kastov
1be4e3f84a feat: xray-json-advanced 2026-02-21 02:40:11 +03:00
refreak
f9ae7d5b16 Fix formatting of migration command in marzban.md (#350)
Удалил ковычки для команды миграции. Они там не требуется и стоят не корректно, если запросить команду ./remnawave-migrate --help она покажет что нужно все делать строками без ковычек
2026-02-20 01:03:23 +03:00
Case211
041f1cc18c feat: add Remnawave Admin Web + Bot to awesome-remnawave (#345)
* feat: add Remnawave Admin Bot to awesome-remnawave

* feat: add Remnawave Admin Bot to awesome-remnawave

* feat: add Remnawave Admin Bot to awesome-remnawave
2026-02-16 20:46:30 +03:00
Jesus
ca8aabe98c Update go sdk ver (#347)
* chore: change link to docs.

* docs: add Go SDK documentation

* up rwp shop.

* feat: add private link handling.

* docs: update Go SDK documentation for v2.6.1

- Add v2.6.1 and v2.5.3 to version table
- Update type names: remove Dto suffix (CreateUserRequestDto → CreateUserRequest)
- Add pagination example with PaginationHelper
- Update controllers list: 14 → 26 controllers
- Add new features: OpenTelemetry, RequestOption, Editors
- Fix error handling example to match actual Res interfaces
2026-02-16 20:46:09 +03:00
kastov
1a10952fdd docs: add new event type for subpage configuration changes in webhook documentation 2026-02-16 19:38:33 +03:00
kastov
ecacaa9d76 docs: add Remnawave Node Rescue CLI section with cold config retrieval instructions 2026-02-16 19:15:23 +03:00
kastov
72912848be docs: add new version entry for Remnawave Panel 2.6.1 in TypeScript SDK compatibility table 2026-02-16 19:02:33 +03:00
kastov
bb9c53fe8f docs: rescue cli guide 2026-02-13 17:51:58 +03:00
Jesus
c369495c1d update rwp docs and image (#337)
* chore: change link to docs.

* docs: add Go SDK documentation

* up rwp shop.

* feat: add private link handling.
2026-02-05 03:19:14 +03:00
kastov
85403b0247 Update layout and formatting in awesome-remnawave.mdx 2026-01-31 16:41:08 +03:00
rxyvea
c653de4305 Introduce whitebox project card (#329)
* docs: introduce whitebox project card

* docs: include whitebox guide

* docs: adjust whitebox hemera view to match project card size
2026-01-31 02:59:14 +03:00
Nick
5e19c4c310 Update awesome-remnawave.mdx (#327)
Add MiniApp TG chat link
2026-01-31 02:59:02 +03:00
kastov
e0dcb4691f docs: add new version entry for Remnawave Panel in TypeScript SDK compatibility table 2026-01-30 16:36:06 +03:00
GooRingX
f997328be3 docs:update karing info (#328)
* docs:update karing info

* docs:update karing/clashmi hwid limit
2026-01-28 15:59:02 +03:00
kastov
f0ad4910be fix: update URLs in configuration 2026-01-26 01:00:57 +03:00
kastov
14ec78086a docs: update TypeScript SDK version compatibility table with new versions 2026-01-21 06:15:04 +03:00
kastov
6d4d2a407b feat: help articles for generic oauth2 2026-01-21 05:23:20 +03:00
Vladislav Filatov
e47bf4fb77 Update hwid-device-limit.md (#316)
add Passwall-OpenWRT
2026-01-20 16:01:04 +03:00
Egor
64edb7f964 feat[docs]: Update inf about Bedolaga Project in Awesome (#315)
* Update awesome-remnawave.mdx

* Add files via upload

* Update remnawave-bedolaga-bot.md

* Update awesome-remnawave.mdx
2026-01-18 05:05:25 +03:00
Danila
8601a68272 docs: fixing links in clients (#314)
* docs: fixing links in clients
2026-01-17 18:15:53 +03:00
kastov
c7b2b6bc9d docs: update TypeScript SDK version compatibility table 2026-01-17 02:23:22 +03:00
kastov
0d1cc22e90 2026-01-15 18:28:19 +03:00
StylerHub
6a8f4e7125 docs: add Keycloak authentication help articles (#307)
* docs: add Keycloak authentication help articles

- Add AUTH_METHODS_KEYCLOAK.md for en, ru, zh, fa
- Document client setup, role creation, and role mapper configuration
- Include seamless authentication description and troubleshooting

* docs: update Keycloak documentation to match refactored integration

- Replace role-based access with claim-based (remnawaveAccess: true)
- Add Allowed Emails as alternative access control method
- Update field names: keycloakDomain, frontendDomain
- Remove seamlessAuth documentation
- Update troubleshooting section
2026-01-13 06:04:42 +03:00
Oleg Kraev
7c4e7ee630 feat[docs]: add remnawave-cloudflare-nodes (#306)
* feat[docs]: add remnawave-cloudflare-nodes

* feat[docs]: add missing comma and closing tag in the remnawave-cloudflare-nodes ProjectCard
2026-01-13 06:03:01 +03:00
Sergey Kutovoy
e8434b55d6 docs: Enhance xray-checker documentation with additional features and updates (#309)
- Added new features: Public Status Page, Web Customization, Multiple Subscriptions, Domain Resolution, and Reverse Proxy Support.
- Updated existing features for clarity and completeness.
- Modified the xray-checker.webp image file.
2026-01-12 23:32:57 +03:00
refreak
e0adb83e10 Include Docker installation reference in separate-server.md (#304)
* Include Docker installation reference in separate-server.md

Added import statement for Docker installation instructions.

* Update docs/install/subscription-page/separate-server.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: Yury Kastov <kastov@gog.sh>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-01-10 01:52:10 +03:00
kastov
2107cbe1d0 docs: update SDK version compatibility table for TypeScript SDK to reflect changes in Remnawave Panel version range 2026-01-08 01:04:10 +03:00
kastov
05025175c1 docs: update SDK version compatibility table for TypeScript SDK 2026-01-07 16:43:27 +03:00
kastov
f1ba1c8852 docs: clarify webhook payload scope versioning in documentation 2026-01-07 15:14:43 +03:00
kastov
1895670ccf refactor: webhooks documentation 2026-01-07 15:13:46 +03:00
kastov
f09cb15774 docs: v2.5.0 API changelog 2026-01-07 14:45:06 +03:00
Artem
c5c77f23a5 docs: add HWID devices webhook events documentation (#296)
- Add new section "HWID Devices" with user_hwid_devices.added and user_hwid_devices.deleted events
- Document payload structure containing user and hwidUserDevice objects
- Include TypeScript interface for HwidUserDevice entity
2026-01-07 14:31:55 +03:00
kastov
afedb3fc73 docs: update SDK version compatibility 2026-01-07 14:31:33 +03:00
Sergey Kutovoy
9f56367840 Merge pull request #301 from remnawave/awesome-xray-checker
docs: Add Features & Telegram buttons to xray-checker in Awesome Remn…
2026-01-06 23:54:37 +05:00
Sergey Kutovoy
4a9ba739c2 docs: Add Features & Telegram buttons to xray-checker in Awesome Remnawave
- Create xray-checker.md with key features
  - Add Telegram group link
  - Add expandable Features & More Info section
2026-01-06 20:10:41 +05:00
Davoyan
853dd3bfba Add ClashMac client (#299)
* Add ClashMac client

* Change client ID from 'ClashMac' to 'clashMac'

* Fix download link for macOS in clients.ts

Updated download links for macOS in clients.ts.
2026-01-06 00:35:20 +03:00
0-Kutya-0
eb55e77ace docs: mark Throne as supporting HWID on the Clients page (#293) 2025-12-30 20:49:38 +03:00
avsba001
2ed201e01d Update the Chinese translation of the documentation. (#285)
* Update AUTH_METHODS_YANDEX.md

* Update AUTH_METHODS_GITHUB.md

* Update AUTH_METHODS_PASSWORD.md

* Update AUTH_METHODS_POCKETID.md

* Update AUTH_METHODS_TELEGRAM.md

* Update PAGE_CONFIG_PROFILES.md
2025-12-29 01:11:14 +03:00
Nick
bba742454f Fix YA Auth (#288)
https://hub.docs.rw/p/6fe94a65-be4e-42fe-8841-ab56f45ad76d
2025-12-28 23:14:46 +03:00
Nick
73925574f2 Removed email references (#282)
* Removed email references

* fix должна
2025-12-25 15:24:23 +03:00
Nick
7c819f1916 Added info about upgrading sub page (#275) 2025-12-23 00:19:34 +03:00
kastov
862409419e docs: update subscription page configuration instructions to use Subpage Builder in Remnawave Dashboard 2025-12-20 19:33:59 +03:00
kastov
be3265490a docs: update SDK version compatibility table to include Remnawave Panel version 2.4.1 2025-12-20 19:30:02 +03:00
kastov
1141c91462 docs: update SDK version compatibility table to reflect Remnawave Panel version range 2.4.0 - 2.4.3 2025-12-20 19:29:36 +03:00
kastov
cbb74248c2 2025-12-20 08:30:15 +03:00
kastov
d5ed465bf2 docs: update SDK version compatibility table to specify Remnawave Panel version range 2025-12-20 08:27:13 +03:00
kastov
47dacf6c02 docs: update .env configuration for subscription page to include API token instructions 2025-12-20 02:04:35 +03:00
kastov
025746fec6 docs: update API changelog for v232-v240 2025-12-20 01:48:55 +03:00
kastov
40d733f849 docs: add Custom Claims authorization method for PocketID 2025-12-20 01:20:04 +03:00
kastov
427604651f docs: add changes v232-v240 2025-12-19 23:14:18 +03:00
kastov
6d4dcf934a docs: update SDK version compatibility table to include Remnawave Panel version 2.4.0 2025-12-19 22:58:13 +03:00
Nick
ad3b2972fa Update zapret-ru-gov.md (#267)
Removed unnecessary tips
2025-12-16 23:42:12 +03:00
kastov
35fbb5df50 docs: refine HWID Device Limit documentation and add Shadowrocket support 2025-12-12 18:14:28 +03:00
Vitalii Miagkov
ef57dcb31b docs: updated .env in awesome subscription-mini-app (#261) 2025-12-12 15:42:36 +03:00
Avaritia
b86bf1130e Нод порт каутион (#245) 2025-12-11 20:23:59 +03:00
kastov
60d68c60df fix: update subscription page raw keys image 2025-12-10 01:01:05 +03:00
kastov
b229602ef3 docs: add configuration option for displaying raw keys in subscription page 2025-12-10 00:42:20 +03:00
kastov
d90ebbff74 feat: update subscription-page preview 2025-12-09 21:57:02 +03:00
kastov
b7a0e9d00e docs: update SDK version compatibility table to include Remnawave Panel version 2.3.2 2025-12-09 07:08:10 +03:00
Vitalii Miagkov
cfda4e557a docs: updated migration info from 3 to 4 version (#250) 2025-12-08 17:54:29 +03:00
kastov
8f8c016036 docs: add Redis socket variable to environment variables documentation and remove HWID section 2025-12-08 06:48:14 +03:00
kastov
d64193cb14 feat: fine-funed notifications (v2.3.1) 2025-12-08 06:45:41 +03:00
kastov
d4c92385dc docs: update SDK version compatibility table to include additional Remnawave Panel versions 2025-12-08 06:34:29 +03:00
kastov
71e65f94ff docs: update SDK version compatibility table in TypeScript SDK documentation 2025-12-07 21:45:59 +03:00
kastov
5987c982c1 docs: add Flow Control section for VLESS in multiple languages 2025-12-07 21:36:48 +03:00
Jesus
54c97ceec5 go sdk (#247)
* chore: change link to docs.

* docs: add Go SDK documentation
2025-12-07 17:18:33 +03:00
Nick
66bb70538c Update remnanode docker-compose.yml (#243) 2025-12-04 23:56:06 +03:00
Vitalii Miagkov
c99a06e4c7 docs: updated docker-compose example for tinyAuth v4 (#242) 2025-12-02 16:33:21 +03:00
крысавдоме
5a1fccb222 fix typo in PAGE_CONFIG_PROFILES.md ru (#233) 2025-11-25 17:37:02 +03:00
Jesus
657d6d1a29 chore: change link to docs. (#234) 2025-11-25 17:36:47 +03:00
zuckerhalo
855fc29ecc docs: add custom headers and OS discrimination example (#230) 2025-11-24 21:21:50 +03:00
kastov
a728194488 docs: update AUTH_METHODS_GITHUB documentation to clarify the Authorization callback URL instructions 2025-11-15 21:58:39 +03:00
Ilay
cf6edc6674 Update awesome-remnawave (#211) 2025-11-15 16:10:54 +03:00
kastov
6ac988fc3e chore: remove outdated redirect for reverse proxies in Caddyfile 2025-11-15 16:09:30 +03:00
Nick
75e71b5d6b Info about gRPC transport (#220)
* Update PAGE_CONFIG_PROFILES.md

Add gRPC in supports transport

* Update PAGE_CONFIG_PROFILES.md

add

* Update PAGE_CONFIG_PROFILES.md

* Update PAGE_CONFIG_PROFILES.md
2025-11-14 15:45:17 +03:00
Andrey
34c57edca0 Added more sing-box clients to Templates section (#216) 2025-11-13 03:36:53 +03:00
Mishkat
cf0a44c1a8 Fix typos in environment-variables documentation (#217) 2025-11-13 03:36:40 +03:00
Тимур
779cef4b28 docs: fix 404 because of .html (#215) 2025-11-12 16:04:19 +03:00
PentiumB
55e3b7a13b Fix typo in server-routing documentation (#214) 2025-11-11 16:35:46 +03:00
Nikita
13acfff6c0 Added Flowvy client. (#213)
* Added Flowvy screenshot .

* Added Flowvy client.
2025-11-10 21:31:11 +03:00
kastov
c22bd801fe fix: typos 2025-11-09 18:24:16 +03:00
kastov
fef5aaef86 chore: update help articles 2025-11-09 18:23:40 +03:00
kastov
991bbf1e12 fix: typos 2025-11-09 18:15:52 +03:00
kastov
b1d1e256c6 chore: new help articles 2025-11-09 18:12:22 +03:00
kastov
bba7a56927 chore: new docs 2025-11-09 17:56:17 +03:00
pluralplay
3b53f4cbaf change RRP banner (#212) 2025-11-09 16:28:09 +03:00
kastov
61e5ce4acd - 2025-11-08 17:50:59 +03:00
kastov
89192e90e6 - 2025-11-08 02:29:06 +03:00
kastov
54519896ec - 2025-11-07 23:15:59 +03:00
kastov
86892aea95 2025-11-07 22:21:20 +03:00
kastov
6778e19799 2025-11-07 22:08:47 +03:00
kastov
06222cba38 - 2025-11-07 21:55:31 +03:00
Pavel Krivsoheev
e41ab2429b Correction of some small error in the RU documents (#210)
Corrected a typo in the subscription expiration text.
2025-11-07 18:00:03 +03:00
kastov
ca74e758bb 2025-11-07 04:28:47 +03:00
kastov
978cc810ce 2025-11-07 01:02:04 +03:00
kastov
47cbdee34b docs: new contract version 2025-11-06 17:01:58 +03:00
kastov
1f6a86db9d 2025-11-05 23:06:13 +03:00
kastov
9d879e883d 2025-11-05 23:01:13 +03:00
kastov
6dadba6504 2025-11-05 22:52:16 +03:00
kastov
0f319dc853 2025-11-05 22:45:34 +03:00
kastov
789c9a40df chore: – 2025-11-05 22:41:34 +03:00
kastov
86be03268a chore: update Caddyfile configuration 2025-11-05 20:35:07 +03:00
kastov
8c8fcc20a6 chore: update Caddy version in Dockerfile to 2.10 2025-11-05 20:28:28 +03:00
kastov
efa2e85af4 refactor: update Dockerfile to use Caddy instead of Nginx 2025-11-05 20:27:24 +03:00
avsba001
85e141848c Update PAGE_HOSTS.md (#206) 2025-11-05 18:22:33 +03:00
Erfan
76195ce056 feat[docs]: add backuper (#202) 2025-11-04 17:38:15 +03:00
avsba001
23556682a8 Update PAGE_CONFIG_PROFILES.md (#204) 2025-11-04 16:43:58 +03:00
avsba001
c7e895862f translate PAGE_EXTERNAL_SQUADS.md (#201)
Translate Chinese
2025-11-03 16:16:17 +03:00
kastov
def1660756 docs: update URLs in configuration 2025-11-03 03:07:00 +03:00
kastov
3c45c90676 docs: update panel version mapping 2025-11-02 22:19:15 +03:00
kastov
68613058cb docs: update contract and panel version mapping in typescript-sdk.md 2025-11-02 19:10:51 +03:00
avsba001
8679919b65 translate EDITOR_TEMPLATES_XRAY_JSON.md (#199) 2025-11-02 18:05:58 +03:00
avsba001
054abdb96b Update PAGE_INTERNAL_SQUADS.md (#198) 2025-11-02 18:05:48 +03:00
kastov
c9257c44dd docs: add PAGE_CONFIG_PROFILES.md 2025-10-31 06:33:35 +03:00
kastov
dc11d18587 docs: – 2025-10-31 05:46:15 +03:00
kastov
5a9b48a2e2 docs: fix formatting in PAGE_EXTERNAL_SQUADS.md 2025-10-31 04:48:38 +03:00
kastov
f4bde46e05 docs: standardize headings and formatting in PAGE_HOSTS.md across multiple languages 2025-10-31 04:46:12 +03:00
kastov
7129bb05df docs: clean up PAGE_HOSTS.md 2025-10-31 04:41:55 +03:00
kastov
220324d9db docs: update PAGE_HOSTS.md formatting 2025-10-31 04:41:15 +03:00
kastov
08c3f20cba docs: help-articles 2025-10-31 04:20:16 +03:00
Jesus
375f223360 docs: add Zapret RU GOV installation and Docker setup guide (#194)
* docs: add Zapret RU GOV installation and Docker setup guide

* Update docs/learn/zapret-ru-gov.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-10-29 18:37:20 +03:00
kastov
a0c75fa70b docs: update Rescue CLI command in quick-start guides 2025-10-28 22:33:19 +03:00
zuckerhalo
5231b344ea docs: add restoring password auth (#192) 2025-10-26 19:04:59 +03:00
kastov
a3e94cb891 docs: update Remnawave Panel version compatibility for SDK 2.2.26 2025-10-26 17:23:07 +03:00
kastov
0f21319ed1 fix: broken links 2025-10-26 06:08:47 +03:00
kastov
0a576a85b5 docs: new sdk version 2025-10-26 05:47:52 +03:00
zuckerhalo
57ea5f90fc feat: rework learning materials for 2.2.0 (#190)
* feat: rework learning materials for 2.2.0

* feat: response rules learning materials
2025-10-26 05:27:42 +03:00
kastov
60f4098a45 docs: update OAuth2 configuration instructions and streamline Telegram setup process 2025-10-26 01:50:22 +03:00
Yury Kastov
692fa45a45 Merge pull request #189 from zuckerhalo/main
Add /learn-en/server-routing.md
2025-10-25 00:31:56 +03:00
zuckerhalo
3035bcf103 Create /learn-en/server-routing.md 2025-10-24 23:06:41 +03:00
kastov
c9cc8e0b77 docs: specify network name in separate server configuration 2025-10-18 21:02:01 +03:00
kastov
8af8de77dc fix: typos 2025-10-15 21:10:53 +03:00
kastov
8c2f68a774 fix: typos 2025-10-15 03:19:00 +03:00
kastov
8176fc8e36 docs: add server routing guide 2025-10-15 03:19:00 +03:00
Yury Kastov
6df4fd8379 Merge pull request #176 from zuckerhalo/main
feat: Rework of Learning Materials
2025-10-14 16:30:24 +03:00
kastov
1a9dc1ef60 refactor: change paths 2025-10-14 16:28:59 +03:00
zuckerhalo
4613a2f4be fix 2025-10-13 16:34:19 +03:00
zuckerhalo
c65e46d9c3 add docs/use 2025-10-13 16:11:48 +03:00
kastov
d926057828 docs: add new contract version to SDK version compatibility table in TypeScript SDK documentation 2025-10-12 17:13:49 +03:00
kastov
d84492a64b docs: update SDK version compatibility table in TypeScript SDK documentation 2025-10-11 22:56:43 +03:00
kastov
121e221d08 fix: props 2025-10-11 18:59:27 +03:00
kastov
b828c17c39 refactor: reorganize ClientCard props and update CLIENTS data structure 2025-10-11 18:58:21 +03:00
pluralplay
54803cb085 update ClientCard visual style (#175)
add clients logo
fix alignment category device card
2025-10-11 18:33:54 +03:00
kastov
e4dbb9d795 refactor: update Telegram chat section formatting and enhance link visibility in Awesome Remnawave documentation 2025-10-11 01:59:52 +03:00
pluralplay
6d85db0061 add Remnafamily Link (#173) 2025-10-11 01:54:59 +03:00
Jesus
7530c31538 feat: add new image for best bot ever. (#174) 2025-10-11 01:54:22 +03:00
kastov
85bfedfdab refactor: simplify notice section in Clients documentation and update GitHubStars component to fetch star count from new API endpoint 2025-10-10 18:56:08 +03:00
kastov
06b0688202 fix: file name 2025-10-10 18:45:44 +03:00
kastov
e270689c58 refactor: remove author information from Client interface and instances in CLIENTS array 2025-10-10 18:43:22 +03:00
kastov
c0e18591ba fix: add !important to card background gradient 2025-10-10 18:41:11 +03:00
kastov
ed4f98403a feat: add preview image to Clients documentation for enhanced visual representation 2025-10-10 18:39:24 +03:00
kastov
db793f2050 refactor: update download links to point to the latest releases, enhance client descriptions, and add new clients to the list 2025-10-10 18:35:09 +03:00
kastov
d349be4f3b feat: add ClientCard and ClientsList components to MDXComponents 2025-10-10 18:09:37 +03:00
pluralplay
917092db54 Add new category in Awesome Remnawave and some fix (#172)
* - add proxy-сlients category
- fix PR link

* fix description

* update preview

* editing description

* - update preview card
- change category miniapp from commerce to misc

* refactor: update Remnawave client titles for clarity, enhance ProjectCard component with HWID support indicator, and improve CategoryNav styles for better layout
2025-10-10 16:43:38 +03:00
kastov
6b4b5993d3 docs: update image submission guidelines for Awesome Remnawave page 2025-10-10 07:47:51 +03:00
kastov
1d1e5870ae feat: redesign Awesome Remnawave page 2025-10-10 05:50:01 +03:00
Egor
86766a0b53 Update awesome-remnawave.md (#171)
* Update awesome-remnawave.md

* Add files via upload
2025-10-10 03:25:22 +03:00
kastov
b05235b2a6 fix: links 2025-10-09 08:41:18 +03:00
kastov
dbc74d3158 docs: remove outdated 'learn' blog and related images; update Docusaurus configuration with new redirect for blog path 2025-10-09 08:36:44 +03:00
kastov
f2fe08d88c docs: add instructions to restart Remnawave Panel container in subscription page documentation 2025-10-05 17:37:46 +03:00
kastov
f08d263fbf chore: update @scalar/docusaurus to version 0.7.18 and @scalar/types to version 0.3.0; upgrade zod to version 4.1.11 in package-lock.json 2025-10-05 03:29:24 +03:00
Ramedon
fdf1b55f0b Refactor remnawave-sub-page configuration (#167)
Update remnawave-sub-page configuration to new config method with traefik 3.1.7
2025-10-02 15:43:37 +03:00
Ramedon
49298e55fc Update traefik.md (#166)
Update traefik.md to new config method with traefik 3.1.7
2025-09-30 14:52:20 +03:00
kastov
a19dd62de9 docs: add missing SDK version compatibility entry for Remnawave Panel version 2.1.16 in TypeScript SDK documentation 2025-09-30 03:29:32 +03:00
Avaritia
3b5a298f3f Delete docs/guides/warp-outbound-over-wg.md (#164) 2025-09-29 18:56:25 +03:00
kastov
7e69986764 chore: update Docusaurus dependencies to version 3.9.1 and adjust @scalar/docusaurus version constraint; enhance environment variables documentation formatting 2025-09-29 08:51:21 +03:00
kastov
f2e9cd22b6 docs: update SDK version compatibility for Remnawave Panel in TypeScript SDK documentation 2025-09-25 15:14:11 +03:00
kastov
024bdff112 docs: add branding variables to environment variables documentation and update SDK version compatibility table 2025-09-25 04:00:43 +03:00
kastov
6dc7e29780 feat: add configuration options to preserve schema property order in Docusaurus 2025-09-23 18:23:55 +03:00
kastov
ff2560f548 chore: update @scalar/docusaurus and @scalar/types versions to 0.7.16 and 0.2.16 respectively; add new SDK version compatibility entry in TypeScript SDK documentation 2025-09-23 18:20:08 +03:00
legiz-ru
7df3533bc4 add new applications to HWID documentation (#162)
Added a link to Prizrak-Box and clarified HWID status for Throne.
2025-09-23 14:02:38 +03:00
kastov
d7d5c89f6c docs: add JWT_AUTH_LIFETIME variable to environment variables documentation 2025-09-16 15:37:40 +03:00
kastov
f510e2d2d6 docs: add missing SDK version compatibility entry for Remnawave Panel in TypeScript SDK documentation 2025-09-15 23:28:42 +03:00
kastov
71ff715cb2 docs: improve formatting of SDK version compatibility table in TypeScript SDK documentation 2025-09-15 14:58:13 +03:00
kastov
f32cd13a03 docs: consolidate SDK version compatibility entries in TypeScript SDK documentation 2025-09-15 14:57:19 +03:00
kastov
231e0bf346 docs: correct formatting in SDK version compatibility table in TypeScript SDK documentation 2025-09-15 14:55:48 +03:00
kastov
d3d7f346aa docs: remove duplicate entry in SDK version compatibility table in TypeScript SDK documentation 2025-09-15 14:48:57 +03:00
kastov
5d65f9ce63 docs: update SDK version compatibility table in TypeScript SDK documentation 2025-09-14 23:12:39 +03:00
Davoyan
a669d77d6d Add MTU configuration option for Warp/WireGuard in Xray (#153)
* Add MTU configuration option for Warp/WireGuard in Xray

Add mtu parameter to the Warp/WireGuard configuration in Xray.

Setting a specific MTU can help prevent packet fragmentation issues when tunneling traffic through Warp/Cloudflare. A value of 1280 is chosen as a safe default, which ensures compatibility across different networks and avoids potential connectivity issues.

* Update warp-outbound-over-wg.md
2025-09-11 00:59:52 +03:00
caribora
dadf095e29 Грамматические ошибки. (#152) 2025-09-10 11:58:16 +03:00
kastov
3ae7a0f11b docs: fix formatting in receiving-webhooks.md by adjusting details section 2025-09-08 13:46:23 +03:00
pluralplay
2419d02a39 Update receiving-webooks.md (#151) 2025-09-08 13:38:59 +03:00
kastov
6f954bdbb5 docs: typescript sdk versions 2025-09-03 22:29:35 +03:00
kastov
58fb335d7c chore: update package dependencies and improve CSS formatting
- Updated dependencies in package.json and package-lock.json, including @mantine/core, @mantine/hooks, @mdx-js/react, and others to their latest versions.
- Enhanced CSS formatting for better readability by adjusting unicode-range declarations in custom.css.
2025-09-01 23:33:51 +03:00
kastov
f21154f447 docs: update SDK version compatibility table in TypeScript SDK documentation 2025-08-30 21:21:34 +03:00
eGames
a0a0382c90 Update awesome-remnawave.md (#145)
update link
2025-08-28 09:33:48 +03:00
Vitalii Miagkov
d418fe3873 docs: improve docker-compose instructions for TinyAuth (#144) 2025-08-25 19:50:46 +03:00
Timur
674c67f946 chore: minor changes (#143)
- remove unnecessary websocket headers from nginx and angie examples
- upgrade nginx to 1.28
- align gzip_types
2025-08-25 17:22:32 +03:00
Sergey Kutovoy
f477a7ea7b Merge pull request #142 from machka-pasla/main
Add github.com/machka-pasla/remnawave-tg-shop to awesome remnawave
2025-08-18 17:29:42 +05:00
Machka Pasla
d168ad4789 Add files via upload 2025-08-18 15:26:05 +03:00
Machka Pasla
d93dfa553b Update awesome-remnawave.md 2025-08-18 15:24:35 +03:00
kastov
418b8883a0 fix: update subscription page deployment command in v2.1.0 guide 2025-08-14 06:36:21 +03:00
kastov
b85e018b36 feat: v2.1.0, update guide & versions 2025-08-13 19:53:51 +03:00
legiz-ru
95836210df add remnawave shuffle-proxies-order mihomo key info (#133)
* add remnawave shuffle-proxies-order mihomo key info

* fix shuffle-proxies-order key
2025-08-13 18:29:47 +03:00
Sergey Kutovoy
7a9867cf59 Merge pull request #135 from distillium/main 2025-08-13 20:07:55 +05:00
distillium
1b34691f73 Update Awesome
Indentation adjustment
2025-08-13 16:30:03 +03:00
Sergey Kutovoy
078348917a Merge pull request #134 from distillium/main 2025-08-13 17:10:04 +05:00
distillium
43a5ddc239 Update 2025-08-13 15:08:06 +03:00
distillium
2942a2ce71 Update (added spoilers) 2025-08-13 14:55:12 +03:00
distillium
ee739c01ff Update Awesome
The install/uninstall commands have been changed.
Added Ansible Role method
2025-08-13 14:34:14 +03:00
kastov
720d3a977a feat: enhance subscription page configuration documentation 2025-08-12 19:07:28 +03:00
Yury Kastov
0cbfe645b6 Merge pull request #130 from Davoyan/main
Second variant for group for direct connection
2025-08-11 20:06:48 +03:00
Davoyan
e0f0874254 Second variant for group for direct connection 2025-08-11 17:28:30 +03:00
Yury Kastov
a1902bf170 Merge pull request #127 from legiz-ru:main
create remnawave-mihomo-keys.md
2025-08-11 17:16:14 +03:00
kastov
6ac3c8ac2b refactor: change paths 2025-08-11 17:15:44 +03:00
Yury Kastov
5087511713 Merge pull request #129 from zuckerhalo:fix-docs
fix typos and grammar; apply american english style best practices
2025-08-11 17:11:54 +03:00
kastov
19e0d1bbc0 fix: clean up whitespace in quick-start.md 2025-08-11 17:11:10 +03:00
zzzuckerhhhalo
81ee0368af fix typos and grammar; apply american english style best practices 2025-08-11 14:28:05 +03:00
zzzuckerhhhalo
98124d7026 fix typos and grammar; apply american english style best practices in /docs 2025-08-11 13:58:13 +03:00
legiz-ru
386095d84f create remnawave-mihomo-keys.md 2025-08-11 11:13:14 +03:00
Sergey Kutovoy
61fe3b8a7f Merge pull request #126 from remnawave/geo
fix geosite/geoip rules
2025-08-10 01:05:02 +05:00
Sergey Kutovoy
b2f6d10299 fix geosite/geoip rules 2025-08-10 01:02:58 +05:00
kastov
2f2b070975 feat: docker 2025-08-09 22:31:26 +03:00
legiz-ru
259f0e7852 add support head meta theme-color (#122) 2025-08-05 12:51:37 +03:00
legiz-ru
f0f8ead2d4 hwid: add community forks (#121)
* hwid: add community forks

* Update docs/features/hwid-device-limit.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: Yury Kastov <kastov@gog.sh>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-08-05 11:21:30 +03:00
Sergey Kutovoy
443f672d3f Merge pull request #120 from distillium/Update-Awesome
Update awesome-remnawave.md
2025-08-04 18:07:00 +05:00
distillium
a6982dc315 Update docs/awesome-remnawave.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-08-04 15:59:57 +03:00
distillium
8fea2a844f Update docs/awesome-remnawave.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-08-04 15:59:47 +03:00
distillium
a17050b442 Update awesome-remnawave.md
Added Telegram Chat redirect buttons for tools:
- Remnawave Telegram Shop
- Remnawave Reverse Proxy by eGames
2025-08-04 15:43:45 +03:00
Under251
55bf044c0d docs: add CRM telegram notification variables (#116) 2025-08-01 10:44:16 +03:00
kastov
6bdadc7078 fix: correct typos and update typescript sdk 2025-07-30 05:22:25 +03:00
Ivan Kolesnikov
aaa5f9221d docs: update remnawave-reverse-proxy (#115) 2025-07-29 21:57:28 +03:00
kastov
65cf5ee334 feat: upgrading guide 2025-07-29 18:16:41 +03:00
kastov
893a5c8fda Update remnawave-node.md to enhance clarity and formatting 2025-07-29 06:04:33 +03:00
Sergey Kutovoy
6fbdda369d Merge pull request #102 from PentiumB/Comparison-update
Create comparison-of-functions.md
2025-07-25 07:15:25 +09:00
Sergey Kutovoy
1ecf0bb78a Merge pull request #110 from PentiumB/patch-2
Update remnawave-node.md
2025-07-25 03:45:40 +09:00
PentiumB
4a8868b3a0 Update remnawave-node.md 2025-07-24 14:29:51 +05:00
PentiumB
2dcfe5dae4 Update remnawave-node.md 2025-07-24 12:30:57 +05:00
PentiumB
6114fcbe4b Update docs/install/remnawave-node.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-24 12:27:54 +05:00
PentiumB
892ad1df19 Update remnawave-node.md
Editing of the Geosite item:
- item expanded and includes information on geoip;
- information on use added to the warning;
- example on geoip added.
2025-07-24 12:18:52 +05:00
Amir2012
474d8d8b5e Improve docs grammar (#109)
* Improve docs grammar

* Update docs/features/oauth2-configuration.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-23 01:11:50 +03:00
kastov
21cd4794fa chore: oauth2 guide 2025-07-22 19:46:47 +03:00
kastov
1366e5e027 chore: i18n guide 2025-07-21 19:42:35 +03:00
kastov
147c60d8f9 chore: remove deprecated JPEG images and update references to WEBP format in documentation 2025-07-20 20:56:54 +03:00
PentiumB
b62332709f Merge branch 'remnawave:main' into Comparison-update 2025-07-20 18:38:06 +05:00
PentiumB
0389477d7c Update comparison-of-functions.md 2025-07-20 18:37:50 +05:00
kastov
dd30978be8 docs: learn 2025-07-18 21:00:05 +03:00
kastov
efed69f57f fix: test 2025-07-18 18:13:32 +03:00
kastov
227f66a04b chore: upgrade Docusaurus dependencies to version 3.8.1 and adjust @scalar/docusaurus version in package.json and package-lock.json 2025-07-18 18:01:05 +03:00
kastov
26cd2385b5 chore: align Docusaurus plugin-client-redirects and module-type-aliases versions to 3.7.0 in package.json and package-lock.json 2025-07-18 17:46:25 +03:00
kastov
dcfe734c04 chore: downgrade Docusaurus dependencies to version 3.7.0 in package.json and package-lock.json 2025-07-18 17:42:15 +03:00
kastov
1832396336 chore: update ajv to version 8.17.1 2025-07-18 17:35:10 +03:00
kastov
acefd04413 chore: add .npmrc copy step in Dockerfile 2025-07-18 17:30:39 +03:00
kastov
6b6f521472 fix: deps 2025-07-18 17:21:57 +03:00
kastov
10921d466c chore: change npm ci to npm install in Dockerfile 2025-07-18 17:14:42 +03:00
kastov
f918ed3222 chore: update Node.js version and dependencies in Dockerfile and package.json 2025-07-18 17:13:26 +03:00
kastov
75d78a2c29 fix: Dockerfile name 2025-07-18 17:07:56 +03:00
kastov
04b704023e docs: Dockerfile 2025-07-18 16:57:09 +03:00
kastov
e658be3f3e docs: disable last update author and time display in Docusaurus configuration 2025-07-18 16:51:08 +03:00
PentiumB
506eb9bc98 Update remnawave-node.md (#104)
A small addition to the description of "XRay SSL cert for Node" that this item is not needed for reality.
2025-07-18 16:38:39 +03:00
kastov
cfc7ca64b2 docs: update section header for user management in the guide 2025-07-17 04:17:47 +03:00
kastov
e910df0c26 docs: refine and expand the guide on using the Remnawave panel, including detailed instructions on host creation, user management, and subscription retrieval 2025-07-17 04:07:16 +03:00
kastov
a4b20c5345 docs: quick start draft guide 2025-07-17 01:42:25 +03:00
kastov
d084d36dcc docs: add compatibility for Remnawave Panel version 1.6.16 in TypeScript SDK documentation 2025-07-16 23:07:26 +03:00
PentiumB
0c2c34b6ec Update comparison-of-functions.md 2025-07-16 17:48:57 +05:00
PentiumB
25ec149689 Update comparison-of-functions.md
Work on mistakes
2025-07-16 17:26:12 +05:00
PentiumB
40e2f7266c Update docs/overview/comparison-of-functions.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-16 00:19:36 +05:00
PentiumB
ef8e23aa37 Update docs/overview/comparison-of-functions.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-07-16 00:19:29 +05:00
PentiumB
75257f9c65 Create comparison-of-functions.md 2025-07-16 00:06:34 +05:00
distillium
b35b093c2b Update Awesome (warp-native) (#99)
- Added tcpFastOpen to outbound template
- Added control commands
2025-07-13 18:26:28 +03:00
vffuunnyy
baa9749e03 Update caddy.md (#100)
Fix http01-challenge for certs
2025-07-13 18:26:03 +03:00
Sergey Kutovoy
42733d2c6f Merge pull request #98 from maposia/main
Update environment variable descriptions in documentation for Remna sub Miniapp
2025-07-12 04:03:16 +09:00
Vitalii Miagkov
19418d3ab7 Merge branch 'remnawave:main' into main 2025-07-11 21:41:55 +03:00
Sergey Kutovoy
a5b03da0b6 Merge pull request #95 from pluralplay/main
Update remnawave-node.md
2025-07-09 15:25:47 +09:00
pluralplay
51856771cb Update remnawave-node.md
add caution remnawave-node install
2025-07-08 23:18:34 +03:00
kastov
2748c95e34 docs: update SDK version compatibility in TypeScript SDK documentation 2025-07-08 20:23:16 +03:00
Alexey
a62f24fd8a Update awesome-remnawave.md (#94)
* Update awesome-remnawave.md

* Add files via upload

* Delete static/awesome/remnawave-script.webp

* Rename remnawave-script (2).webp to remnawave-script.webp

* Update awesome-remnawave.md

* Update awesome-remnawave.md

* Update awesome-remnawave.md

* Update awesome-remnawave.md

* Update awesome-remnawave.md
2025-07-08 20:22:41 +03:00
kastov
a38b7972dc fix: correct typo 2025-06-30 20:38:04 +03:00
kastov
5b3ceb5979 fix: update phrasing for Inbound configuration in documentation and correct environment variable settings 2025-06-30 20:33:44 +03:00
jomertix
c7f75258e0 refactor: new profile and squads system (#92)
* Merge branch 'main' into pr/jomertix/92

* fix: update terminology and formatting for Inbound references in the new profiles and squads documentation
2025-06-30 20:28:59 +03:00
kastov
5050e48de3 fix: improve phrasing in user card description 2025-06-30 19:42:08 +03:00
kastov
1debea4fef fix: correct typos 2025-06-30 19:41:50 +03:00
kastov
2ca5f97eb6 fix: typos x2 2025-06-30 19:27:46 +03:00
kastov
a4d6992d34 fix: typos 2025-06-30 19:19:09 +03:00
kastov
3e9a2a2268 feat: summing up config&profiles 2025-06-30 19:16:14 +03:00
distillium
7bc82299cd Corrects the display of the list (#91) 2025-06-27 07:15:33 +03:00
distillium
543a3344b7 Update Awesome Remnawave (#90)
* Add files via upload

* Remnawave Backup & Restore by distillium

* Merge branch 'remnawave:main' into main

* Add files via upload

* Update awesome-remnawave.md

* Обновить документы/awesome-remnawave.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/awesome-remnawave.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-06-26 22:47:31 +03:00
distillium
1a245ceb4b Update Awesome Remnawave (#88)
* Add files via upload

* Remnawave Backup & Restore by distillium
2025-06-23 01:39:33 +03:00
kastov
855f8eef69 docs: update installation steps and modify Traefik network configuration 2025-06-22 15:45:25 +03:00
kastov
91f60c1242 docs: add contract version mapping for Remnawave Panel 1.6.14 2025-06-15 21:02:32 +03:00
kastov
dc1779b054 docs: clean up HWID device limit documentation by removing outdated provider ID section 2025-06-15 18:20:03 +03:00
kastov
625f5318cb docs: add contract version mapping for Remnawave Panel 1.6.13 2025-06-14 21:08:38 +03:00
kastov
63af979058 docs: add additional contract version mappings for Remnawave Panel 2025-06-13 23:40:05 +03:00
Yury Kastov
6fb833ed11 Merge pull request #78 from frayZV:main
fix: change cache to default
2025-06-09 19:20:10 +03:00
Dmitriy
1464a54a41 collation of documentation 2025-06-08 23:27:21 +03:00
Dmitriy
23f1aea77f fix: change cache to default 2025-06-08 23:13:31 +03:00
kastov
7f0ca75f21 docs: add missing contract version mapping for Remnawave Panel 2025-06-04 20:52:34 +03:00
Yury Kastov
f4f9f8cb35 Merge pull request #75 from DigneZzZ/patch-1
Update warp-outbound-over-wg.md
2025-06-03 18:19:02 +03:00
Alexey
0116b98f7b Update warp-outbound-over-wg.md 2025-06-03 18:17:27 +03:00
kastov
249a261a47 docs: remove unnecessary whitespace from remnawave-node installation documentation 2025-06-02 18:42:52 +03:00
kastov
41053277e8 docs: update remnawave-node installation instructions to reflect new log directory structure 2025-06-02 18:29:35 +03:00
kastov
863e6d4d2a docs: update geofileviewer section with improved formatting and add new screenshot 2025-06-02 18:13:17 +03:00
Sergey Kutovoy
201ba300f5 Merge pull request #72 from jomertix/patch-1
Add geofileviewer to the awesome
2025-06-02 04:34:44 +09:00
jomertix
825bac9a4a docs: add screenshot showing geofileviewer usage 2025-06-01 21:17:37 +03:00
jomertix
880a976d6f refactor: standardize v2fly geofileviewer in the awesome to common project format and style 2025-06-01 21:10:49 +03:00
jomertix
e78b288809 Merge branch 'remnawave:main' into patch-1 2025-06-01 20:54:06 +03:00
kastov
54fab1a4ce docs: enhance receiving-webhooks documentation to include Service object and new event types 2025-06-01 15:23:24 +03:00
kastov
ae4ec0e40c docs: update contract version for Remnawave Panel in TypeScript SDK documentation 2025-05-27 18:55:50 +03:00
jomertix
5c13aa1942 Add geofileviewer to the list 2025-05-25 03:03:40 +03:00
kastov
e6662b4e12 docs: add new contract version for Remnawave Panel in TypeScript SDK documentation 2025-05-24 17:43:22 +03:00
Yury Kastov
73cf7078cf Merge pull request #71 from frayZV:main
chore: clarify volume mounts
2025-05-24 14:53:55 +03:00
Yury Kastov
4db1b07a54 Merge pull request #70 from Capybara-z:add-remnasetup
add RemnaSetup to awesome-remnawave list
2025-05-24 14:53:11 +03:00
Yury Kastov
1382d5fa0b Merge pull request #69 from DigneZzZ:patch-2
Create warp-outbound-over-wg.md
2025-05-24 14:52:21 +03:00
Yury Kastov
16fb136c0b Merge pull request #67 from DigneZzZ:patch-1
Update awesome-remnawave.md
2025-05-24 14:50:45 +03:00
kastov
d2d0773dbf docs: add backup and restore scripts for Remnawave, including installation instructions and usage warnings 2025-05-24 14:50:08 +03:00
kastov
0ca9b35ac0 docs: add new contract version for Remnawave Panel in TypeScript SDK documentation 2025-05-24 01:04:43 +03:00
kastov
c07a441c86 docs: update hwid-device-limit, receiving-webhooks, and environment-variables documentation to include new user fields and bandwidth usage notifications 2025-05-23 18:42:29 +03:00
kastov
07de9070f6 docs: update contract version for Remnawave Panel in TypeScript SDK documentation 2025-05-23 18:26:22 +03:00
Dmitriy
f6441a3a2c Merge branch 'remnawave:main' into main 2025-05-22 18:18:11 +03:00
kastov
0e4cfea09b docs: remove backup and restore script sections from awesome-remnawave.md 2025-05-22 17:48:43 +03:00
Fraybyl
fc5d8e9e14 chore: add link to assets directory 2025-05-22 17:21:00 +03:00
Fraybyl
123e915eb5 chore: clarify volume mounts 2025-05-22 17:17:33 +03:00
Vitalii Miagkov
beea564f99 Update environment variable descriptions in documentation for Remna sub Miniapp 2025-05-22 10:30:53 +03:00
Capybara-z
79a96992fd fix: translate RemnaSetup description to English and add image 2025-05-21 22:32:39 +03:00
Capybara-z
bf3a2b10a5 add RemnaSetup to awesome-remnawave list 2025-05-21 22:15:28 +03:00
Alexey
a32243fea4 Create warp-outbound-over-wg.md 2025-05-21 13:14:29 +03:00
Alexey
4e79f9a2c0 Update awesome-remnawave.md 2025-05-20 13:59:51 +03:00
kastov
43ad05c802 docs: clarify domain name format for SUB_PUBLIC_DOMAIN in remnawave subscription page 2025-05-19 22:39:38 +03:00
kastov
a8263c8f99 chore: update remnawave-telegram-shop-bot image 2025-05-19 17:12:44 +03:00
Yury Kastov
6d321d476d Merge pull request #66 from Jolymmiles/main 2025-05-19 17:11:13 +03:00
Yury Kastov
2b48660c1a Merge pull request #64 from DigneZzZ:patch-3
Update remnawave-node.md
2025-05-19 17:02:33 +03:00
kastov
8efd5fdee7 Merge branch 'main' into pr/DigneZzZ/64 2025-05-19 17:02:12 +03:00
Yury Kastov
0b482db51f Merge pull request #63 from frayZV:nginx-rework
fix: update nginx configuration
2025-05-19 16:59:32 +03:00
Yury Kastov
7ca970b60f Merge pull request #62 from frayZV:angie
feat: angie reverse proxy
2025-05-19 16:58:30 +03:00
Yury Kastov
233a585366 Merge pull request #60 from frayZV:main
feat: XRay ssl certs
2025-05-19 16:57:37 +03:00
Jesus
885a2e273e Revert "Create devcontainer.json"
This reverts commit e65f7e2606.
2025-05-19 16:56:50 +04:00
Jesus
392752b7c8 chore: add button for telegram bot documentation. 2025-05-19 16:55:52 +04:00
Jesus
bbd4da1ccd Merge branch 'remnawave:main' into main 2025-05-19 16:54:35 +04:00
Alexey
c8918231c1 Update remnawave-node.md 2025-05-19 11:16:49 +03:00
Alexey
870a8166d4 Update remnawave-node.md 2025-05-19 11:12:25 +03:00
Fraybyl
864964600a fix: fix SSL 2025-05-19 03:21:51 +03:00
Fraybyl
df67bb828e fix: return OCSP, cause zeroSSL) 2025-05-19 03:17:39 +03:00
Fraybyl
010323ccbc fix: decrease cache size 2025-05-19 03:13:41 +03:00
Fraybyl
6d5740636b fix: update nginx configuration 2025-05-19 03:03:48 +03:00
Fraybyl
8c5d4e95cd fix: add support Gzip 2025-05-19 03:00:10 +03:00
Fraybyl
d96a6c3679 fix: add support TLSv1.2 2025-05-19 02:57:32 +03:00
Fraybyl
ba3df3ed93 fix: delete unused header 2025-05-19 02:35:18 +03:00
Fraybyl
e821f562bd fix: open 80 port for acme 2025-05-19 01:37:47 +03:00
Fraybyl
8de6c45fd7 fix: ssl path 2025-05-19 01:26:45 +03:00
Fraybyl
0314568609 fix: add resolver 2025-05-19 01:25:04 +03:00
Fraybyl
2769926d1c feat: angie reverse proxy 2025-05-19 01:17:24 +03:00
Fraybyl
c8e7cc8b54 feat: XRay ssl certs 2025-05-18 23:50:56 +03:00
kastov
7cd2a1cea3 docs: update SDK version compatibility table in TypeScript SDK documentation 2025-05-16 19:20:29 +03:00
Sergey Kutovoy
ae78b44d00 Merge pull request #59 from frayZV/main
feat: node logging
2025-05-15 12:53:58 +05:00
Fraybyl
f847e91687 feat: node logging 2025-05-15 10:43:45 +03:00
kastov
243bc6e519 docs: correct variable descriptions in subscription page template 2025-05-14 17:04:34 +03:00
Yury Kastov
40b9458aa3 Merge pull request #58 from frayZV:main
feat: Custom template
2025-05-14 16:59:35 +03:00
kastov
460cc7a97e docs: enhance subscription page template instructions and examples 2025-05-14 16:59:14 +03:00
Fraybyl
a95285f712 fix: formatting and text 2025-05-14 16:51:26 +03:00
Fraybyl
56e1a9158a fix: formatting 2025-05-14 16:46:05 +03:00
Fraybyl
1889f2d452 feat: Custom template 2025-05-14 16:43:59 +03:00
Sergey Kutovoy
b20c8bdcf4 Merge pull request #57 from mishablokhin/main
Updated docs
2025-05-14 17:00:08 +05:00
mishablokhin
7da0215bcf Fix formating 2025-05-14 14:46:34 +03:00
mishablokhin
686df8fb44 Updated docs for Remnawave v1.6.0 (subscription page docker-compose file structure and envs) and Migrate v1.4.0 with custom headers support 2025-05-14 14:35:22 +03:00
Sergey Kutovoy
65f8a2cd5e Merge pull request #56 from Jolymmiles/patch-1
chore: add telegram shop bot to list.
2025-05-14 14:50:39 +05:00
Jesus
c3ed786722 fix: solve errors from bot. 2025-05-14 13:46:56 +04:00
Jesus
e65f7e2606 Create devcontainer.json 2025-05-14 12:39:44 +03:00
Jesus
d5b56e31c6 chore: add telegram shop bot to list.
chore: add telegram shop bot to list.
2025-05-14 12:36:36 +03:00
kastov
92bbabb6ed docs: update Postgres password generation to use a 24-character random string 2025-05-12 19:22:24 +03:00
Alexey
c749a41e7b Rename Remnawave-script.webp to remnawave-script.webp (#52) 2025-05-11 18:10:17 +03:00
kastov
a55d782de4 fix: telegram notification thread IDs to be empty and add note about Telegram Group Chat ID format in environment variables documentation 2025-05-11 17:19:04 +03:00
Sergey Kutovoy
cc01cf01b8 Merge pull request #51 from maposia/main
Add documentation for setting up TinyAuth with Nginx for panel security
2025-05-11 16:47:30 +05:00
Vitalii Miagkov
697f380f75 Update tinyAuth usage and fix indentation in Nginx config 2025-05-11 14:45:24 +03:00
Vitalii Miagkov
fd9f79c8d2 Fix inconsistent indentation in tinyAuth Nginx config example 2025-05-11 14:38:31 +03:00
Vitalii Miagkov
7f2568601a Fix typo in TinyAuth for Nginx slug path 2025-05-11 12:02:54 +03:00
Vitalii Miagkov
8e5505eb20 Add documentation for setting up TinyAuth with Nginx for panel security 2025-05-11 11:59:08 +03:00
kastov
96e16d5ef4 docs: update contract version mapping for Remnawave Panel 2025-05-11 03:16:57 +03:00
kastov
26293316a5 docs: add warning about serving Remnawave on root path only 2025-05-11 02:09:28 +03:00
kastov
c09deef5b9 docs: update app-config.json path in upgrading guide for version 1.6.x 2025-05-11 02:01:30 +03:00
kastov
598a489fa5 fix: update directory paths in documentation from ~/opt/remnawave to /opt/remnawave 2025-05-11 01:22:01 +03:00
Dmitriy
31f3840a4d feat: add zero trust guide (#50)
* feat: zero trust guide

* fix: sidebar position

* fix: png -> webp

* fix: remove ```
2025-05-10 23:40:16 +03:00
kastov
fa3108276e fix: python sdk 2025-05-10 22:12:01 +03:00
Yury Kastov
60ceb2ee13 Merge pull request #49 from sm1ky/patch-1
Update SDK Python data
2025-05-10 22:04:19 +03:00
Artem
b743480594 Update SDK Python data 2025-05-10 20:59:02 +02:00
kastov
b55a59dc84 docs: v1.6.x upgrading guide 2025-05-10 21:31:51 +03:00
Sergey Kutovoy
b66838c9b8 Merge pull request #48 from remnawave/fix-url
Fix frontend github link
2025-05-10 23:05:33 +05:00
Sergey Kutovoy
2849f85c40 Fix frontend github link 2025-05-10 23:05:02 +05:00
kastov
c50b7199bb refactor: change admonition placement 2025-05-10 20:33:51 +03:00
kastov
bbac4c9a32 docs: add XTLS-SDK 2025-05-10 20:29:00 +03:00
kastov
ab527b8d3e docs: update SDK position and add full examples section to TypeScript SDK guide 2025-05-10 20:21:42 +03:00
kastov
25d73bc4eb docs: add PythonSDK placeholder 2025-05-10 20:18:05 +03:00
kastov
8a10b10b05 docs: add typescript sdk guide 2025-05-10 20:13:32 +03:00
kastov
c84126ded5 docs: update Telegram OAuth image format in documentation 2025-05-09 18:46:12 +03:00
kastov
cb3ee718ec docs: refine .env variable description for Telegram OAuth setup 2025-05-09 18:33:42 +03:00
kastov
dc299573cf docs: clarify Telegram OAuth feature description in documentation 2025-05-09 18:32:54 +03:00
kastov
e6168f8dcf docs: add telegram oauth guide 2025-05-09 18:30:07 +03:00
kastov
2c3b453d9b docs: add PM2 monitor command to useful commands guide 2025-05-09 02:48:50 +03:00
kastov
4475ec1c98 chore: update sidebar positions and add truncation comments in updating guides 2025-05-09 02:39:28 +03:00
Alexey
4b63fde3e4 update remnawave-scripts (#46)
* update remnawave-scripts

* Add files via upload

* Update awesome-remnawave.md

* Update awesome-remnawave.md

* Update awesome-remnawave.md

* refactor: enhance documentation layout
2025-05-09 02:21:01 +03:00
kastov
a984022e3e docs: enhance environment variables documentation with examples
- Added a section on changing environment variables, including instructions for editing the `.env` file.
- Included detailed examples for various environment variables to aid user understanding and configuration.
2025-05-09 02:14:27 +03:00
kastov
9434da4498 fix: paths mappings 2025-05-08 05:53:12 +03:00
kastov
7e9296d027 fix: update landing page text 2025-05-07 23:10:12 +03:00
kastov
8107b7f2ec feat: update Docusaurus configuration and landing page links
- Enabled display of last update author and time in the documentation.
- Updated the landing page button link to redirect to the new introduction page.
- Added a redirect from '/docs/' to '/docs/overview/introduction' in the configuration.
2025-05-07 23:01:19 +03:00
kastov
3845a15adf feat: add landing page, refactor docs 2025-05-07 22:45:09 +03:00
kastov
9e0278c11a feat: update Docusaurus configuration for redirects and improve quick-start documentation
- Added a redirect from '/category/reverse-proxies' to '/reverse-proxies' in docusaurus.config.ts.
- Updated quick-start.md to include a command for creating a docker-compose.yml file and corrected the numbering of steps.
- Removed the obsolete _category_.yml file for reverse proxies.
2025-05-07 16:28:12 +03:00
Sergey Kutovoy
1b22d60f18 Merge pull request #37 from metgen/main
docs: add telegram env for notifications in group chat with topics
2025-05-06 00:31:11 +05:00
Sergey Kutovoy
2e37028cc6 Merge branch 'main' into main 2025-05-06 00:29:48 +05:00
metgen
2fbda555d4 Add yarn.lock file for ignore 2025-05-05 20:43:19 +03:00
metgen
87134615df Remove yarn.lock from the repository 2025-05-05 20:31:35 +03:00
Amir2012
ca293753a6 Improve Docs (#43)
* Improve Docs Grammar

* Update docs/features/hwid-device-limit.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/features/hwid-device-limit.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/installation/env-variables.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/installation/env-variables.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/panel-security/caddy-with-custom-path.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/panel-security/caddy-with-custom-path.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/subscription-templating/subscription-templates.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/subscription-templating/subscription-templates.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/installation/reverse-proxies/try-cloudflare.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/panel-security/caddy-with-minimal-setup.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update docs/panel-security/caddy-with-minimal-setup.md

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-05-03 18:27:19 +03:00
Sergey Kutovoy
a9144b43d6 Merge pull request #42 from prettyleaf/patch-1
docs: heading fix
2025-05-01 12:48:40 +05:00
Ivan Kolesnikov
8f4b035e6b heading fix
environment variables has wrong heading, so it appears like another project in headings list
2025-05-01 14:11:25 +07:00
Yury Kastov
f3cbb485a2 Merge pull request #40 from iphizic:main
Add Ansible playbook to awesome remnawave
2025-04-30 11:44:11 +03:00
kastov
fd799e6b2f fix: update ansible.webp image in the awesome projects section 2025-04-30 11:43:51 +03:00
Sergey Kutovoy
a6b0188a11 Merge pull request #38 from voronin9032/fix-docs
docs: fix typo
2025-04-28 00:12:35 +05:00
iphizic
6cc571e078 Fix translation 2025-04-27 22:09:23 +03:00
iphizic
69043cedb2 remove wrong empty string 2025-04-27 22:07:13 +03:00
iphizic
f56b3fb035 remove some spaces 2025-04-27 22:05:28 +03:00
iphizic
363ad67c2b Fix issues from comments 2025-04-27 22:01:43 +03:00
iphizic
e7ce4dc94c fix typo 2025-04-27 21:27:21 +03:00
iphizic
94b86a500b Fix typo and issues. 2025-04-27 21:23:24 +03:00
iphizic
b0101d814a Fix syntax error 2025-04-27 21:19:00 +03:00
iphizic
1ac633b14d Add ansible project to awsome projects. 2025-04-27 21:11:16 +03:00
Ilya Voronin
c158ab96ba docs: fix typo 2025-04-25 22:30:17 +03:00
metgen
283d2feb77 docs: fix md syntax 2025-04-25 00:04:53 +03:00
metgen
ffeb12bb8e docs: add telegram env for notifications in group chat with topics 2025-04-24 23:55:35 +03:00
kastov
5487b0dbca docs: Update HWID device limit documentation 2025-04-20 13:42:02 +03:00
Yury Kastov
12dfea650b Merge pull request #35 from maposia/main
Update env mini app
2025-04-19 17:57:59 +03:00
Vitalii Miagkov
7e9e2b1be7 Update env mini app
added to env REDIRECT_LINK
2025-04-18 12:54:39 +03:00
Yury Kastov
5aab4b5c96 Merge pull request #34 from momai/patch-1
Ensure public access to /api/sub/ for subscription functionality
2025-04-17 11:29:48 +03:00
Alex
3ecd86af16 Ensure public access to /api/sub/ for subscription functionality
The /api/sub/ endpoint must remain publicly accessible to allow subscription clients to function correctly.  
This update splits Traefik routing into two separate routers:  
- `/api/sub/` without IP restrictions  
- everything else under IP-based access control via `ip-allow-list`.
2025-04-16 01:07:12 +03:00
Yury Kastov
3c2ccd8559 Merge pull request #33 from maposia:main
Added Awesome Subscritption Mini App
2025-04-15 22:07:38 +03:00
kastov
8f1938fb03 docs: Improve clarity and formatting in Remnawave Telegram Subscription Mini App section 2025-04-15 22:07:15 +03:00
Vitalii Miagkov
64605200e7 added img for mini app 2025-04-15 20:48:05 +03:00
Vitalii Miagkov
7e33b5eb92 Update awesome readme list 2025-04-15 20:46:45 +03:00
kastov
1636c8733a fix: typo 2025-04-14 21:51:25 +03:00
kastov
e735dc261d docs: guide for webhooks 2025-04-13 23:04:02 +03:00
Yury Kastov
6266530044 Create FUNDING.yml 2025-04-13 21:24:32 +03:00
kastov
7b4226b22a docs: Update section titles for Remnawave Reverse Proxy and Restore Script for consistency 2025-04-13 17:04:17 +03:00
Yury Kastov
69e8a60623 Merge pull request #32 from blagodaren:docs-rem-rev
Add Remnawave Reverse Proxy script to Awesome Remnawave
2025-04-13 16:54:33 +03:00
kastov
b7ab1947a3 docs: Update section title for Remnawave Reverse Proxy to include eGAMES 2025-04-13 16:53:53 +03:00
kastov
bb0a8cc122 Merge branch 'main' into pr/blagodaren/32 2025-04-13 16:52:05 +03:00
Yury Kastov
aa0a5002c6 Merge pull request #31 from DigneZzZ:patch-1
Add Remnawave Backup and Restore scripts to Awesome Remnawave
2025-04-13 16:36:41 +03:00
radik
3c5e4e408b feat(docs): Add Installation Guidelines disclamer 2025-04-13 11:39:43 +03:00
radik
8215b68004 feat(docs): Add Remnawave Reverse Proxy script to Awesome Remnawave 2025-04-13 11:34:00 +03:00
Alexey
320950b868 Add files via upload 2025-04-12 21:45:55 +03:00
Alexey
d2618ca7a4 Add Remnawave Backup and Restore scripts to Awesome Remnawave 2025-04-12 21:44:48 +03:00
kastov
386952b821 docs: add note that HWID Device Limit is optional and disabled by default 2025-04-10 19:12:50 +03:00
kastov
d53a84d108 fix: correct typo in hwid device limit documentation 2025-04-10 15:49:13 +03:00
kastov
20a5ba078c docs: enhance hwid device limit documentation with emphasis on HWID requirement and error response 2025-04-10 15:42:14 +03:00
kastov
aaa8872c21 fix: correct typo in hwid device limit documentation 2025-04-10 15:39:58 +03:00
kastov
269db8016c feat: hwid device limit guide 2025-04-10 15:34:57 +03:00
kastov
e164a174da docs: update subscription templates to clarify CUSTOM_SUB_PREFIX usage and provide example 2025-04-08 14:41:08 +03:00
Yury Kastov
9ceaf33652 Merge pull request #30 from DigneZzZ/patch-1
Additional infromation about CUSTOM_SUB_PREFIX
2025-04-07 20:41:11 +03:00
Alexey
573cdb5848 Update subscription-templates.md 2025-04-07 14:41:22 +03:00
kastov
38a2b4f0e0 fix: clarify password hashing algorithm change in 1.5.x updating guide 2025-04-07 00:56:01 +03:00
kastov
a0d0b83cc3 fix: correct section title and typo in updating guide for 1.5.x 2025-04-06 23:11:53 +03:00
kastov
bcc0db7c9f feat: updating guide for 1.5.x 2025-04-06 22:49:34 +03:00
Yury Kastov
45f8db9856 Merge pull request #29 from DigneZzZ:patch-1
Add Legacy Subscription Page Support Section to Migration Guide
2025-04-06 21:42:09 +03:00
Alexey
3c559ac588 Enhance Marzban Migration Guide with Legacy Subscription Details 2025-04-06 00:31:39 +03:00
Alexey
5bc234ae17 Added information about sub-page and secret-key marzban 2025-04-06 00:18:23 +03:00
kastov
72598b6124 fix: path to Remnawave configuration file in subscription templates documentation 2025-04-05 17:19:33 +03:00
kastov
5e7a4ea36c Update client-configuration.md to include instructions for restarting the subscription-page container after changes 2025-04-05 17:17:49 +03:00
Yury Kastov
769d2ca90b Merge pull request #27 from Nao-Gi/patch-1
Update try-cloudflare.md
2025-03-31 20:57:50 +03:00
Yury Kastov
a53d1c573f Update docs/installation/reverse-proxies/try-cloudflare.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-03-31 20:57:44 +03:00
Nao-Gi
0d775fa86e Update try-cloudflare.md
Fix: corrected indentation
2025-03-31 10:20:43 -04:00
kastov
e28de8f858 feat: subscription-page confiuration description 2025-03-31 16:47:39 +03:00
kastov
21ce1f6788 refactor: update installation instructions in index.md and improve formatting in marzban.md 2025-03-29 22:54:01 +03:00
Yury Kastov
0f04e54679 Merge pull request #26 from DigneZzZ/patch-2
Update index.md
2025-03-29 22:50:39 +03:00
Sergey Kutovoy
4f04d4db8e Merge pull request #15 from DigneZzZ/patch-1
Update marzban.md
2025-03-29 16:33:00 +05:00
Alexey
9d74d4efeb Update index.md
сделал покороче
2025-03-28 18:25:13 +03:00
Alexey
bd4528bdeb Add files via upload 2025-03-28 18:21:01 +03:00
Alexey
e49f54cb77 Update marzban.md 2025-03-28 18:07:42 +03:00
Alexey
cfb836f387 Update docs/awesome-remnawave/index.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-03-28 17:24:59 +03:00
Alexey
a56b71b0a5 Update docs/awesome-remnawave/index.md
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2025-03-28 17:24:40 +03:00
Alexey
64b0b14f52 Update index.md 2025-03-28 17:21:22 +03:00
kastov
5879c0e20c docs: update meta title and description formatting in subscription templates 2025-03-27 03:18:05 +03:00
Yury Kastov
415a6b9c09 Merge pull request #25 from metgen/main
Fix typo and add some changes in subscription page docs
2025-03-27 03:16:12 +03:00
metgen
f0124c0412 docs: add new enviromend in docker-compose file of subscription-page 2025-03-26 19:37:25 +03:00
metgen
8247cc0b53 docs: add caddy config for sub page 2025-03-26 19:29:38 +03:00
metgen
192223472a docs: fix typo 2025-03-26 17:47:30 +03:00
kastov
dcceb5f69e docs: update panel security and subscription templating categories to be collapsed by default 2025-03-25 01:26:49 +03:00
kastov
e4cff51d8e docs: update sidebar positions for migrating and panel overview sections, and adjust panel security category position 2025-03-25 01:21:24 +03:00
kastov
4a6df92897 docs: add Xray Checker project to the Awesome Remnawave list with description, links, and contribution guidelines 2025-03-25 01:19:05 +03:00
kastov
60a597d731 docs: – 2025-03-25 01:06:24 +03:00
kastov
a9269f965b docs: add CaddyAuth guides 2025-03-25 00:43:56 +03:00
Yury Kastov
f7d24fcebe Merge pull request #24 from remnawave/path-fix 2025-03-23 20:09:31 +03:00
Sergey Kutovoy
05e3dec374 docs: обновить инструкции по установке, добавив шаг установки Docker и скорректировав нумерацию шагов 2025-03-23 22:08:02 +05:00
kastov
cce7ddfde8 docs: update README.md to link to the new quick-start installation guide 2025-03-23 03:38:33 +03:00
kastov
2938cbe3c9 docs: revamp README.md with new layout, logo, and enhanced project description 2025-03-23 03:36:52 +03:00
Yury Kastov
e67926eda3 Merge pull request #23 from remnawave/path-fix 2025-03-23 02:51:05 +03:00
Sergey Kutovoy
1a8f142e44 docs: update installation guides to use /opt/remnawave directory for project setup 2025-03-22 16:09:56 +05:00
kastov
272b2da97e docs: add Redis configuration details to environment variables documentation 2025-03-21 09:00:36 +03:00
Sergey Kutovoy
595c26a9ab Merge pull request #22 from vlasmn/patch-1
Update traefik.md
2025-03-19 19:56:23 +05:00
Zhenya Vlasov
f17abd31af Update traefik.md
Опечатка
2025-03-19 12:11:39 +03:00
kastov
beddbf5b3e docs: add donation options for RUB and EUR using Tribute 2025-03-19 06:16:02 +03:00
Yury Kastov
fe67cf8550 Merge pull request #21 from metgen/main
Fix typo, some improvements and adding traefik configuration for use as reverse-proxy for sub-page
2025-03-19 05:46:32 +03:00
metgen
072af7f162 docs: adding traefik configuration for use as reverse-proxy for sub-page 2025-03-18 22:52:45 +03:00
metgen
0579dabbe6 fix typo and some improvements 2025-03-18 22:16:48 +03:00
Yury Kastov
e99a7d51a1 Merge pull request #20 from remnawave/fix-compose-commands
docs: update warnings in environment variable documentation to clarif…
2025-03-18 22:03:27 +03:00
Sergey Kutovoy
c4b447048f docs: update warnings in environment variable documentation to clarify APP_PORT usage 2025-03-18 22:43:05 +05:00
Yury Kastov
425e50f816 Merge pull request #19 from metgen/main 2025-03-18 08:26:22 +03:00
metgen
11e560bfbe highlighting the replacement lines in yellow in traefik.md 2025-03-18 00:50:38 +03:00
metgen
da07b69dec add code-block-warning-line in custom.css 2025-03-18 00:45:05 +03:00
metgen
1c3c7b9f07 docs: fix remnawave.yml configuration 2025-03-17 23:28:26 +03:00
metgen
3fea4147c2 docs: add Traefik configuration 2025-03-17 22:48:53 +03:00
Yury Kastov
06ee5cb681 Merge pull request #18 from remnawave/fix-compose-commands
fix typo
2025-03-17 00:24:30 +03:00
Sergey Kutovoy
06d790ce33 fix typo 2025-03-17 01:43:38 +05:00
Yury Kastov
f9799b40e4 Merge pull request #17 from remnawave/fix-compose-commands 2025-03-16 23:42:23 +03:00
Sergey Kutovoy
63390c2851 docs: update docker-compose commands to use 'docker compose' syntax for consistency 2025-03-17 01:40:58 +05:00
Yury Kastov
11b033456d Merge pull request #16 from remnawave/docs-update 2025-03-16 19:42:16 +03:00
kastov
fa1c2f4d13 docs: simplify tutorial sidebar structure and adjust category positions for better organization 2025-03-16 19:41:59 +03:00
Sergey Kutovoy
84e052c40f docs: restructure sidebars and enhance Node installation guide with advanced usage details
Co-authored-by: kastov <kastov@gog.sh>
2025-03-16 17:36:01 +05:00
Alexey
3c849b774d Update marzban.md 2025-03-14 22:01:14 +03:00
Alexey
2936a1f428 Update marzban.md 2025-03-14 21:34:24 +03:00
kastov
63c3ef9cb1 docs: update link to changelog for Remnawave v1.4.0 in updating guide 2025-03-14 04:01:06 +03:00
kastov
6b5be2e3c0 docs: update updating guide for v1.4.x, clarify backend changes, and remove support for mounting custom templates 2025-03-14 03:28:36 +03:00
kastov
7c2e4ac792 fix: update Releases link to external changelog and add Blog link in the navigation 2025-03-14 03:15:17 +03:00
Yury Kastov
0f80367491 Merge pull request #14 from fraybyl/main 2025-03-13 23:48:40 +03:00
kastov
d5d536d7e4 docs: streamline environment variable documentation and enhance quick start guide with Redis integration 2025-03-13 23:48:26 +03:00
Fraybyl
dd2666f642 docs: add node installation 2025-03-13 23:34:06 +03:00
kastov
e8615aed4f docs: Update reverse proxy link in subscription templates documentation 2025-03-12 23:05:22 +03:00
kastov
d0550350f4 docs: Enhance subscription templates documentation and add new code block styles 2025-03-12 22:58:55 +03:00
kastov
70fba1dd81 docs: Clarify reverse proxy documentation and update configuration examples 2025-03-12 21:51:57 +03:00
kastov
86446bf6b8 docs: Update Marzban migration tool link to GitHub 2025-03-12 05:50:34 +03:00
kastov
b21e8d391d feat: migration 2025-03-12 05:46:28 +03:00
Yury Kastov
6e65d88ff2 Merge pull request #11 from Akiyamov/patch-1
Fix RP guide
2025-03-11 17:48:16 +03:00
Akiyamov
d9a04a7791 Update nginx.md 2025-03-11 16:53:53 +05:00
Akiyamov
a9f5d8901e Update caddy.md 2025-03-11 16:53:18 +05:00
Yury Kastov
0c0a3a6717 Merge pull request #9 from Akiyamov/main 2025-03-09 14:44:36 +03:00
kastov
1ef96311eb docs: Update reverse proxy documentation sidebar positions and configurations 2025-03-09 14:44:23 +03:00
Akiyamov
f780238221 Use bridge in example and add Caddy configuration in RP 2025-03-09 15:19:38 +05:00
kastov
a763027166 docs: Adjust donate page sidebar position 2025-03-02 07:25:31 +03:00
kastov
8897681115 docs: Add services section to Cloudflare reverse proxy Docker Compose configuration 2025-02-27 14:48:09 +03:00
kastov
6739d8e69d docs: Update GitHub username in author profile 2025-02-24 15:19:25 +03:00
kastov
c6eaa6e4e7 feat: Add blog releases navigation and update blog configuration 2025-02-24 15:13:16 +03:00
kastov
416b3ff51b docs: Update environment variables and blog configuration 2025-02-24 14:59:17 +03:00
kastov
f25b5c5d1b docs: Update secret generation command to use hex encoding 2025-02-21 14:54:58 +03:00
kastov
0b0c7130e4 feat: Customize Scalar API documentation plugin appearance 2025-02-19 22:50:25 +03:00
kastov
89594238e9 feat: Add Scalar Docusaurus plugin for API specification documentation 2025-02-19 22:35:21 +03:00
kastov
a88d62402c docs: Update donation addresses and add secret generation instructions 2025-02-17 03:27:26 +03:00
kastov
f2c679918f feat: prepare 2025-02-17 03:10:51 +03:00
kastov
8cdb46b2e8 docs: Add donation information to project documentation 2025-02-17 02:38:32 +03:00
kastov
3c2689e416 chore: Add Docusaurus client redirects plugin and update package version 2025-02-17 02:34:01 +03:00
kastov
947db90578 docs: Add IS_TELEGRAM_ENABLED environment variable documentation 2025-02-15 22:07:53 +03:00
kastov
4e518b4023 docs: Update SUB_PUBLIC_DOMAIN environment variable documentation 2025-02-15 19:39:12 +03:00
kastov
a0074635d4 fix: Correct SSL private key file path in Nginx configuration 2025-02-15 15:54:26 +03:00
kastov
4afcf3cc63 docs: Revise Nginx reverse proxy configuration for improved security and performance 2025-02-15 02:10:00 +03:00
kastov
724546626e fix: app_port 2025-02-14 22:24:18 +03:00
kastov
35cbd72e51 docs: specify network name in docker-compose configuration 2025-02-14 20:39:08 +03:00
kastov
8167451715 docs: update WEBHOOK_ENABLED default value to false 2025-02-14 20:29:03 +03:00
kastov
1dcc079808 docs: fix env variables link in Nginx reverse proxy documentation 2025-02-14 02:47:09 +03:00
kastov
1fa6163971 docs: update env variables link in Nginx reverse proxy guide 2025-02-14 02:43:32 +03:00
kastov
8b0ec030e5 fix: test tg alerts 2025-02-14 02:39:20 +03:00
kastov
d53b9159ff feat: add guide for Nginx 2025-02-14 02:37:28 +03:00
kastov
7dca81129c Update quick start button link to point to installation guide 2025-02-12 03:11:15 +03:00
kastov
14d93a05c0 Update documentation with detailed project overview and component descriptions 2025-02-12 03:03:32 +03:00
kastov
ebe3edfd9c Fix package name typo in package.json 2025-02-04 02:43:43 +03:00
kastov
35eb862f60 Customize Docusaurus configuration and remove default template content 2025-02-04 02:27:50 +03:00
kastov
1443811434 Refactor README.md 2025-01-10 22:10:38 +03:00
kastov
9cfbfa004f Enhance README.md 2025-01-10 20:36:50 +03:00
kastov
eabeff84a5 Update README.md 2025-01-10 20:36:06 +03:00
406 changed files with 43456 additions and 1 deletions

15
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: ['https://docs.rw/donate']

106
.github/workflows/build-docs.yml vendored Normal file
View File

@@ -0,0 +1,106 @@
name: Build docs and landing
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build-landing:
name: Build landing
runs-on: ubuntu-22.04
steps:
- name: Checkout landing repository
uses: actions/checkout@v4
with:
repository: remnawave/landing
token: ${{ secrets.LANDING_REPO_TOKEN }}
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22.18.0'
- name: Install dependencies
run: npm ci
- name: Build landing
run: npm run start:build
- name: Upload landing artifact
uses: actions/upload-artifact@v4
with:
name: landing-build
path: landing/
build-docs:
name: Build documentation
runs-on: ubuntu-22.04
steps:
- name: Checkout docs repository
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22.18.0'
- name: Install dependencies
run: npm ci
- name: Build documentation
run: npm run build
- name: Upload docs artifact
uses: actions/upload-artifact@v4
with:
name: docs-build
path: build/
build-docker:
name: Build and push Docker image
runs-on: ubuntu-22.04
needs: [build-landing, build-docs]
steps:
- name: Checkout docs repository
uses: actions/checkout@v4
- name: Download landing artifact
uses: actions/download-artifact@v4
with:
name: landing-build
path: landing/
- name: Download docs artifact
uses: actions/download-artifact@v4
with:
name: docs-build
path: build/
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
remnawave/internal-docs:latest
platforms: linux/amd64
- name: Deploy to Railway
run: |
curl -fsSL https://railway.app/install.sh | sh
export PATH=$PATH:$HOME/.railway/bin
railway redeploy --service ${{ env.SVC_ID }} -y
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
SVC_ID: ${{ secrets.RAILWAY_SERVICE_ID }}

164
.gitignore vendored Normal file
View File

@@ -0,0 +1,164 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
.yarn.lock
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
.DS_Store
.vercel
stats.html
fsd-high-level-dependencies.html
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.wip/
samples/
docker-compose.local.yml

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
legacy-peer-deps=true

8
.prettierrc Normal file
View File

@@ -0,0 +1,8 @@
{
"singleQuote": true,
"singleAttributePerLine": false,
"tabWidth": 4,
"printWidth": 100,
"semi": false,
"trailingComma": "none"
}

5
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"i18n-ally.localesPaths": [
"static/contributing/i18n"
]
}

76
Caddyfile Normal file
View File

@@ -0,0 +1,76 @@
# global options
{
admin off
persist_config off
auto_https off
# log {
# format json
# }
servers {
trusted_proxies static private_ranges 100.0.0.0/8
}
}
:{$PORT:8080} {
handle /health {
respond "OK" 200
}
@notMainDomain {
not header Host docs.rw
}
handle @notMainDomain {
redir https://docs.rw{uri} permanent
}
@mainDomain {
header Host docs.rw
}
handle @mainDomain {
redir /blog/learn /docs/learn/quick-start permanent
redir /blog/learn/quick-start /docs/learn/quick-start permanent
redir /apps /docs/clients permanent
redir /clients /docs/clients permanent
redir /donate /docs/donate permanent
handle / {
root * /app/landing
encode gzip
file_server
try_files {path} /index.html
header {
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
X-XSS-Protection "1; mode=block"
}
}
handle_path /landing-assets/* {
root * /app/landing/landing-assets
encode gzip
file_server
try_files {path} /index.html
header {
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
X-XSS-Protection "1; mode=block"
}
}
handle {
root * /app/docs
encode gzip
file_server
try_files {path} /index.html
header {
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
X-XSS-Protection "1; mode=block"
}
}
}
}

17
Dockerfile Normal file
View File

@@ -0,0 +1,17 @@
ARG CADDY_VERSION=2.10
ARG IMAGE_NAME=remnawave-docs
FROM caddy:${CADDY_VERSION}-alpine
LABEL name=${IMAGE_NAME}
WORKDIR /app
COPY build /app/docs
COPY landing /app/landing
COPY Caddyfile /etc/caddy/Caddyfile
EXPOSE ${PORT:-80}
CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]

View File

@@ -1 +1,36 @@
WIP
<div align="center">
<a href="https://docs.rw">
<img src="https://cdn.docs.rw/logos/logo.svg" alt="Logo" width="160" height="160">
</a>
<h1 align="center">Remnawave</h3>
<p align="center">
A powerful proxy management tool, built on top of Xray-core, with a focus on simplicity and ease of use.
<br />
<p align="center">
<a href="https://docs.rw">
<img src="https://img.shields.io/badge/Get%20Started-%E2%86%92-0969da?style=for-the-badge&labelColor=0969da&color=0969da" alt="Get Started" width="200" height="auto">
</a>
</p>
<a href="https://github.com/remnawave/panel/releases">
<img src="https://img.shields.io/github/v/release/remnawave/panel?label=Latest%20release&style=social" alt="Latest release">
</a>
<a href="https://github.com/remnawave/panel/stargazers">
<img src="https://img.shields.io/github/stars/remnawave?style=social" alt="Stars">
</a>
</p>
</div>
<p align="center">
<a href="https://github.com/remnawave/panel" target="_blank" rel="noopener noreferrer" >
<img src="https://cdn.docs.rw/logos/gh_preview.png" alt="Remnawave screenshots" width="600" height="auto">
</a>
</p>
<p align="center">
<a href="https://t.me/remnawave" target="_blank" rel="noopener noreferrer">
<img src="https://img.shields.io/badge/Join%20community-Telegram-26A5E4?style=for-the-badge&logo=telegram&logoColor=white" alt="Join community on Telegram" width="220" height="auto">
</a>
</p>

View File

@@ -0,0 +1,115 @@
# Generic OAuth2 Authentication
Generic OAuth2 allows you to connect any OAuth2-compatible identity provider to Remnawave. This is useful when you want to use providers that don't have dedicated integration (like Authentik, Authelia, Zitadel, Google, Microsoft, etc.).
## Prerequisites
1. An OAuth2-compatible identity provider
2. Admin access to create OAuth2 clients/applications
3. Provider must support the `email` claim in tokens
## Configuration Steps
### 1. Create an OAuth2 Application in Your Provider
The exact steps vary by provider, but generally you need to:
1. Log in to your identity provider's admin console
2. Create a new OAuth2/OIDC application
3. Configure:
- **Application Type**: Web Application
- **Grant Type**: Authorization Code
- **Redirect URI**: `https://your-panel-domain.com/oauth2/callback/generic`
4. Note down the **Client ID** and **Client Secret**
5. Find the provider's **Authorization URL** and **Token URL** (usually in documentation or well-known endpoint)
### 2. Find Provider URLs
Most providers have these endpoints documented. Common patterns:
| Provider | Authorization URL | Token URL |
| --------- | ------------------------------------------------------------------ | -------------------------------------------------------------- |
| Google | `https://accounts.google.com/o/oauth2/v2/auth` | `https://oauth2.googleapis.com/token` |
| Microsoft | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize` | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token` |
| Authentik | `https://your-authentik.com/application/o/authorize/` | `https://your-authentik.com/application/o/token/` |
| Authelia | `https://your-authelia.com/api/oidc/authorization` | `https://your-authelia.com/api/oidc/token` |
| Zitadel | `https://your-zitadel.com/oauth/v2/authorize` | `https://your-zitadel.com/oauth/v2/token` |
### 3. PKCE Support
**PKCE (Proof Key for Code Exchange)** adds an extra layer of security to the OAuth2 flow. Enable this option if:
- Your provider supports PKCE (most modern providers do)
- You want enhanced security against authorization code interception attacks
- Your provider requires PKCE for public clients
> **Recommendation**: Enable PKCE if your provider supports it.
## Remnawave Configuration
| Field | Description |
| --------------------- | ------------------------------------------------------------------------------------- |
| **Client ID** | The client/application ID from your OAuth2 provider |
| **Client Secret** | The client secret from your OAuth2 provider |
| **Authorization URL** | The OAuth2 authorization endpoint URL (e.g., `https://provider.com/oauth2/authorize`) |
| **Token URL** | The OAuth2 token endpoint URL (e.g., `https://provider.com/oauth2/token`) |
| **Frontend Domain** | Your Remnawave panel domain without `https://` (e.g., `panel.example.com`) |
| **With PKCE** | Enable PKCE (Proof Key for Code Exchange) for enhanced security |
| **Allowed Emails** | List of email addresses allowed to log in |
## Access Control
You can control access using **one of two methods** (or both):
### Option A: Using Allowed Emails
Specify a list of allowed email addresses in the Remnawave settings. Only users with emails in this list will be able to log in.
### Option B: Using Custom Claim
If the **Allowed Emails** list is empty, Remnawave will check for a custom claim in the token:
| Key | Value |
| ----------------- | ------ |
| `remnawaveAccess` | `true` |
If the user's token contains `remnawaveAccess: true`, they will be authorized.
> **Note**: You need to configure your identity provider to include this custom claim in the token. The exact steps vary by provider — usually this is done via "mappers", "claims", or "token customization" settings.
## Troubleshooting
### "Invalid redirect URI"
Verify that the redirect URI in your provider matches exactly: `https://your-panel-domain.com/oauth2/callback/generic`
### "Invalid or missing email claim"
Make sure:
- The user has an email address set in your provider
- The `email` scope is requested and granted
- Your provider includes the `email` claim in the token
### "State mismatch"
Clear browser cookies and try again. This can happen if the authentication flow was interrupted.
### "Token exchange failed"
Verify that:
- The **Token URL** is correct
- **Client ID** and **Client Secret** are correct
- Your provider's token endpoint is accessible from your Remnawave server
### "Access denied"
The user's email is not in the **Allowed Emails** list. Add their email address to grant access.
### PKCE-related errors
If you get errors related to `code_verifier` or `code_challenge`:
- Try disabling **With PKCE** if your provider doesn't support it
- Or enable it if your provider requires it

View File

@@ -0,0 +1,19 @@
## OAuth2: GitHub
### Creating an OAuth Application
First, you need to create an OAuth application.
Follow the link to create an application: [https://github.com/settings/applications/new](https://github.com/settings/applications/new)
In the `Authorization callback URL` field, enter the address of your panel.
```bash
# Replace YOUR_PANEL_DOMAIN with your panel address
https://YOUR_PANEL_DOMAIN/oauth2/callback/github
```
Don't forget to replace `YOUR_PANEL_DOMAIN` with the correct panel address.
### OAuth2 Settings in Remnawave
After creating the OAuth2 application copy the `Client ID` and `Client Secret`. Insert this data in the corresponding section. And below, enter the list of email addresses for which login will be allowed.

View File

@@ -0,0 +1,80 @@
# Keycloak Authentication
Keycloak is an open-source Identity and Access Management solution that provides Single Sign-On (SSO) capabilities.
## Prerequisites
1. A running Keycloak server
2. Admin access to create clients
## Configuration Steps
### 1. Create a Client in Keycloak
1. Log in to Keycloak Admin Console
2. Select your realm (or create a new one)
3. Go to **Clients****Create client**
4. Configure:
- **Client ID**: `remnawave` (or your preferred name)
- **Client Protocol**: `openid-connect`
- **Client authentication**: `ON`
5. Set **Valid redirect URIs**: `https://your-panel-domain.com/oauth2/callback/keycloak`
6. Set **Web Origins**: `https://your-panel-domain.com`
7. Save the client
### 2. Get Client Credentials
1. Go to **Clients** → your client → **Credentials** tab
2. Copy the **Client secret**
### 3. Configure Access Control
You can control access using **one of two methods** (or both):
#### Option A: Using Claim (Recommended)
Add a custom claim `remnawaveAccess: true` to the token:
1. Go to **Clients** → your client → **Client scopes** tab
2. Click on `<your-client-id>-dedicated`
3. Go to **Mappers** tab → **Add mapper****By configuration**
4. Select **Hardcoded claim**
5. Configure:
- **Name**: `remnawaveAccess`
- **Token Claim Name**: `remnawaveAccess`
- **Claim value**: `true`
- **Claim JSON Type**: `boolean`
- **Add to ID token**: `ON`
- **Add to access token**: `ON`
6. Save
#### Option B: Using Allowed Emails
Instead of configuring a claim, you can specify a list of allowed email addresses in the Remnawave settings. Only users with emails in this list will be able to log in.
## Remnawave Configuration
| Field | Description |
|-------|-------------|
| **Keycloak Domain** | Your Keycloak server domain without `https://` (e.g., `keycloak.example.com`) |
| **Frontend Domain** | Your Remnawave panel domain without `https://` (e.g., `panel.example.com`) |
| **Realm** | The Keycloak realm name (e.g., `master`) |
| **Client ID** | The client ID you created |
| **Client Secret** | The client secret from Credentials tab |
| **Allowed Emails** | List of email addresses allowed to log in (optional if using claim) |
## Troubleshooting
### "Email is not in the allowed list and remnawaveAccess claim is not present"
Make sure either:
- The user has the `remnawaveAccess: true` claim configured via mapper, OR
- The user's email is added to the Allowed Emails list in Remnawave settings
### "Invalid redirect URI"
Verify that the redirect URI in Keycloak matches exactly: `https://your-panel-domain.com/oauth2/callback/keycloak`
### "State mismatch"
Clear browser cookies and try again. This can happen if the authentication flow was interrupted.
### "Invalid or missing email claim"
Make sure the user has an email address set in Keycloak and email scope is enabled.

View File

@@ -0,0 +1,21 @@
## Authentication Method: Password
### Changing or Resetting Password
Use `Rescue CLI` to reset or change the password.
```bash
docker exec -it remnawave remnawave
```
After entering `Rescue CLI`, select the `Reset superadmin` option.
### Emergency Password Authentication Enable
If you have disabled the "Password" authentication method but later lost access to one of the other authentication methods you can enable the "Password" authentication method using `Rescue CLI`
```bash
docker exec -it remnawave remnawave
```
After entering `Rescue CLI`, select the `Enable password authentication` option.

View File

@@ -0,0 +1,36 @@
## OAuth2: PocketID
### Creating an OIDC Client
Log in to the PocketID admin panel and navigate to the `Settings``OIDC Clients``Add OIDC Client` section.
```
# Replace YOUR_PANEL_DOMAIN with your Remnawave panel address
https://YOUR_PANEL_DOMAIN/oauth2/callback/pocketid
```
### OAuth2 Settings in Remnawave
After creating the OAuth2 application copy the `Client ID` and `Client Secret`. Insert this data in the corresponding section. And below, enter the list of email addresses for which login will be allowed.
In the `Plain Domain` field, enter the domain address where your PocketID is located.
Just enter the domain name without the path and `https://`, for example: `pocketid.your-domain.com`
### Custom Claims (v2.4.0+)
Remnawave also supports authorization using Custom Claims.
When using this method, you do not need to specify an array of email addresses.
Key
```
remnawaveAccess
```
Value
```
true
```
Accordingly, if a user has this key (`remnawaveAccess: true`) in their token, they will be authorized.

View File

@@ -0,0 +1,43 @@
## Telegram OAuth2
> This guide is applicable for version **2.7.0** and above.
To configure the "Login via Telegram" feature, you need a Telegram bot. Additionally, you need to configure the bot for the feature to work correctly.
### Bot Configuration
1. Open @BotFather (https://t.me/botfather)
2. Open the MiniApp by pressing "Open"
3. Select your bot and press `Bot Settings`
4. If there is already a domain specified in the `Web Login` section — delete it.
5. Press the Switch to OpenID Connect Login button.
`If this button is not available, after deleting the domain go back one menu level and repeat from step 3`
6. Press Add an Allowed URL.
Specify the following values:
- Trusted Origins: https://panel.domain.com
- Redirect URIs: https://panel.domain.com/oauth2/callback/telegram
### Access Configuration
After filling in `Client ID`, `Client Secret` and `Frontend Domain`, you need to specify a list of administrator IDs who will have access to login.
1. From the required account, launch the bot https://t.me/Get_myidrobot
2. In response, the bot will send you your ID, enter it in the corresponding field.
---
### Known Error Solutions
###### Various protections installed on top of the panel (such as cookies, etc.) may not work correctly with `Telegram OAuth2`.
Use the /oauth2/ path in your reverse proxy to resolve this issue
###### Error: BOT_DOMAIN_INVALID
This error occurs due to incorrect bot domain configuration review the "Bot Configuration" section (above). If necessary, repeat this step-by-step process.
###### Error: Telegram confirmation code not received during login
Unfortunately, this issue cannot be resolved from the Remnawave side. Try using a bot that was created a while ago or use a different browser.
Alternatively, you can try logging in on one of the "official" resources for example, https://fragment.com. Since the Telegram session within the browser will be shared you can try logging into the panel.

View File

@@ -0,0 +1,20 @@
## OAuth2: Yandex
The Yandex authentication method is not recommended for use.
### Creating an OAuth Application
You need to create an OAuth application in Yandex.
Follow the link to create an application: https://oauth.yandex.com/client/new
On the second step of application creation, select the "Web application" option and enter the `Callback URL`
```
# Replace YOUR_PANEL_DOMAIN with your Remnawave panel address
https://YOUR_PANEL_DOMAIN/oauth2/callback/yandex
```
Don't forget to replace `YOUR_PANEL_DOMAIN` with the correct panel address.
On the third step of creation make sure to check the box next to `Access to email address`, no other permissions are required.

View File

@@ -0,0 +1,31 @@
## Xray JSON Subscription Format
The Xray JSON format provides native JSON-based subscription support for compatible clients. Simply append `/json` to your subscription URL to enable this format.
### Supported Applications
- **v2rayNG** — version 1.8.29 or higher
- **V2rayN** — version 6.40 or higher
- **Streisand** — all versions
- **Happ** — all versions
- **V2Box** — all versions
- **ktor-client** — all versions
### Usage Instructions
**Step 1:** Modify your subscription URL
Append `/json` to the end of your subscription link:
`https://<server>/api/sub/xxxx/json`
**Step 2:** Verify compatibility
Ensure your client application meets the minimum version requirements listed above.
**Alternatively:** Enable JSON At the base path
Enable the "Serve JSON at base subscription" option in the subscription settings. This will serve the JSON subscription at the base subscription path (without having to append /json).
### Fallback Behavior
For clients that don't support the JSON format (such as Base64 or Mihomo-based clients), the subscription will automatically fall back to the standard format compatible with your client.

View File

@@ -0,0 +1,107 @@
## Config Profiles
A Config Profile, in the context of Remnawave, represents a complete server configuration for the [Xray](https://xtls.github.io/en/config/) core.
In this configuration, you define _inbounds_ that your users will later connect to.
**The details of Xray configuration setup will not be described here, as this is a topic for independent study - use the official [Xray](https://xtls.github.io/en/config/) documentation to learn about all the capabilities of the core.**
When creating a new Config Profile, it is created by default with one _inbound_ of type **Shadowsocks**. After the Config Profile is created - you can modify this or add a new _inbound_.
_Tip: To add a new inbound, for example with the **VLESS** protocol - simply add another object inside the `inbounds:[]` array._
Currently, Remnawave supports protocols such as: `VLESS`, `Trojan`, `Shadowsocks` (`chacha20-ietf-poly1305`, `2022-blake3-aes-256-gcm`, `aes-128-gcm`, `aes-256-gcm`), `Hysteria2` (client Xray-Json generation only). And also the following transports: `RAW (TCP)`, `XHTTP`, `Websocket`, `HTTPUpgrade`, `gRPC`, `KCP`.
It's important to note that Remnawave also supports protocols: `Tunnel`, `mixed(socks)`, `wireguard`, `http` - however, the panel will completely ignore them and user management for these protocols will be unavailable. These _inbounds_ will be passed to Xray in the exact form you specify them.
For the main protocols (`VLESS`, `Trojan`, `Shadowsocks`), Remnawave will manage the list of users that will be inside the server configuration. No additional actions are required on your part.
---
### Config Profiles List
In the general list of Config Profiles, a brief summary is available for each created Config Profile. Under the Config Profile name, you can see the number of active _inbounds_ within it, as well as the number of active **nodes** on which this Config Profile is active. Both icons are clickable - clicking on them will open the corresponding sections.
When clicking on _inbounds_ - a list of _inbounds_ will open, and for each inbound, it will show on how many internal squads this _inbound_ is activated.
When clicking on _nodes_ - a list of _nodes_ where this specific Config Profile is active will open.
In the additional actions menu (down arrow), options for quick Config Profile viewing, viewing Config Profile with snippets, as well as other service options are available.
---
### Config Profile Editor
The Config Profile editor provides a full-featured JSON editor with syntax checking. Also, when hovering over certain objects, a tooltip with information from the Xray documentation will be available.
With any changes, the entire configuration is immediately validated by running a lightweight version of the core. Such validation helps prevent trivial errors and typos.
In the additional menu (at the very bottom, button with three bars), additional options are available. Let's skip the basic things: copy all, select all, and so on - these options are self-explanatory.
The "**Download from Github**" option will open an additional menu where you can download configuration examples from users. **These examples are not ready-to-use configurations, but are merely examples - keep this in mind.**
The "**Generate Keys**" option allows you to quickly and conveniently generate necessary key pairs right in the browser - for example, in the case of `Reality`, you will definitely need a `privateKey`, which can be generated in this menu. Other generation options are also available there, which will be useful for `Vless Encryption` - `ML-DSA65` and `ML-KEM768`.
---
### Snippets
When you have many Config Profiles - it can be quite difficult to quickly change small details that are present in all Config Profiles but differ in minor aspects.
For example, you have several profiles - let's say 10 pieces. In each of the 10, the routing section is the same and you would like to quickly and conveniently replace the rules in all profiles at once. With the snippets functionality, you only need to change the "rule" or "rules" in one place, and then they will automatically be pulled into the profiles.
Currently, you can predefine array elements for objects such as `outbounds` and `rules`. After creating a snippet, it will be available in one of these objects.
```
{
"outbounds": [
{
"snippet": "snippet-name"
}
]
}
```
Additional information about them is available by clicking on the question mark in the snippets menu.
### Flow Control (VLESS)
_This feature is available only in version 2.3.0 and above._
By default, Remnawave automatically adds the `flow` parameter for the following configurations: VLESS+TLS, REALITY+RAW, or TCP.
If you wish to override this behavior, add the `flow` field to the `settings` object.
```json
"settings": {
"flow": "",
"clients": [],
"decryption": "none"
},
```
Available values for `flow`:
- `xtls-rprx-vision`
- `""`
### Kcp with FinalMask
_This feature is available only in version 2.7.0 and above._
In some cases, you may need to specify a custom MTU (in the `kcpSettings` object) when using FinalMask. Unfortunately, Xray configuration does not clearly separate client and server MTU values.
```json
{
"mtu": 1350
}
```
Since Remnawave needs to generate the client-side configuration, we have added a custom field that does not exist in the original Xray configuration.
```json
{
"clientMtu": 70
}
```
The `clientMtu` parameter (if present) will be converted to `mtu` on the client side. This way, you can set a custom MTU for the client side.

View File

@@ -0,0 +1,43 @@
## External Squads
Using external squads, you can override certain settings or templates that users use when requesting a subscription. _A user cannot have more than one active external squad._
For example, for different user groups, you can set different routing (for Happ, v2rayTUN), and different routing can also be within templates.
Using the additional menu, you can quickly assign an external squad to all users (or conversely remove all users from an external squad).
If a user has no external squad selected global settings from the "**Subscription**" section are used, as well as the "**Default**" client config template.
---
Let's smoothly move on to reviewing the settings available in the external squad card.
### Template Override
When a user requests a subscription depending on the client application from which the request came, the user may receive different templates. For example, if the application runs on the Mihomo core Remnawave will detect this and provide the **Default** template of the **Mihomo** type. (You can manage templates in the corresponding section).
Inside Remnawave, you can create an infinite number of templates for each type (Mihomo, Stash, Xray Json, Singbox, Clash), but by default, the **Default** template will always be provided.
**To override this behavior is exactly what this setting inside the external squad exists for.**
Let's say, for a specific external squad we want to use a _Custom Template_ that belongs to the **Mihomo** type, in this case we select this template in the corresponding section and save the changes. If a request comes from a user who belongs to this external squad instead of the _Default_ template, they will receive the _Custom Template_.
If you leave the override field empty the user who is in this squad will receive the _Default_ template.
_Please note, template override in the "Response Rules" section has a higher priority than override in this section._
### Settings (Subscription)
In this section, general settings that are located in the "Subscription" → "Settings" section are overridden. Accordingly, by overriding settings within the squad, you can override many parameters at once for an entire group of users.
Keep in mind, if any of the parameters is explicitly overridden (including an empty value) it will be overridden. Only deletion of the override (trash icon) will cancel the override.
For example, in general settings my profile header is set as "Remnawave", but for 10 users I want to override it, for example to "Remnawave v.2.x", in this case I override this parameter in this section, and then assign this external squad to the needed 10 users.
### Hosts
Based on the logic from the previous point in this section you can completely override some parameters that you might have noticed in the card of each **host** you created.
**Values overridden here will be applied to all hosts that the user receives in the subscription.**
For example, by overriding `vlessRouteId` we can assign a specific value and thus "_route_" an entire group of users (those who will be in this squad). Naturally, the other half of such routing settings is located in the server configuration the Config Profile.

View File

@@ -0,0 +1,67 @@
## Hosts
In brief, hosts are the client representation of your server configuration. If an **inbound** is required on the server for a successful connection, then on the client side the user needs a **host**.
A group of hosts (or you could say a _list_) represents a subscription. A subscription is a link, and after adding such a link to a client application, the user sees a list of hosts (servers, if you will). The user can then choose any of them.
It's important to note that a **host** is primarily just a client interpretation of your server component. For example, if a user has received a subscription (the list of hosts is already in their hands) and you disable this host - the user will **still be able** to connect to the server that this host points to. But upon updating the subscription - they will no longer have this host.
Since a host is directly bound to an inbound (which is located in the profile) - the host inherits most settings from it. However, in some cases it can be useful to override or supplement these settings - that's what the **advanced** settings section is for.
---
When creating a new host or editing an existing one, you have access to two sections: **Basic** and **Advanced** (settings).
### Basic
#### Remark
In this field, you define how this host will be displayed in the client application. Usually, the name of the country the user will be connecting to is written here.
_Tip: To display a country flag in the client application - add an emoji at the very beginning of the remark._
#### Inbound Selection (and profile)
As mentioned above - a host is just a client representation of your server configuration, so selecting an inbound is a mandatory requirement for creating a host. Depending on the number of inbounds, nodes, and profiles, select the appropriate inbound in the selection menu.
#### Address and Port
The address is a domain or IP address. In most cases, you need to specify the address or domain of the server the user will be connecting to. The port usually corresponds to the **inbound** port, _in some cases it may differ._
_You can also enter multiple domain names in the address field - for example: `node-1.com,node-2.com,node-3.com`. You might think that this could theoretically be used for some load balancing, but it's important to note - the user will receive only one of these addresses when requesting a subscription (which specific one they get is determined randomly and is not tied to any load balancing logic). Consequently - until the user updates the subscription in the client application (or unless auto-update triggers) - the user's address will not change._
#### Tag and Nodes
These parameters are not visible to the end user, they are more for the panel administrator (you) to make it easier to navigate through created hosts in the future if there are many of them.
In particular, selecting a node in this field doesn't play a functional role - **this is only a visual binding for easier navigation in the future.**
---
### Advanced
**In most cases, you don't need to edit anything from this section unless you clearly understand what purposes you're doing it for. Incorrect modification of some parameters may result in your connection not working. Approach editing each item with all seriousness and always double-check settings before applying changes.**
In this section, we won't go through every item - we'll focus on the main ones.
#### SNI (ServerNames)
In some cases, it may be necessary to override the `serverNames` object settings (which are defined within the inbound in the profile) for a specific host.
Keep in mind, `serverNames` in simple terms is the _password_ by which, for example, **Reality** determines the **validity** of the connection. If you specify an **SNI** in this field, for example `example.com`, and within the inbound `serverNames` looks like this:
```json
"serverNames": [
"example1.com",
"example2.com"
]
```
Such a connection will not work, as `example.com` is not in the list of allowed `SNI`.
#### Override SNI from Address
By default, Remnawave takes the first object from the `serverNames` array (of the inbound) to add SNI to the client host. If you enable this parameter - Remnawave will take the address (which you specified in the **Basic** section) and pass it to the client.
Among other items in this section, the `vlessRouteId` field is also worth noting, which is a small abstraction layer over Xray Core and provides you with a simple way to use the `vlessRoute` functionality that Xray provides. <a href="https://xtls.github.io/en/config/routing.html#ruleobject">Learn more about routing rules.</a>
---

View File

@@ -0,0 +1,21 @@
## Internal Squads
The main purpose of internal squads is **access control** for users.
Internal squads are directly linked to **profiles** and their **inbounds**. You can assign them as many active inbounds as needed (which are located inside profiles). And since profiles and their inbounds are directly linked to nodes using an internal squad, we can finely control which users or groups of users can have access to nodes.
---
In each squad's card (in the general list), you can see the number of active inbounds, as well as the number of members in this squad (users who belong to it).
By clicking on the additional actions button (in the squad card), you can also quickly add or remove all users. If you need to assign a squad to _specific_ users you can do this in the **"Users"** section.
Managing users and nodes that can be accessible to them can sometimes be very confusing use the **"Available Nodes"** button to quickly see which nodes are available to this squad. Let me remind you that when creating or modifying a **node**, we also select which **profile** will be used and which **inbounds** from it will be active on the node. And since we also select **inbounds** inside the squad, we can use these relationships to determine specific nodes that this squad (and consequently its members) will have access to.
---
For example, we have two user groups: **free** and **paid**. And we want **free** users to have access to _server group #1_, and paid users to have access to both _server group #1_ and additionally to _server group #2_.
For this purpose, we create two squads: **Free** and **Premium**, and inside each of them we select the corresponding inbounds.
And let's say we're creating a user in this case, if we have a free user we simply activate the **Free** internal squad for them. And when we have a paid user we activate both squads **Free** and **Premium** (if the user needs access to all nodes/inbounds). But we can also activate only one squad for a paid user **Premium**, in which case the user will not have access to the nodes/inbounds from the **Free** group.

View File

@@ -0,0 +1,115 @@
# احراز هویت Generic OAuth2
Generic OAuth2 به شما امکان می‌دهد هر ارائه‌دهنده هویت سازگار با OAuth2 را به Remnawave متصل کنید. این زمانی مفید است که می‌خواهید از ارائه‌دهندگانی استفاده کنید که یکپارچگی اختصاصی ندارند (مانند Authentik، Authelia، Zitadel، Google، Microsoft و غیره).
## پیش‌نیازها
1. یک ارائه‌دهنده هویت سازگار با OAuth2
2. دسترسی مدیریتی برای ایجاد کلاینت‌ها/برنامه‌های OAuth2
3. ارائه‌دهنده باید از claim مربوط به `email` در توکن‌ها پشتیبانی کند
## مراحل پیکربندی
### 1. ایجاد برنامه OAuth2 در ارائه‌دهنده شما
مراحل دقیق بسته به ارائه‌دهنده متفاوت است، اما به طور کلی باید:
1. به کنسول مدیریت ارائه‌دهنده هویت خود وارد شوید
2. یک برنامه OAuth2/OIDC جدید ایجاد کنید
3. پیکربندی کنید:
- **نوع برنامه**: Web Application
- **نوع Grant**: Authorization Code
- **Redirect URI**: `https://your-panel-domain.com/oauth2/callback/generic`
4. **Client ID** و **Client Secret** را یادداشت کنید
5. **Authorization URL** و **Token URL** ارائه‌دهنده را پیدا کنید (معمولاً در مستندات یا well-known endpoint)
### 2. یافتن URLهای ارائه‌دهنده
اکثر ارائه‌دهندگان این endpointها را مستند کرده‌اند. الگوهای رایج:
| ارائه‌دهنده | Authorization URL | Token URL |
| ----------- | ------------------------------------------------------------------ | -------------------------------------------------------------- |
| Google | `https://accounts.google.com/o/oauth2/v2/auth` | `https://oauth2.googleapis.com/token` |
| Microsoft | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize` | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token` |
| Authentik | `https://your-authentik.com/application/o/authorize/` | `https://your-authentik.com/application/o/token/` |
| Authelia | `https://your-authelia.com/api/oidc/authorization` | `https://your-authelia.com/api/oidc/token` |
| Zitadel | `https://your-zitadel.com/oauth/v2/authorize` | `https://your-zitadel.com/oauth/v2/token` |
### 3. پشتیبانی از PKCE
**PKCE (Proof Key for Code Exchange)** یک لایه امنیتی اضافی به جریان OAuth2 اضافه می‌کند. این گزینه را فعال کنید اگر:
- ارائه‌دهنده شما از PKCE پشتیبانی می‌کند (اکثر ارائه‌دهندگان مدرن پشتیبانی می‌کنند)
- می‌خواهید امنیت بیشتری در برابر حملات رهگیری کد احراز هویت داشته باشید
- ارائه‌دهنده شما برای کلاینت‌های عمومی PKCE را الزامی کرده است
> **توصیه**: اگر ارائه‌دهنده شما از آن پشتیبانی می‌کند، PKCE را فعال کنید.
## پیکربندی Remnawave
| فیلد | توضیحات |
| --------------------- | ------------------------------------------------------------------------------ |
| **Client ID** | شناسه کلاینت/برنامه از ارائه‌دهنده OAuth2 شما |
| **Client Secret** | رمز کلاینت از ارائه‌دهنده OAuth2 شما |
| **Authorization URL** | URL endpoint احراز هویت OAuth2 (مثلاً `https://provider.com/oauth2/authorize`) |
| **Token URL** | URL endpoint توکن OAuth2 (مثلاً `https://provider.com/oauth2/token`) |
| **Frontend Domain** | دامنه پنل Remnawave شما بدون `https://` (مثلاً `panel.example.com`) |
| **With PKCE** | فعال‌سازی PKCE (Proof Key for Code Exchange) برای امنیت بیشتر |
| **Allowed Emails** | لیست آدرس‌های ایمیل مجاز برای ورود |
## کنترل دسترسی
می‌توانید دسترسی را با **یکی از دو روش** (یا هر دو) کنترل کنید:
### گزینه A: استفاده از Allowed Emails
لیستی از آدرس‌های ایمیل مجاز را در تنظیمات Remnawave مشخص کنید. فقط کاربرانی که ایمیل آن‌ها در این لیست است می‌توانند وارد شوند.
### گزینه B: استفاده از Custom Claim
اگر لیست **Allowed Emails** خالی باشد، Remnawave یک claim سفارشی را در توکن بررسی می‌کند:
| کلید | مقدار |
| ----------------- | ------ |
| `remnawaveAccess` | `true` |
اگر توکن کاربر حاوی `remnawaveAccess: true` باشد، احراز هویت می‌شود.
> **توجه**: باید ارائه‌دهنده هویت خود را برای اضافه کردن این claim سفارشی به توکن پیکربندی کنید. مراحل دقیق بسته به ارائه‌دهنده متفاوت است — معمولاً این کار از طریق تنظیمات "mappers"، "claims" یا "token customization" انجام می‌شود.
## عیب‌یابی
### "Invalid redirect URI"
مطمئن شوید که redirect URI در ارائه‌دهنده شما دقیقاً مطابقت دارد: `https://your-panel-domain.com/oauth2/callback/generic`
### "Invalid or missing email claim"
اطمینان حاصل کنید:
- کاربر یک آدرس ایمیل در ارائه‌دهنده شما تنظیم کرده است
- scope مربوط به `email` درخواست و اعطا شده است
- ارائه‌دهنده شما claim مربوط به `email` را در توکن قرار می‌دهد
### "State mismatch"
کوکی‌های مرورگر را پاک کنید و دوباره امتحان کنید. این می‌تواند در صورت قطع شدن جریان احراز هویت رخ دهد.
### "Token exchange failed"
بررسی کنید:
- **Token URL** صحیح است
- **Client ID** و **Client Secret** صحیح هستند
- endpoint توکن ارائه‌دهنده شما از سرور Remnawave قابل دسترسی است
### "Access denied"
ایمیل کاربر در لیست **Allowed Emails** نیست. آدرس ایمیل او را برای اعطای دسترسی اضافه کنید.
### خطاهای مربوط به PKCE
اگر خطاهای مربوط به `code_verifier` یا `code_challenge` دریافت می‌کنید:
- سعی کنید **With PKCE** را غیرفعال کنید اگر ارائه‌دهنده شما از آن پشتیبانی نمی‌کند
- یا اگر ارائه‌دهنده شما آن را الزامی کرده، فعالش کنید

View File

@@ -0,0 +1,19 @@
## OAuth2: GitHub
### Creating an OAuth Application
First, you need to create an OAuth application.
Follow the link to create an application: [https://github.com/settings/applications/new](https://github.com/settings/applications/new)
In the `Authorization callback URL` field, enter the address of your panel.
```bash
# Replace YOUR_PANEL_DOMAIN with your panel address
https://YOUR_PANEL_DOMAIN/oauth2/callback/github
```
Don't forget to replace `YOUR_PANEL_DOMAIN` with the correct panel address.
### OAuth2 Settings in Remnawave
After creating the OAuth2 application copy the `Client ID` and `Client Secret`. Insert this data in the corresponding section. And below, enter the list of email addresses for which login will be allowed.

View File

@@ -0,0 +1,80 @@
# احراز هویت Keycloak
Keycloak یک راه‌حل متن‌باز مدیریت هویت و دسترسی است که قابلیت‌های Single Sign-On (SSO) را فراهم می‌کند.
## پیش‌نیازها
1. سرور Keycloak در حال اجرا
2. دسترسی مدیر برای ایجاد کلاینت‌ها
## مراحل پیکربندی
### 1. ایجاد کلاینت در Keycloak
1. وارد کنسول مدیریت Keycloak شوید
2. realm خود را انتخاب کنید (یا یک realm جدید ایجاد کنید)
3. به **Clients****Create client** بروید
4. پیکربندی کنید:
- **Client ID**: `remnawave` (یا نام دلخواه شما)
- **Client Protocol**: `openid-connect`
- **Client authentication**: `ON`
5. **Valid redirect URIs** را تنظیم کنید: `https://your-panel-domain.com/oauth2/callback/keycloak`
6. **Web Origins** را تنظیم کنید: `https://your-panel-domain.com`
7. کلاینت را ذخیره کنید
### 2. دریافت اعتبارنامه کلاینت
1. به **Clients** → کلاینت شما → تب **Credentials** بروید
2. **Client secret** را کپی کنید
### 3. پیکربندی کنترل دسترسی
شما می‌توانید با استفاده از **یکی از دو روش** (یا هر دو) دسترسی را کنترل کنید:
#### گزینه A: استفاده از Claim (توصیه شده)
یک claim سفارشی `remnawaveAccess: true` به توکن اضافه کنید:
1. به **Clients** → کلاینت شما → تب **Client scopes** بروید
2. روی `<your-client-id>-dedicated` کلیک کنید
3. به تب **Mappers****Add mapper****By configuration** بروید
4. **Hardcoded claim** را انتخاب کنید
5. پیکربندی کنید:
- **Name**: `remnawaveAccess`
- **Token Claim Name**: `remnawaveAccess`
- **Claim value**: `true`
- **Claim JSON Type**: `boolean`
- **Add to ID token**: `ON`
- **Add to access token**: `ON`
6. ذخیره کنید
#### گزینه B: استفاده از ایمیل‌های مجاز
به جای پیکربندی claim، می‌توانید لیستی از آدرس‌های ایمیل مجاز را در تنظیمات Remnawave مشخص کنید. فقط کاربرانی که ایمیل آن‌ها در این لیست است می‌توانند وارد شوند.
## پیکربندی Remnawave
| فیلد | توضیحات |
|------|---------|
| **Keycloak Domain** | دامنه سرور Keycloak بدون `https://` (مثلاً `keycloak.example.com`) |
| **Frontend Domain** | دامنه پنل Remnawave بدون `https://` (مثلاً `panel.example.com`) |
| **Realm** | نام realm در Keycloak (مثلاً `master`) |
| **Client ID** | شناسه کلاینتی که ایجاد کردید |
| **Client Secret** | رمز کلاینت از تب Credentials |
| **Allowed Emails** | لیست آدرس‌های ایمیل مجاز برای ورود (در صورت استفاده از claim اختیاری است) |
## عیب‌یابی
### "Email is not in the allowed list and remnawaveAccess claim is not present"
مطمئن شوید که یکی از شرایط زیر برقرار است:
- کاربر claim `remnawaveAccess: true` را از طریق mapper پیکربندی کرده است، یا
- ایمیل کاربر به لیست Allowed Emails در تنظیمات Remnawave اضافه شده است
### "Invalid redirect URI"
بررسی کنید که redirect URI در Keycloak دقیقاً مطابقت داشته باشد: `https://your-panel-domain.com/oauth2/callback/keycloak`
### "State mismatch"
کوکی‌های مرورگر را پاک کنید و دوباره امتحان کنید. این می‌تواند اتفاق بیفتد اگر جریان احراز هویت قطع شده باشد.
### "Invalid or missing email claim"
مطمئن شوید که کاربر در Keycloak آدرس ایمیل دارد و email scope فعال است.

View File

@@ -0,0 +1,21 @@
## Authentication Method: Password
### Changing or Resetting Password
Use `Rescue CLI` to reset or change the password.
```bash
docker exec -it remnawave remnawave
```
After entering `Rescue CLI`, select the `Reset superadmin` option.
### Emergency Password Authentication Enable
If you have disabled the "Password" authentication method but later lost access to one of the other authentication methods you can enable the "Password" authentication method using `Rescue CLI`
```bash
docker exec -it remnawave remnawave
```
After entering `Rescue CLI`, select the `Enable password authentication` option.

View File

@@ -0,0 +1,36 @@
## OAuth2: PocketID
### Creating an OIDC Client
Log in to the PocketID admin panel and navigate to: `Settings``OIDC Clients``Add OIDC Client`
```
# Replace YOUR_PANEL_DOMAIN with your Remnawave panel address
https://YOUR_PANEL_DOMAIN/oauth2/callback/pocketid
```
### OAuth2 Settings in Remnawave
After creating the OAuth2 application copy the `Client ID` and `Client Secret`. Insert this data in the corresponding section. And below, enter the list of email addresses for which login will be allowed.
In the `Plain Domain` field, enter the domain address where your PocketID is located.
Just enter the domain name without the path and `https://`, for example: `pocketid.your-domain.com`
### Custom Claims (v2.4.0+)
Remnawave also supports authorization using Custom Claims.
When using this method, you do not need to specify an array of email addresses.
Key
```
remnawaveAccess
```
Value
```
true
```
Accordingly, if a user has this key (`remnawaveAccess: true`) in their token, they will be authorized.

View File

@@ -0,0 +1,43 @@
## Telegram OAuth2
> این راهنما برای نسخه **2.7.0** و بالاتر قابل استفاده است.
برای پیکربندی قابلیت «ورود از طریق تلگرام»، شما به یک ربات تلگرام نیاز دارید. همچنین باید ربات را به‌صورت اضافی پیکربندی کنید تا این قابلیت به‌درستی کار کند.
### پیکربندی ربات
1. @BotFather را باز کنید (https://t.me/botfather)
2. MiniApp را با دکمه "Open" باز کنید
3. ربات خود را انتخاب کرده و `Bot Settings` را بزنید
4. اگر در بخش `Web Login` دامنه‌ای از قبل مشخص شده — آن را حذف کنید.
5. دکمه Switch to OpenID Connect Login را بزنید.
`اگر این دکمه موجود نیست، پس از حذف دامنه یک سطح به عقب برگردید و مراحل را از مرحله ۳ تکرار کنید`
6. دکمه Add an Allowed URL را بزنید.
مقادیر زیر را وارد کنید:
- Trusted Origins: https://panel.domain.com
- Redirect URIs: https://panel.domain.com/oauth2/callback/telegram
### پیکربندی دسترسی
پس از تکمیل `Client ID`، `Client Secret` و `Frontend Domain`، باید فهرستی از شناسه‌های مدیرانی که اجازه ورود دارند را مشخص کنید.
1. از حساب مورد نظر، ربات را اجرا کنید https://t.me/Get_myidrobot
2. ربات در پاسخ شناسه شما را ارسال می‌کند، آن را در فیلد مربوطه وارد کنید.
---
### راه‌حل خطاهای شناخته‌شده
###### محافظت‌های مختلفی که روی پنل نصب شده‌اند (مانند کوکی‌ها و غیره) ممکن است با `Telegram OAuth2` به‌درستی کار نکنند.
از مسیر /oauth2/ در ریورس پروکسی خود برای حل این مشکل استفاده کنید
###### خطا: BOT_DOMAIN_INVALID
این خطا به دلیل پیکربندی نادرست دامنه ربات رخ می‌دهد — بخش «پیکربندی ربات» (بالا) را بررسی کنید. در صورت نیاز، مراحل را دوباره به‌ترتیب انجام دهید.
###### خطا: کد تأیید تلگرام هنگام ورود دریافت نمی‌شود
متأسفانه این مشکل از سمت Remnawave قابل حل نیست. سعی کنید از رباتی استفاده کنید که مدت‌ها پیش ایجاد شده یا از مرورگر دیگری استفاده کنید.
همچنین می‌توانید سعی کنید در یکی از منابع «رسمی» وارد شوید — مثلاً https://fragment.com. از آنجا که نشست تلگرام در مرورگر مشترک است — می‌توانید سپس وارد پنل شوید.

View File

@@ -0,0 +1,20 @@
## OAuth2: Yandex
The Yandex authentication method is not recommended for use.
### Creating an OAuth Application
You need to create an OAuth application in Yandex.
Follow the link to create an application: https://oauth.yandex.com/client/new
On the second step of application creation, select the "Web application" option and enter the `Callback URL`
```
# Replace YOUR_PANEL_DOMAIN with your Remnawave panel address
https://YOUR_PANEL_DOMAIN/oauth2/callback/yandex
```
Don't forget to replace `YOUR_PANEL_DOMAIN` with the correct panel address.
On the third step of creation make sure to check the box next to `Access to email address`, no other permissions are required.

View File

@@ -0,0 +1,31 @@
## Xray JSON Subscription Format
The Xray JSON format provides native JSON-based subscription support for compatible clients. Simply append `/json` to your subscription URL to enable this format.
### Supported Applications
- **v2rayNG** — version 1.8.29 or higher
- **V2rayN** — version 6.40 or higher
- **Streisand** — all versions
- **Happ** — all versions
- **V2Box** — all versions
- **ktor-client** — all versions
### Usage Instructions
**Step 1:** Modify your subscription URL
Append `/json` to the end of your subscription link:
`https://<server>/api/sub/xxxx/json`
**Step 2:** Verify compatibility
Ensure your client application meets the minimum version requirements listed above.
**Alternatively:** Enable JSON At the base path
Enable the "Serve JSON at base subscription" option in the subscription settings. This will serve the JSON subscription at the base subscription path (without having to append /json).
### Fallback Behavior
For clients that don't support the JSON format (such as Base64 or Mihomo-based clients), the subscription will automatically fall back to the standard format compatible with your client.

View File

@@ -0,0 +1,107 @@
## Config Profiles
A Config Profile, in the context of Remnawave, represents a complete server configuration for the [Xray](https://xtls.github.io/en/config/) core.
In this configuration, you define _inbounds_ that your users will later connect to.
**The details of Xray configuration setup will not be described here, as this is a topic for independent study - use the official [Xray](https://xtls.github.io/en/config/) documentation to learn about all the capabilities of the core.**
When creating a new Config Profile, it is created by default with one _inbound_ of type **Shadowsocks**. After the Config Profile is created - you can modify this or add a new _inbound_.
_Tip: To add a new inbound, for example with the **VLESS** protocol - simply add another object inside the `inbounds:[]` array._
Currently, Remnawave supports protocols such as: `VLESS`, `Trojan`, `Shadowsocks` (`chacha20-ietf-poly1305`, `2022-blake3-aes-256-gcm`, `aes-128-gcm`, `aes-256-gcm`), `Hysteria2` (client Xray-Json generation only). And also the following transports: `RAW (TCP)`, `XHTTP`, `Websocket`, `HTTPUpgrade`, `gRPC`, `KCP`.
It's important to note that Remnawave also supports protocols: `Tunnel`, `mixed(socks)`, `wireguard`, `http` - however, the panel will completely ignore them and user management for these protocols will be unavailable. These _inbounds_ will be passed to Xray in the exact form you specify them.
For the main protocols (`VLESS`, `Trojan`, `Shadowsocks`), Remnawave will manage the list of users that will be inside the server configuration. No additional actions are required on your part.
---
### Config Profiles List
In the general list of Config Profiles, a brief summary is available for each created Config Profile. Under the Config Profile name, you can see the number of active _inbounds_ within it, as well as the number of active **nodes** on which this Config Profile is active. Both icons are clickable - clicking on them will open the corresponding sections.
When clicking on _inbounds_ - a list of _inbounds_ will open, and for each inbound, it will show on how many internal squads this _inbound_ is activated.
When clicking on _nodes_ - a list of _nodes_ where this specific Config Profile is active will open.
In the additional actions menu (down arrow), options for quick Config Profile viewing, viewing Config Profile with snippets, as well as other service options are available.
---
### Config Profile Editor
The Config Profile editor provides a full-featured JSON editor with syntax checking. Also, when hovering over certain objects, a tooltip with information from the Xray documentation will be available.
With any changes, the entire configuration is immediately validated by running a lightweight version of the core. Such validation helps prevent trivial errors and typos.
In the additional menu (at the very bottom, button with three bars), additional options are available. Let's skip the basic things: copy all, select all, and so on - these options are self-explanatory.
The "**Download from Github**" option will open an additional menu where you can download configuration examples from users. **These examples are not ready-to-use configurations, but are merely examples - keep this in mind.**
The "**Generate Keys**" option allows you to quickly and conveniently generate necessary key pairs right in the browser - for example, in the case of `Reality`, you will definitely need a `privateKey`, which can be generated in this menu. Other generation options are also available there, which will be useful for `Vless Encryption` - `ML-DSA65` and `ML-KEM768`.
---
### Snippets
When you have many Config Profiles - it can be quite difficult to quickly change small details that are present in all Config Profiles but differ in minor aspects.
For example, you have several profiles - let's say 10 pieces. In each of the 10, the routing section is the same and you would like to quickly and conveniently replace the rules in all profiles at once. With the snippets functionality, you only need to change the "rule" or "rules" in one place, and then they will automatically be pulled into the profiles.
Currently, you can predefine array elements for objects such as `outbounds` and `rules`. After creating a snippet, it will be available in one of these objects.
```
{
"outbounds": [
{
"snippet": "snippet-name"
}
]
}
```
Additional information about them is available by clicking on the question mark in the snippets menu.
### Flow Control (VLESS)
_This feature is available only in version 2.3.0 and above._
By default, Remnawave automatically adds the `flow` parameter for the following configurations: VLESS+TLS, REALITY+RAW, or TCP.
If you wish to override this behavior, add the `flow` field to the `settings` object.
```json
"settings": {
"flow": "",
"clients": [],
"decryption": "none"
},
```
Available values for `flow`:
- `xtls-rprx-vision`
- `""`
### Kcp with FinalMask
_This feature is available only in version 2.7.0 and above._
In some cases, you may need to specify a custom MTU (in the `kcpSettings` object) when using FinalMask. Unfortunately, Xray configuration does not clearly separate client and server MTU values.
```json
{
"mtu": 1350
}
```
Since Remnawave needs to generate the client-side configuration, we have added a custom field that does not exist in the original Xray configuration.
```json
{
"clientMtu": 70
}
```
The `clientMtu` parameter (if present) will be converted to `mtu` on the client side. This way, you can set a custom MTU for the client side.

View File

@@ -0,0 +1,43 @@
## External Squads
Using external squads, you can override certain settings or templates that users use when requesting a subscription. _A user cannot have more than one active external squad._
For example, for different user groups, you can set different routing (for Happ, v2rayTUN), and different routing can also be within templates.
Using the additional menu, you can quickly assign an external squad to all users (or conversely remove all users from an external squad).
If a user has no external squad selected global settings from the "**Subscription**" section are used, as well as the "**Default**" client config template.
---
Let's smoothly move on to reviewing the settings available in the external squad card.
### Template Override
When a user requests a subscription depending on the client application from which the request came, the user may receive different templates. For example, if the application runs on the Mihomo core Remnawave will detect this and provide the **Default** template of the **Mihomo** type. (You can manage templates in the corresponding section).
Inside Remnawave, you can create an infinite number of templates for each type (Mihomo, Stash, Xray Json, Singbox, Clash), but by default, the **Default** template will always be provided.
**To override this behavior is exactly what this setting inside the external squad exists for.**
Let's say, for a specific external squad we want to use a _Custom Template_ that belongs to the **Mihomo** type, in this case we select this template in the corresponding section and save the changes. If a request comes from a user who belongs to this external squad instead of the _Default_ template, they will receive the _Custom Template_.
If you leave the override field empty the user who is in this squad will receive the _Default_ template.
_Please note, template override in the "Response Rules" section has a higher priority than override in this section._
### Settings (Subscription)
In this section, general settings that are located in the "Subscription" → "Settings" section are overridden. Accordingly, by overriding settings within the squad, you can override many parameters at once for an entire group of users.
Keep in mind, if any of the parameters is explicitly overridden (including an empty value) it will be overridden. Only deletion of the override (trash icon) will cancel the override.
For example, in general settings my profile header is set as "Remnawave", but for 10 users I want to override it, for example to "Remnawave v.2.x", in this case I override this parameter in this section, and then assign this external squad to the needed 10 users.
### Hosts
Based on the logic from the previous point in this section you can completely override some parameters that you might have noticed in the card of each **host** you created.
**Values overridden here will be applied to all hosts that the user receives in the subscription.**
For example, by overriding `vlessRouteId` we can assign a specific value and thus "_route_" an entire group of users (those who will be in this squad). Naturally, the other half of such routing settings is located in the server configuration the Config Profile.

View File

@@ -0,0 +1,67 @@
## Hosts
In brief, hosts are the client representation of your server configuration. If an **inbound** is required on the server for a successful connection, then on the client side the user needs a **host**.
A group of hosts (or you could say a _list_) represents a subscription. A subscription is a link, and after adding such a link to a client application, the user sees a list of hosts (servers, if you will). The user can then choose any of them.
It's important to note that a **host** is primarily just a client interpretation of your server component. For example, if a user has received a subscription (the list of hosts is already in their hands) and you disable this host - the user will **still be able** to connect to the server that this host points to. But upon updating the subscription - they will no longer have this host.
Since a host is directly bound to an inbound (which is located in the profile) - the host inherits most settings from it. However, in some cases it can be useful to override or supplement these settings - that's what the **advanced** settings section is for.
---
When creating a new host or editing an existing one, you have access to two sections: **Basic** and **Advanced** (settings).
### Basic
#### Remark
In this field, you define how this host will be displayed in the client application. Usually, the name of the country the user will be connecting to is written here.
_Tip: To display a country flag in the client application - add an emoji at the very beginning of the remark._
#### Inbound Selection (and profile)
As mentioned above - a host is just a client representation of your server configuration, so selecting an inbound is a mandatory requirement for creating a host. Depending on the number of inbounds, nodes, and profiles, select the appropriate inbound in the selection menu.
#### Address and Port
The address is a domain or IP address. In most cases, you need to specify the address or domain of the server the user will be connecting to. The port usually corresponds to the **inbound** port, _in some cases it may differ._
_You can also enter multiple domain names in the address field - for example: `node-1.com,node-2.com,node-3.com`. You might think that this could theoretically be used for some load balancing, but it's important to note - the user will receive only one of these addresses when requesting a subscription (which specific one they get is determined randomly and is not tied to any load balancing logic). Consequently - until the user updates the subscription in the client application (or unless auto-update triggers) - the user's address will not change._
#### Tag and Nodes
These parameters are not visible to the end user, they are more for the panel administrator (you) to make it easier to navigate through created hosts in the future if there are many of them.
In particular, selecting a node in this field doesn't play a functional role - **this is only a visual binding for easier navigation in the future.**
---
### Advanced
**In most cases, you don't need to edit anything from this section unless you clearly understand what purposes you're doing it for. Incorrect modification of some parameters may result in your connection not working. Approach editing each item with all seriousness and always double-check settings before applying changes.**
In this section, we won't go through every item - we'll focus on the main ones.
#### SNI (ServerNames)
In some cases, it may be necessary to override the `serverNames` object settings (which are defined within the inbound in the profile) for a specific host.
Keep in mind, `serverNames` in simple terms is the _password_ by which, for example, **Reality** determines the **validity** of the connection. If you specify an **SNI** in this field, for example `example.com`, and within the inbound `serverNames` looks like this:
```json
"serverNames": [
"example1.com",
"example2.com"
]
```
Such a connection will not work, as `example.com` is not in the list of allowed `SNI`.
#### Override SNI from Address
By default, Remnawave takes the first object from the `serverNames` array (of the inbound) to add SNI to the client host. If you enable this parameter - Remnawave will take the address (which you specified in the **Basic** section) and pass it to the client.
Among other items in this section, the `vlessRouteId` field is also worth noting, which is a small abstraction layer over Xray Core and provides you with a simple way to use the `vlessRoute` functionality that Xray provides. <a href="https://xtls.github.io/en/config/routing.html#ruleobject">Learn more about routing rules.</a>
---

View File

@@ -0,0 +1,21 @@
## Internal Squads
The main purpose of internal squads is **access control** for users.
Internal squads are directly linked to **profiles** and their **inbounds**. You can assign them as many active inbounds as needed (which are located inside profiles). And since profiles and their inbounds are directly linked to nodes using an internal squad, we can finely control which users or groups of users can have access to nodes.
---
In each squad's card (in the general list), you can see the number of active inbounds, as well as the number of members in this squad (users who belong to it).
By clicking on the additional actions button (in the squad card), you can also quickly add or remove all users. If you need to assign a squad to _specific_ users you can do this in the **"Users"** section.
Managing users and nodes that can be accessible to them can sometimes be very confusing use the **"Available Nodes"** button to quickly see which nodes are available to this squad. Let me remind you that when creating or modifying a **node**, we also select which **profile** will be used and which **inbounds** from it will be active on the node. And since we also select **inbounds** inside the squad, we can use these relationships to determine specific nodes that this squad (and consequently its members) will have access to.
---
For example, we have two user groups: **free** and **paid**. And we want **free** users to have access to _server group #1_, and paid users to have access to both _server group #1_ and additionally to _server group #2_.
For this purpose, we create two squads: **Free** and **Premium**, and inside each of them we select the corresponding inbounds.
And let's say we're creating a user in this case, if we have a free user we simply activate the **Free** internal squad for them. And when we have a paid user we activate both squads **Free** and **Premium** (if the user needs access to all nodes/inbounds). But we can also activate only one squad for a paid user **Premium**, in which case the user will not have access to the nodes/inbounds from the **Free** group.

View File

@@ -0,0 +1,115 @@
# Аутентификация через Generic OAuth2
Generic OAuth2 позволяет подключить любой OAuth2-совместимый провайдер идентификации к Remnawave. Это полезно, когда вы хотите использовать провайдеры, для которых нет специальной интеграции (например, Authentik, Authelia, Zitadel, Google, Microsoft и др.).
## Требования
1. OAuth2-совместимый провайдер идентификации
2. Права администратора для создания OAuth2 клиентов/приложений
3. Провайдер должен поддерживать claim `email` в токенах
## Шаги настройки
### 1. Создание OAuth2 приложения в вашем провайдере
Точные шаги зависят от провайдера, но в целом вам нужно:
1. Войти в админ-консоль вашего провайдера идентификации
2. Создать новое OAuth2/OIDC приложение
3. Настроить:
- **Тип приложения**: Web Application
- **Тип гранта**: Authorization Code
- **Redirect URI**: `https://your-panel-domain.com/oauth2/callback/generic`
4. Сохранить **Client ID** и **Client Secret**
5. Найти **Authorization URL** и **Token URL** провайдера (обычно в документации или well-known endpoint)
### 2. Поиск URL-адресов провайдера
У большинства провайдеров эти эндпоинты задокументированы. Типичные примеры:
| Провайдер | Authorization URL | Token URL |
| --------- | ------------------------------------------------------------------ | -------------------------------------------------------------- |
| Google | `https://accounts.google.com/o/oauth2/v2/auth` | `https://oauth2.googleapis.com/token` |
| Microsoft | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize` | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token` |
| Authentik | `https://your-authentik.com/application/o/authorize/` | `https://your-authentik.com/application/o/token/` |
| Authelia | `https://your-authelia.com/api/oidc/authorization` | `https://your-authelia.com/api/oidc/token` |
| Zitadel | `https://your-zitadel.com/oauth/v2/authorize` | `https://your-zitadel.com/oauth/v2/token` |
### 3. Поддержка PKCE
**PKCE (Proof Key for Code Exchange)** добавляет дополнительный уровень безопасности в OAuth2 поток. Включите эту опцию, если:
- Ваш провайдер поддерживает PKCE (большинство современных провайдеров поддерживают)
- Вы хотите усилить защиту от атак перехвата кода авторизации
- Ваш провайдер требует PKCE для публичных клиентов
> **Рекомендация**: Включите PKCE, если ваш провайдер это поддерживает.
## Настройка Remnawave
| Поле | Описание |
| --------------------- | ------------------------------------------------------------------------------------ |
| **Client ID** | ID клиента/приложения от вашего OAuth2 провайдера |
| **Client Secret** | Секрет клиента от вашего OAuth2 провайдера |
| **Authorization URL** | URL эндпоинта авторизации OAuth2 (например, `https://provider.com/oauth2/authorize`) |
| **Token URL** | URL эндпоинта токена OAuth2 (например, `https://provider.com/oauth2/token`) |
| **Frontend Domain** | Домен вашей панели Remnawave без `https://` (например, `panel.example.com`) |
| **With PKCE** | Включить PKCE (Proof Key for Code Exchange) для повышенной безопасности |
| **Allowed Emails** | Список email-адресов, которым разрешён вход |
## Контроль доступа
Вы можете контролировать доступ **одним из двух способов** (или обоими):
### Вариант A: Использование списка Allowed Emails
Укажите список разрешённых email-адресов в настройках Remnawave. Только пользователи с email из этого списка смогут войти.
### Вариант B: Использование Custom Claim
Если список **Allowed Emails** пуст, Remnawave проверит наличие кастомного claim в токене:
| Ключ | Значение |
| ----------------- | -------- |
| `remnawaveAccess` | `true` |
Если токен пользователя содержит `remnawaveAccess: true`, он будет авторизован.
> **Примечание**: Вам нужно настроить ваш провайдер идентификации для включения этого кастомного claim в токен. Точные шаги зависят от провайдера — обычно это делается через настройки "mappers", "claims" или "token customization".
## Устранение неполадок
### "Invalid redirect URI"
Убедитесь, что redirect URI в вашем провайдере точно совпадает: `https://your-panel-domain.com/oauth2/callback/generic`
### "Invalid or missing email claim"
Проверьте:
- У пользователя установлен email-адрес в провайдере
- Scope `email` запрошен и предоставлен
- Ваш провайдер включает claim `email` в токен
### "State mismatch"
Очистите куки браузера и попробуйте снова. Это может произойти, если процесс аутентификации был прерван.
### "Token exchange failed"
Проверьте:
- **Token URL** указан правильно
- **Client ID** и **Client Secret** корректны
- Эндпоинт токена вашего провайдера доступен с сервера Remnawave
### "Access denied"
Email пользователя отсутствует в списке **Allowed Emails**. Добавьте его email-адрес для предоставления доступа.
### Ошибки, связанные с PKCE
Если вы получаете ошибки, связанные с `code_verifier` или `code_challenge`:
- Попробуйте отключить **With PKCE**, если ваш провайдер его не поддерживает
- Или включите, если ваш провайдер его требует

View File

@@ -0,0 +1,19 @@
## OAuth2: Github
### Создание OAuth приложения
Для начала вам необходимо создать OAuth приложение.
Перейдите по ссылке для создания приложения: [https://github.com/settings/applications/new](https://github.com/settings/applications/new)
В пункте `Authorization callback URL` введите адрес вашей панели.
```bash
# Замените YOUR_PANEL_DOMAIN на адрес вашей панели
https://YOUR_PANEL_DOMAIN/oauth2/callback/github
```
Не забудьте заменить `YOUR_PANEL_DOMAIN` на корректный адрес панели.
### Настройки OAuth2 в Remnawave
После создания OAuth2 приложения скопируйте `Client ID` и `Client Secret`. Вставьте эти данные в соответствующем разделе. А чуть ниже введите список email-адресов для которых будет разрешен вход.

View File

@@ -0,0 +1,80 @@
# Аутентификация через Keycloak
Keycloak - это решение для управления идентификацией и доступом с поддержкой Single Sign-On (SSO).
## Требования
1. Работающий сервер Keycloak
2. Доступ администратора для создания клиентов
## Шаги настройки
### 1. Создание клиента в Keycloak
1. Войдите в Keycloak Admin Console
2. Выберите realm (или создайте новый)
3. Перейдите в **Clients****Create client**
4. Настройте:
- **Client ID**: `remnawave` (или другое имя)
- **Client Protocol**: `openid-connect`
- **Client authentication**: `ON`
5. **Valid redirect URIs**: `https://ваш-домен-панели.com/oauth2/callback/keycloak`
6. **Web Origins**: `https://ваш-домен-панели.com`
7. Сохраните клиент
### 2. Получение Client Secret
1. Перейдите в **Clients** → ваш клиент → вкладка **Credentials**
2. Скопируйте **Client secret**
### 3. Настройка контроля доступа
Вы можете контролировать доступ **одним из двух способов** (или обоими):
#### Вариант A: Через Claim (Рекомендуется)
Добавьте claim `remnawaveAccess: true` в токен:
1. Перейдите в **Clients** → ваш клиент → вкладка **Client scopes**
2. Нажмите на `<your-client-id>-dedicated`
3. Вкладка **Mappers****Add mapper****By configuration**
4. Выберите **Hardcoded claim**
5. Настройте:
- **Name**: `remnawaveAccess`
- **Token Claim Name**: `remnawaveAccess`
- **Claim value**: `true`
- **Claim JSON Type**: `boolean`
- **Add to ID token**: `ON`
- **Add to access token**: `ON`
6. Сохраните
#### Вариант B: Через список email-ов
Вместо настройки claim вы можете указать список разрешённых email-адресов в настройках Remnawave. Только пользователи с email из этого списка смогут войти.
## Настройки в Remnawave
| Поле | Описание |
|------|----------|
| **Keycloak Domain** | Домен сервера Keycloak без `https://` (например, `keycloak.example.com`) |
| **Frontend Domain** | Домен панели Remnawave без `https://` (например, `panel.example.com`) |
| **Realm** | Название realm в Keycloak (например, `master`) |
| **Client ID** | ID созданного клиента |
| **Client Secret** | Секрет из вкладки Credentials |
| **Allowed Emails** | Список email-адресов с разрешённым входом (опционально при использовании claim) |
## Решение проблем
### "Email is not in the allowed list and remnawaveAccess claim is not present"
Убедитесь что выполнено одно из условий:
- У пользователя настроен claim `remnawaveAccess: true` через маппер, ИЛИ
- Email пользователя добавлен в список Allowed Emails в настройках Remnawave
### "Invalid redirect URI"
Проверьте, что redirect URI точно совпадает: `https://ваш-домен-панели.com/oauth2/callback/keycloak`
### "State mismatch"
Очистите cookies браузера и попробуйте снова. Это может произойти если процесс аутентификации был прерван.
### "Invalid or missing email claim"
Убедитесь, что у пользователя указан email в Keycloak и включён scope email.

View File

@@ -0,0 +1,21 @@
## Метод входа: пароль
### Изменение или сброс пароля
Используйте `Rescue CLI` для сброса или изменения пароля.
```bash
docker exec -it remnawave remnawave
```
После входа в `Rescue CLI` выберите пункт `Reset superadmin`.
### Экстренное включение входа по паролю
Если вы отключили метод входа "Пароль", но в дальнейшем потеряли доступ к одному из других методов входа вы можете включить метод входа "Пароль" с помощью `Rescue CLI`
```bash
docker exec -it remnawave remnawave
```
После входа в `Rescue CLI` выберите пункт `Enable password authentication `.

View File

@@ -0,0 +1,35 @@
## OAuth2: PocketID
### Создание OIDC Client
Зайдите в админ-панель PocketID и перейдите в раздел `Settings``OIDC Clients``Add OIDC Client`
```
# Замените YOUR_PANEL_DOMAIN на ваш адрес панели Remnawave
https://YOUR_PANEL_DOMAIN/oauth2/callback/pocketid
```
### Настройки OAuth2 в Remnawave
После создания OAuth2 приложения скопируйте `Client ID` и `Client Secret`. Вставьте эти данные в соответствующем разделе. А чуть ниже введите список email-адресов для которых будет разрешен вход.
В поле `Домен` (`Plain Domain`) введите доменный адрес, на котором у вас расположен PocketID. Достаточно ввести просто доменное имя без пути и https://, например: `pocketid.your-domain.com`
### Custom Claims (v2.4.0+)
Remnawave так же поддерживает авторизацию через добавление Custom Claims.
При использовании этого метода, массив email-адресов можно не указывать.
Ключ
```
remnawaveAccess
```
Значение
```
true
```
Соотвественно, если пользователь имеет этот ключ (`remnawaveAccess: true`) в токене, то он будет авторизован.

View File

@@ -0,0 +1,43 @@
## Telegram OAuth2
> Этот гайд актуален для версии **2.7.0** и выше.
Для настройки функции "Вход через Telegram" вам необходим Telegram-бот, так же необходимо дополнительно настроить бота, чтобы функция работала корректно.
### Настройка бота
1. Откройте @BotFather (https://t.me/botfather)
2. Откройте MiniApp кнопкой "Open"
3. Выберите вашего бота и нажмите `Bot Settings`
4. Если в разделе `Web Login` уже указан домен — удалите его.
5. Нажмите кнопку Switch to OpenID Connect Login.
`Если такой кнопки нет, после удаления домена вернитесь на пункт меню назад и повторите действия с шага 3`
6. Нажмите Add an Allowed URL.
Укажите следующие значения:
- Trusted Origins: https://panel.domain.com
- Redirect URIs: https://panel.domain.com/oauth2/callback/telegram
### Настройка доступа
После заполнения `Client ID`, `Client Secret` и `Frontend Domain`, вам необходимо указать список ID администраторов, для которых будет доступен вход.
1. С нужного аккаунта запустите бота https://t.me/Get_myidrobot
2. В ответ бот пришлет вам ваш ID, введите его в соответсвующее поле.
---
### Решение известных ошибок
###### Разного рода защиты установленные поверх панели (наподобие куки, и тд.) могут работать некорректно с `Telegram OAuth2`.
Используйте путь /oauth2/ в своих реверс прокси для решения этой проблемы
###### Ошибка: BOT_DOMAIN_INVALID
Эта ошибка возникает из-за неправильной настройки домена бота изучите пункт "Настройка бота" (выше). При необходимости выполните повторно этот пункт шаг за шагом.
###### Ошибка: не приходит код подтверждения от Telegram при логине
К сожалению, со стороны Remnawave эту проблему не решить. Попробуйте использовать бота, который был создан давно или использовать другой браузер.
Так же, как вариант вы можете попробовать залогиниться на одном из "официальных" ресурсорв например https://fragment.com. Так как сессия Telegram в рамках браузера будет общей вы можете попробовать залогиниться в панель.

View File

@@ -0,0 +1,20 @@
## OAuth2: Yandex
Метод аутентификации через Яндекс не рекомендуется к использованию.
### Создание OAuth приложения
Вам необходимо создать Oauth-приложение в Яндексе.
Перейдите по ссылке для создания приложения: https://oauth.yandex.com/client/new
На втором шаге создания приложения выберите опцию «Веб-приложение» и впишите `Callback URL`
```
# Замените YOUR_PANEL_DOMAIN на ваш адрес панели Remnawave
https://YOUR_PANEL_DOMAIN/oauth2/callback/yandex
```
Не забудьте заменить `YOUR_PANEL_DOMAIN` на корректный адрес панели.
На третьем шаге создания обязательно поставьте галочку возле пункта `Access to email address` (`Доступ к email адресу`), никаких других разрешений не требуется.

View File

@@ -0,0 +1,31 @@
## Формат подписки Xray JSON
Формат Xray JSON обеспечивает поддержку подписок в формате JSON для совместимых клиентов. Просто добавьте `/json` в конец URL вашей подписки, чтобы включить этот формат.
### Поддерживаемые приложения
- **v2rayNG** — версия 1.8.29 или выше
- **V2rayN** — версия 6.40 или выше
- **Streisand** — все версии
- **Happ** — все версии
- **V2Box** — все версии
- **ktor-client** — все версии
### Инструкции по использованию
**Шаг 1:** Измените URL вашей подписки
Добавьте `/json` в конец вашей ссылки на подписку:
`https://<сервер>/api/sub/xxxx/json`
**Шаг 2:** Проверьте совместимость
Убедитесь, что ваше клиентское приложение соответствует минимальным требованиям к версии, перечисленным выше.
**Или:** Включите JSON на базовом пути
Включите опцию "Обслуживать JSON на базовом пути подписки" в настройках подписки. Это позволит обслуживать подписку JSON на базовом пути подписки (без необходимости добавлять /json).
### Резервное поведение
Для клиентов, которые не поддерживают формат JSON (таких как клиенты на основе Base64 или Mihomo), подписка автоматически вернется к стандартному формату, совместимому с вашим клиентом.

View File

@@ -0,0 +1,107 @@
## Профили
Профиль, в контексте Remnawave, представляет из себя полную серверную конфигурацию ядра [Xray](https://xtls.github.io/ru/config/).
В этой конфигурации вы прописываете _инбаунды_, к которым потом будут подключаться ваши пользователи.
**Здесь не будут описаны детали настройки конфигурации Xray, так как это тема для самостоятельного изучения воспользуйтесь официальной документацией [Xray](https://xtls.github.io/ru/config/) для изучения всех возможностей ядра.**
При создании нового профиля, профиль по умолчанию создается с одним _инбаундом_ типа **Shadowsocks**. После того, как профиль создан вы можете изменить этот или добавить новый _инбаунд_.
_Совет: чтобы добавить новый инбаунд, например с протоколом **VLESS** просто добавьте еще один объект внутрь массива `inbounds:[]`._
На данный момент, Remnawave поддерживает такие протоколы как: `VLESS`, `Trojan`, `Shadowsocks` (`chacha20-ietf-poly1305`, `2022-blake3-aes-256-gcm`, `aes-128-gcm`, `aes-256-gcm`), `Hysteria2` (только для клиентского Xray-Json). И так же следующие транспорты: `RAW (TCP)`, `XHTTP`, `Websocket`, `HTTPUpgrade`, `gRPC`, `KCP`.
Важно отметить, что Remnawave так же поддерживает протоколы: `Tunnel`, `mixed(socks)`, `wireguard`,`http` однако панель будет полностью их игнорировать и менеджмент пользователей для этих протоколов будет недоступен. Эти _инбаунды_ будет переданы в Xray в таком виде, в каком вы их укажите.
Для основных протоколов (`VLESS`, `Trojan`, `Shadowsocks`) Remnawave будет заниматься управлением списка пользователей, которые будут внутри серверной конфигурации. С вашей стороны никаких дополнительных действий не требуется.
---
### Список профилей
В общем списке профилей доступна краткая сводка по каждому созданному профилю. Под названием профиля вы можете увидеть количество активных _инбаундов_ внутри него, а так же количество активных **нод**, на которых этот профиль активен. Оба значка кликабельны, при нажатии на них откроются соотвествующие разделы.
При клике на _инбаунды_ будет открыт список _инбаундов_, и так же для каждого инбаунда будет написано, на скольких внутренних сквада этот _инбаунд_ активирован.
При клике на оды_ будет открыт список од_, который этот конкретный профиль активен.
В меню дополнительных действий (стрелочка вниз) доступны опции по быстрому просмотру конфигурации, просмотр конфигурации со сниппетами, а так же остальные сервисные опции.
---
### Редактор конфигурации
В редакторе конфигурации доступен полноценный JSON редактор, с проверкой синтаксиса, так же при наведении на некоторые объекты будет доступна всплывающая подсказка с информацией из документации Xray.
При любых изменениях, вся конфигурация немедленно валидируется путем запуска облегченной версии ядра. Такая валидация поможет не допускать банальных ошибок и опечаток.
В дополнительном меню (в самом низу, кнопка с тремя полосками) доступны дополнительные опции. Опустим базовые вещи: скопировать все, выделить все и так далее эти опции понятны и без объяснения.
Пункт "**Скачать с Github**" откроет дополнительное меню, в котором вы можете скачать примеры конфигурации от пользователей. **Эти примеры не представляют из себя готовую конфигурацию, а лишь являются примерами имейте это в виду.**
Пункт "**Сгенерировать ключи**" позволит прямо в браузере быстро и удобно сгенерировать необходимые пары ключей например, в случае с `Reality` вам гарантировано будет нужен `privateKey`, который как раз можно сгенерировать в этом меню. Там же доступны и другие варианты генерации, которые пригодятся для `Vless Encryption` - `ML-DSA65` и `ML-KEM768`.
---
### Сниппеты
Когда профилей (конфигураций) становится много бывает довольно сложно быстро поменять какие мелочи, которые присутствуют во всех профилях, но отличаются в мелочах.
Например, у вас есть несколько профилей допустим 10 штук, в каждом из 10 штук раздел роутинга у вас одинаковый и вы бы хотели быстро и удобно заменить правила во всех профилях сразу. С функционалом сниппетов вам будет достаточно изменить "правило" или "правила" в одном месте, а потом они автоматически подтянутся в профили.
На данный момент вы можете заранее предопределить элементы массивов для таких объектов как `outbounds` и `rules`. После создания сниппета он будет доступен в одном из этих объектов.
```
{
"outbounds": [
{
"snippet": "snippet-name"
}
]
}
```
Дополнительная информация по ним доступна при нажатии на знак вопроса в меню сниппетов.
### Контроль flow (VLESS)
_Эта функция доступна только на версии 2.3.0 и выше._
По умолчанию, Remnawave автоматически добавляет flow для следующих конфигураций: VLESS+TLS/REALITY+RAW/TCP.
Если вы хотите переопределить это поведение, добавьте объект `flow` в объект `settings`.
```json
"settings": {
"flow": "",
"clients": [],
"decryption": "none"
},
```
Доступные значения для `flow`:
- `xtls-rprx-vision`
- `""`
### Kcp with FinalMask
_Эта функция доступна только на версии 2.7.0 и выше._
В некоторых ситуациях требуется передавать кастомный MTU (в объекте `kcpSettings`) при использовании FinalMask. К сожалению, в конфигурации Xray нет четкого разделения на клиентский и серверный MTU.
```json
{
"mtu": 1350
}
```
Так как Remnawave необходимо генерировать клиентскую сторону мы добавили кастомное поле, которого не существует в оригинальной конфигурации Xray.
```json
{
"clientMtu": 70
}
```
Параметр `clientMtu` (при его наличии) будет преобразован в `mtu` в клиентской стороне. Таким образом, вы можете передать кастомный MTU в клиентской стороне.

View File

@@ -0,0 +1,43 @@
## Внешние сквады
С помощью внешних сквадов вы можете переопределить некоторые настройки или шаблоны, которые получают пользователи при запросе подписки. _У одного пользователя не может быть больше одного активного внешнего сквада._
Например, для разных групп пользователей вы можете задать разный роутинг (для Happ, v2rayTUN), разный роутинг может быть в том числе внутри шаблонов.
С помощью дополнительного меню вы можете быстро назначить внешний сквад всем пользователям (или наоборот убрать всех пользователей из внешнего сквада).
Если у пользователя не выбран внешний сквад будут использованы глобальные настройки из раздела «**Подписка**», а так же шаблон клиентского конфига «**Default**».
---
Плавно перейдем к рассмотрению настроек, которые доступны в карточке внешнего сквада.
### Переопределение шаблонов
Когда пользователь запрашивает подписку в зависимости от клиентского приложения из которого пришел запрос, пользователь может получить разные шаблоны. Например, если приложение, которое работает на ядре Mihomo Remnawave увидит это и выдаст **Default** шаблон типа **Mihomo**. (Управлять шаблонами вы можете в соотвествующем разделе).
Внутри Remnawave вы можете создавать бесконечное множество шаблонов для каждого типа (Mihomo, Stash, Xray Json, Singbox, Clash), но по умолчанию всегда будет отдаваться **Default** шаблон соотвествующего типа.
**Чтобы переопределить это поведение как раз и существует эта настройка внутри внешнего сквада.**
Допустим, для определенного внешнего сквада мы хотим использовать _Custom Template_, который принадлежит к типу **Mihomo**, в таком случае мы выбираем этот шаблон в соответствующем разделе и сохраняем изменения. Если запрос придет от пользователя, который состоит в этом внешнем скваде вместо _Default_ шаблона он получит _Custom Template_.
Если оставить поле переопределения пустым пользователь, который находится в этом скваде получит _Default_ шаблон.
_Обратите внимание, переопределение шаблона в разделе «Правила ответов» имеет более высокий приоритет, чем переопределение в этом разделе._
### Настройки (подписки)
В этом разделе переопределяются общие настройки, которые находятся в разделе «Подписка» → «Настройки». Соотвественно, с помощью переопределения настроек в рамках сквада вы можете переопределить многие параметры сразу для целой группы пользователей.
Имейте в виду, если любой из параметров явно переопределен (в том числе пустое значение) он будет переопределен. Только удаление переопределения (значек корзины) отменит переопределение.
К примеру, в общих настройках заголовок профиля у меня указан как «Remnawave», но для 10-ти пользователей я хочу переопределить его, например на «Remnawave v.2.x», в таком случае в этом разделе я переопределяю этот параметр, а потом нужным 10-ти пользователям назначаю этот внешений сквад.
### Хосты
Основываясь на логике из предыдущего пункта в этом разделе можно полностью переопределить некоторые параметры, которые вы могли заметить в карточке каждого созданного вами **хоста**.
**Переопределенные здесь значения будут применены ко всем хостам, которые получает пользователь в подписке.**
Например, с помощью переопределение `vlessRouteId` мы можем назначить определенное значение и таким образом «_роутить_» целую группу пользователей (тех, которые будут находиться в этом скваде). Само собой, вторая половина настроек такого роутинга находится в серверной конфигурации профиля.

View File

@@ -0,0 +1,67 @@
## Хосты
Кратко говоря, хосты это клиентская репрезентация вашей серверной конфигурации. Если на сервере для успешного подключения необходимо **инбаунд**, то на клиентской стороне пользователю необходим **хост**.
Группа хостов (или можно сказать _список_), представляет из себя подписку. Подписка это ссылка, после добавления такой ссылки в клиентское приложение перед пользователем появляется список хостов (серверов, если угодно). И далее пользователь уже вправе выбирать любой из них.
Важно заметить, что **хост** является в первую очередь лишь клиентской интерпретация вашей серверной части. Например, если пользователь получил подписку (список хостов у него уже на руках), а вы отключите этот хост пользователь по прежнему **сможет** подключиться к серверу, на который направлен этот хост. Но при обновлении подписки этого хоста у него уже не будет.
Так как хост привязывается напрямую к инбаунду (который находится в профиле) хост наследует большинство настроек из него, однако в некоторых случаях бывает полезно переопределить или дополнить эти настройки для этого существует раздел **расширенных** настроек.
---
При создании нового хоста или редактировании существующего, перед вами доступно два раздела: **Основные** и **Расширенные** (настройки).
### Основные
#### Примечание
В этом пункте вы определяете как данный хост будет отображаться в клиентском приложение. Обычно здесь пишут название страны, к которой будет подключаться пользователь.
_Совет: чтобы в клиентском приложении отображался флаг страны добавьте эмоджи в самое начало примечания._
#### Выбор инбаунда (и профиля)
Как уже упоминалось выше хост это лишь клиентская репрезентация вашей серверной конфигурации, поэтому и обязательным требованием к созданию хоста является выбор инбаунда. В зависимости от количества инбаундов, нод и профилей выберите соотвествующий инбаунд в меню выбора.
#### Адрес и порт
Адресом является домен или IP-адрес, в большинстве случаев здесь необходимо прописать адрес или домен сервера, к которому будет подключаться пользователь. Порт обычно соответствует порту **инбаунда**, _в некоторых случаях может отличаться._
_В адрес можно так же вписать несколько доменных имен например: `node-1.com,node-2.com,node-3.com`. Может возникнуть мысль, что с помощью этого в теории можно производить некоторую балансировку, но важно заметить пользователь при запросе подписки получит лишь один из этих адресов (что конкретно он получит определяется случайно и не привязано к какому-либо логике балансировке). Следовательно до тех пор, пока пользователь не обновит подписку в клиентском приложении (или если не сработает автообновление) адрес у пользователя не изменится._
#### Тег и ноды
Эти параметры не видны конечному пользователю, они больше нужны администратору панели (вам), чтобы в будущем было проще ориентироваться в созданных хостах, если их будет много.
В частности, выбор ноды в этом пункте не играет функциональной роли **это только визуальная привязка для более простого ориентирования в будущем.**
---
### Расширенные
**В большинстве случаев вам не нужно редактировать ничего из этого раздела, если вы явно не понимаете для каких целей это делаете. Некорректное изменение некоторых параметров может привести к тому, что ваше подключение будет не работать. Отнеситесь к редактированию каждого пункта со всей серьезности и всегда проверяйте дважды сверяйте настройки перед применением изменений.**
В этом разделе мы не будем делать проходить по каждому пункту сконцентрируемся на основных пунктах.
#### SNI (ServerNames)
В некоторых случаях бывает необходимо переопределить настройки объекта `serverNames` (которые определяются внутри инбаунда в профиле) для конкретного хоста.
Имейте в виду, `serverNames` простым языком является _паролем_, по которому, например, **Reality** определяет **валидность** соединения. Если вы в этом пункте укажете **SNI**, например `example.com` и при этом внутри инбаунда `serverNames` выглядят вот так:
```json
"serverNames": [
"example1.com",
"example2.com"
]
```
Такое соединение работать не будет, так как `example.com` не находится в списке разрешенных `SNI`.
#### Переопределить SNI из адреса
По умолчанию, Remnawave берет первый объект из массива `serverNames` (инбаунда) чтобы добавить SNI в клиентский хост. Если вы включите этот параметр Remnawave возьмет адрес (который вы указали в разделе **Основные**) и передаст его клиенту.
Из прочих пунктом в этом разделе так же можно выделить пункт `vlessRouteId`, который является небольшим слоем абстракции над Xray Core и предоставляем вам простой способ воспользоваться функционалом `vlessRoute`, который предоставляет Xray. <a href="https://xtls.github.io/ru/config/routing.html#ruleobject">Ознакомиться подробнее с правилами роутинга.</a>
---

View File

@@ -0,0 +1,21 @@
## Внутренние сквады
Основная цель внутренних сквадов это **разграничение** доступа пользователей.
Внутренние сквады напрямую связаны с **профилями** и их **инбаундами**. Им можно назначить сколько угодно активных инбаундов (которые находятся внутри профилей). А так как профили и их инбаунды напрямую связаны с нодами с помощью внутреннего сквада мы можем тонко контролировать какие пользователи или группы пользователей могут иметь доступ к нодам.
---
В карточке каждого сквада (в общем списке) вы можете заметить количество активных инбаундов, а так же количество участников этого сквада (пользователей, которые состоят в нем).
При нажатии на кнопку дополнительных действий (в карточке сквада) вы можете так же быстро добавить или удалить всех пользователей. Если вам требуется назначить сквад каким-то _определенным_ пользователям вы можете это сделать в разделе **«Пользователи»**.
Менеджмент пользователей и нод, которые могут быть им доступны иногда бывает очень запутанным воспользуйтесь кнопкой **«Доступные ноды»**, чтобы быстро посмотреть какие ноды доступны этому скваду. Напомню, что при создании или изменнии **ноды** мы так же в ней выбираем какой **профиль** будет использоваться и какие **инбаунды** из него будут активны на ноде. И так как внутри сквада мы тоже выбираем **инбаунды**, поэтому мы можем с помощью связей определить конкретные ноды, к которым у этого сквада (следовательно и его участников) будет доступ.
---
Для примера, у нас есть две группы пользователей: **бесплатные** и **платные**. И мы хотим, что бы **бесплатные** пользователи имели доступ к _группе серверов #1_, а платные имели доступ и к _группе серверов #1_, а так же дополнительно к _группе серверов #2_.
Для этой цели мы создадим два сквада: **Free** и **Premium**, внутри каждого из них выбираем соответствующие инбаунды.
И допустим, что мы уже создаем пользователя в таком случае если перед нами бесплатный пользователь мы просто активируем для него внутренний сквад **Free**. А когда перед нами будет платный пользователь активируем оба сквада **Free** и **Premium** (если нужно, чтобы у пользователя был доступ ко всем нодам/инбаундам). Но мы так же можем для платного пользователя активировать только один сквад **Premium**, в таком случае доступа к нодам/инбаундам из группы **Free** у пользователя не будет.

View File

@@ -0,0 +1,115 @@
# Generic OAuth2 身份验证
Generic OAuth2 允许您将任何兼容 OAuth2 的身份提供商连接到 Remnawave。当您想使用没有专门集成的提供商时如 Authentik、Authelia、Zitadel、Google、Microsoft 等),这非常有用。
## 前提条件
1. 兼容 OAuth2 的身份提供商
2. 创建 OAuth2 客户端/应用程序的管理员权限
3. 提供商必须支持令牌中的 `email` 声明
## 配置步骤
### 1. 在您的提供商中创建 OAuth2 应用程序
具体步骤因提供商而异,但通常您需要:
1. 登录到您的身份提供商管理控制台
2. 创建新的 OAuth2/OIDC 应用程序
3. 配置:
- **应用程序类型**Web Application
- **授权类型**Authorization Code
- **重定向 URI**`https://your-panel-domain.com/oauth2/callback/generic`
4. 记下 **Client ID****Client Secret**
5. 找到提供商的 **Authorization URL****Token URL**(通常在文档或 well-known 端点中)
### 2. 查找提供商 URL
大多数提供商都记录了这些端点。常见模式:
| 提供商 | Authorization URL | Token URL |
| --------- | ------------------------------------------------------------------ | -------------------------------------------------------------- |
| Google | `https://accounts.google.com/o/oauth2/v2/auth` | `https://oauth2.googleapis.com/token` |
| Microsoft | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize` | `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token` |
| Authentik | `https://your-authentik.com/application/o/authorize/` | `https://your-authentik.com/application/o/token/` |
| Authelia | `https://your-authelia.com/api/oidc/authorization` | `https://your-authelia.com/api/oidc/token` |
| Zitadel | `https://your-zitadel.com/oauth/v2/authorize` | `https://your-zitadel.com/oauth/v2/token` |
### 3. PKCE 支持
**PKCEProof Key for Code Exchange** 为 OAuth2 流程添加了额外的安全层。在以下情况下启用此选项:
- 您的提供商支持 PKCE大多数现代提供商都支持
- 您希望增强对授权码拦截攻击的保护
- 您的提供商要求公共客户端使用 PKCE
> **建议**:如果您的提供商支持 PKCE请启用它。
## Remnawave 配置
| 字段 | 描述 |
| --------------------- | -------------------------------------------------------------------- |
| **Client ID** | 来自您的 OAuth2 提供商的客户端/应用程序 ID |
| **Client Secret** | 来自您的 OAuth2 提供商的客户端密钥 |
| **Authorization URL** | OAuth2 授权端点 URL例如 `https://provider.com/oauth2/authorize` |
| **Token URL** | OAuth2 令牌端点 URL例如 `https://provider.com/oauth2/token` |
| **Frontend Domain** | 您的 Remnawave 面板域名,不带 `https://`(例如 `panel.example.com` |
| **With PKCE** | 启用 PKCEProof Key for Code Exchange以增强安全性 |
| **Allowed Emails** | 允许登录的电子邮件地址列表 |
## 访问控制
您可以使用**以下两种方法之一**(或两者同时使用)来控制访问:
### 选项 A使用 Allowed Emails
在 Remnawave 设置中指定允许的电子邮件地址列表。只有电子邮件在此列表中的用户才能登录。
### 选项 B使用自定义声明
如果 **Allowed Emails** 列表为空Remnawave 将检查令牌中的自定义声明:
| 键 | 值 |
| ----------------- | ------ |
| `remnawaveAccess` | `true` |
如果用户的令牌包含 `remnawaveAccess: true`,他们将被授权。
> **注意**:您需要配置您的身份提供商以在令牌中包含此自定义声明。具体步骤因提供商而异——通常通过"映射器"、"声明"或"令牌自定义"设置完成。
## 故障排除
### "Invalid redirect URI"
验证您的提供商中的重定向 URI 完全匹配:`https://your-panel-domain.com/oauth2/callback/generic`
### "Invalid or missing email claim"
确保:
- 用户在您的提供商中设置了电子邮件地址
- 已请求并授予 `email` 作用域
- 您的提供商在令牌中包含 `email` 声明
### "State mismatch"
清除浏览器 Cookie 并重试。如果身份验证流程被中断,可能会发生这种情况。
### "Token exchange failed"
验证:
- **Token URL** 正确
- **Client ID** 和 **Client Secret** 正确
- 您的提供商的令牌端点可从 Remnawave 服务器访问
### "Access denied"
用户的电子邮件不在 **Allowed Emails** 列表中。添加他们的电子邮件地址以授予访问权限。
### PKCE 相关错误
如果您收到与 `code_verifier``code_challenge` 相关的错误:
- 如果您的提供商不支持 PKCE请尝试禁用 **With PKCE**
- 或者如果您的提供商要求使用 PKCE请启用它

View File

@@ -0,0 +1,21 @@
## OAuth2GitHub
### 创建 OAuth 应用
首先,你需要创建一个 OAuth 应用。
请通过以下链接创建应用:
[https://github.com/settings/applications/new](https://github.com/settings/applications/new)
`Authorization callback URL` 字段中,填写你的面板地址。
```bash
# 将 YOUR_PANEL_DOMAIN 替换为你的面板地址
https://YOUR_PANEL_DOMAIN/oauth2/callback/github
```
请务必将 `YOUR_PANEL_DOMAIN` 替换为正确的面板域名。
### Remnawave 中的 OAuth2 设置
创建 OAuth2 应用后,复制生成的 `Client ID``Client Secret`,并将它们填写到对应的配置项中。
然后,在下方填写允许登录的邮箱地址列表。

View File

@@ -0,0 +1,80 @@
# Keycloak 身份验证
Keycloak 是一个开源的身份和访问管理解决方案,提供单点登录 (SSO) 功能。
## 先决条件
1. 运行中的 Keycloak 服务器
2. 创建客户端的管理员权限
## 配置步骤
### 1. 在 Keycloak 中创建客户端
1. 登录 Keycloak 管理控制台
2. 选择您的 realm或创建新的
3. 进入 **Clients****Create client**
4. 配置:
- **Client ID**: `remnawave`(或您喜欢的名称)
- **Client Protocol**: `openid-connect`
- **Client authentication**: `ON`
5. 设置 **Valid redirect URIs**: `https://your-panel-domain.com/oauth2/callback/keycloak`
6. 设置 **Web Origins**: `https://your-panel-domain.com`
7. 保存客户端
### 2. 获取客户端凭据
1. 进入 **Clients** → 您的客户端 → **Credentials** 选项卡
2. 复制 **Client secret**
### 3. 配置访问控制
您可以使用**以下两种方法之一**(或同时使用)控制访问:
#### 选项 A使用 Claim推荐
在令牌中添加自定义 claim `remnawaveAccess: true`
1. 进入 **Clients** → 您的客户端 → **Client scopes** 选项卡
2. 点击 `<your-client-id>-dedicated`
3. 进入 **Mappers** 选项卡 → **Add mapper****By configuration**
4. 选择 **Hardcoded claim**
5. 配置:
- **Name**: `remnawaveAccess`
- **Token Claim Name**: `remnawaveAccess`
- **Claim value**: `true`
- **Claim JSON Type**: `boolean`
- **Add to ID token**: `ON`
- **Add to access token**: `ON`
6. 保存
#### 选项 B使用允许的邮箱列表
您可以在 Remnawave 设置中指定允许的邮箱地址列表,而不是配置 claim。只有邮箱在此列表中的用户才能登录。
## Remnawave 配置
| 字段 | 描述 |
|------|------|
| **Keycloak Domain** | Keycloak 服务器域名,不含 `https://`(例如 `keycloak.example.com`|
| **Frontend Domain** | Remnawave 面板域名,不含 `https://`(例如 `panel.example.com`|
| **Realm** | Keycloak realm 名称(例如 `master`|
| **Client ID** | 您创建的客户端 ID |
| **Client Secret** | Credentials 选项卡中的客户端密钥 |
| **Allowed Emails** | 允许登录的邮箱地址列表(使用 claim 时可选)|
## 故障排除
### "Email is not in the allowed list and remnawaveAccess claim is not present"
请确保满足以下条件之一:
- 用户通过 mapper 配置了 `remnawaveAccess: true` claim
- 用户的邮箱已添加到 Remnawave 设置的 Allowed Emails 列表中
### "Invalid redirect URI"
验证 Keycloak 中的重定向 URI 完全匹配:`https://your-panel-domain.com/oauth2/callback/keycloak`
### "State mismatch"
清除浏览器 cookies 并重试。如果身份验证流程被中断,可能会发生这种情况。
### "Invalid or missing email claim"
确保用户在 Keycloak 中设置了邮箱地址,并启用了 email scope。

View File

@@ -0,0 +1,22 @@
## 认证方式: 密码
### 修改或重置密码
使用 `Rescue CLI` 来重置或修改密码。
```bash
docker exec -it remnawave remnawave
```
进入 `Rescue CLI` 后,选择 `Reset superadmin` 选项。
### 启用紧急密码认证
如果你已禁用“Password”认证方式但之后又无法通过其他认证方式登录
可以使用 `Rescue CLI` 重新启用“Password”认证方式。
```bash
docker exec -it remnawave remnawave
```
进入 `Rescue CLI` 后,选择 `Enable password authentication` 选项。

View File

@@ -0,0 +1,40 @@
## OAuth2PocketID
### 创建 OIDC 客户端
登录 PocketID 管理面板,并前往:
`Settings``OIDC Clients``Add OIDC Client`
```
# 将 YOUR_PANEL_DOMAIN 替换为你的 Remnawave 面板地址
https://YOUR_PANEL_DOMAIN/oauth2/callback/pocketid
```
### Remnawave 中的 OAuth2 设置
创建 OAuth2 应用后,复制生成的 `Client ID``Client Secret`
并将其填写到对应的配置项中。
然后,在下方填写允许登录的邮箱地址列表。
`Plain Domain` 字段中,填写你的 PocketID 所在的域名。
只需要填写域名本身,不要包含路径和 `https://`,例如:
`pocketid.your-domain.com`
### 自定义声明Custom Claimsv2.4.0+
Remnawave 也支持通过自定义声明进行授权。
使用此方式时,无需再配置允许的邮箱地址列表。
Key
```
remnawaveAccess
```
Value
```
true
```
只要用户的令牌中包含该键值对(`remnawaveAccess: true`),即可通过授权。

View File

@@ -0,0 +1,43 @@
## Telegram OAuth2
> 本指南适用于 **2.7.0** 及以上版本。
要配置"通过 Telegram 登录"功能,您需要一个 Telegram 机器人。此外,还需要对机器人进行额外配置,功能才能正常工作。
### 机器人配置
1. 打开 @BotFatherhttps://t.me/botfather
2. 点击"Open"按钮打开 MiniApp
3. 选择您的机器人,然后点击 `Bot Settings`
4. 如果 `Web Login` 部分已经指定了域名 — 请先删除它。
5. 点击 Switch to OpenID Connect Login 按钮。
`如果没有看到此按钮,请在删除域名后返回上一级菜单,然后从步骤 3 重新操作`
6. 点击 Add an Allowed URL。
填写以下值:
- Trusted Origins: https://panel.domain.com
- Redirect URIs: https://panel.domain.com/oauth2/callback/telegram
### 访问权限配置
在填写完 `Client ID``Client Secret``Frontend Domain` 后,您需要指定允许登录的管理员 ID 列表。
1. 使用对应账号打开机器人 https://t.me/Get_myidrobot
2. 机器人会返回您的用户 ID将该 ID 填入对应的字段中。
---
### 已知错误解决方案
###### 安装在面板之上的各种保护措施(如 cookie 等)可能无法与 `Telegram OAuth2` 正常配合工作。
请在反向代理中使用 /oauth2/ 路径来解决此问题
###### 错误BOT_DOMAIN_INVALID
此错误是由于机器人域名配置不正确导致的 — 请查看上方"机器人配置"部分。如有必要,请逐步重新执行配置。
###### 错误:登录时未收到 Telegram 验证码
很遗憾,此问题无法从 Remnawave 端解决。请尝试使用较早创建的机器人,或使用其他浏览器。
此外,您也可以尝试先登录"官方"资源 — 例如 https://fragment.com。由于浏览器中的 Telegram 会话是共享的 — 之后您可以尝试登录面板。

View File

@@ -0,0 +1,20 @@
## OAuth2Yandex
不推荐使用 Yandex 的身份验证方式。
### 创建 OAuth 应用
你需要在 Yandex 中创建一个 OAuth 应用。
点击此链接创建应用: [https://oauth.yandex.com/client/new](https://oauth.yandex.com/client/new)
在创建应用的第二步中,选择 “Web application”网页应用选项并填写 `Callback URL`
```
# 将 YOUR_PANEL_DOMAIN 替换为你的 Remnawave 面板地址
https://YOUR_PANEL_DOMAIN/oauth2/callback/yandex
```
别忘了将 `YOUR_PANEL_DOMAIN` 替换为正确的面板域名。
在创建的第三步中 —— 请确保勾选 “Access to email address”访问邮箱地址不需要其他权限。

View File

@@ -0,0 +1,32 @@
## Xray JSON 订阅格式
Xray 的 JSON 格式为兼容客户端提供了原生的基于 JSON 的订阅支持。
只需在订阅链接后添加 `/json` 即可启用此格式。
### 支持的客户端
- **v2rayNG** — 版本 1.8.29 或更高
- **V2rayN** — 版本 6.40 或更高
- **Streisand** — 所有版本
- **Happ** — 所有版本
- **V2Box** — 所有版本
- **ktor-client** — 所有版本
### 使用说明
**步骤 1:** 修改订阅链接
在你的订阅链接末尾添加 `/json` :
`https://<server>/api/sub/xxxx/json`
**步骤 2:** 检查兼容性
确保你的客户端版本满足上方列出的最低要求。
**可选方式:** 在基础路径启用 JSON
在订阅设置中启用 "在基础订阅路径提供 JSON" 选项。 启用后,系统会直接在基础路径提供 JSON 订阅 (无需额外添加 /json).
### 回退机制
对于不支持 JSON 格式的客户端(例如使用 Base64 或 Mihomo 协议的客户端),系统会自动回退到与客户端兼容的标准订阅格式。

View File

@@ -0,0 +1,111 @@
## 配置文件Config Profiles
在 Remnawave 的配套设置中配置文件Config Profile 代表一份完整的服务器配置, 用于 [Xray](https://xtls.github.io/en/config/) 内核.
在此配置中,你可以定义用户将来要连接的 _入站inbounds_
**此处不会详细介绍 Xray 配置的具体结构和语法,因为这是一个需要独立学习的主题。 - 如需了解核心的完整功能,请参阅官方 [Xray文档](https://xtls.github.io/en/config/) 。**
当你创建一个新的配置文件时,系统会默认生成一个类型为**Shadowsocks**的 _入站inbounds_。 创建完成后,你可以修改该入站,或添加新的 _入站inbounds_
_如果你想添加一个新的入站例如使用 **VLESS** 协议),只需在 `inbounds:[]` 数组中添加一个新的对象即可。_
目前Remnawave 支持以下协议: `VLESS`, `Trojan`, `Shadowsocks` (`chacha20-ietf-poly1305`, `2022-blake3-aes-256-gcm`, `aes-128-gcm`, `aes-256-gcm`), `Hysteria2`(仅用于客户端 Xray-Json 生成)。 并支持以下传输方式: `RAW (TCP)`, `XHTTP`, `Websocket`, `HTTPUpgrade`, `gRPC`, `KCP`.
需要注意的是Remnawave 也支持以下协议: `Tunnel`, `mixed(socks)`, `wireguard`, `http` - 但面板不会对它们进行任何处理,这些协议的用户管理功能将不可用。 此类 _入站inbounds_ 将按原样传递给 Xray不会被修改。
对于主要协议 (`VLESS`, `Trojan`, `Shadowsocks`), Remnawave 会自动管理服务器配置中的用户列表,无需额外手动操作。
---
### 配置文件列表Config Profiles List
在配置文件列表中,每个配置文件都会显示简要概览。 在配置文件名称下方,你可以看到其中活动的 _入站inbounds_ 数量, 以及当前使用该配置文件的 **节点nodes** 数量。 这两个图标均可点击,点击后会打开对应的详细页面。
点击 _入站inbounds_ - 会显示该配置文件中的 _入站_ 列表,并显示每个 _入站_ 在多少个内部分组中被激活。
点击 _节点nodes_ - 会显示当前使用此配置文件的所有 _节点_ 列表。
在“更多操作”菜单向下箭头你还可以快速查看配置文件、查看带有代码片段snippets的配置文件以及其他服务相关选项。
---
### 配置文件编辑器Config Profile Editor
配置文件编辑器提供了一个功能完整的 JSON 编辑器,支持语法高亮和结构检查。当鼠标悬停在某些对象上时,还会显示来自 Xray 文档的提示信息。
每当进行更改时,系统会立即运行轻量级的核心实例来验证整个配置。这种实时验证可以有效防止低级错误或拼写问题。
在底部的附加菜单(带三条横线的按钮)中,你可以找到更多选项。像“全选”、“复制全部”等基础功能就不赘述了。
"**从 Github 加载**" 选项会打开一个菜单,允许你下载其他用户分享的配置示例。 **这些示例仅供参考,并非可直接使用的配置。**
"**生成密钥**" 功能可以直接在浏览器中生成所需的密钥对 - 例如,在使用 `Reality` 时, 你需要生成一个 `privateKey`,可以在此处完成。 此外,还支持生成适用于 `Vless Encryption``ML-DSA65``ML-KEM768`.
---
### 代码片段Snippets
当你拥有多个配置文件时,若需要修改一些在所有配置中都存在但略有不同的细节,手动逐一修改将非常麻烦。
例如,你有 10 个配置文件,它们的路由规则基本一致,只是细节不同。
此时可以使用 Snippets 功能——你只需在一个地方修改“规则rule”或“规则集rules
系统就会自动将这些更改同步到所有配置文件中。
目前,你可以为以下对象预定义数组元素: `outbounds``rules`。 创建片段后,它将可以在这些对象中被引用,
例如:
```
{
"outbounds": [
{
"snippet": "snippet-name"
}
]
}
```
关于片段的更多信息,可以点击片段菜单中的问号图标查看说明。
### 流控Flow Control / VLESS
_该功能仅在 2.3.0 及以上版本中可用。_
默认情况下Remnawave 会自动为以下配置添加 `flow` 参数:
VLESS + TLS、REALITY + RAW 或 TCP。
如果你希望手动覆盖这一默认行为,可以在 `settings` 对象中显式指定 `flow` 字段。
```json
"settings": {
"flow": "",
"clients": [],
"decryption": "none"
},
```
可用的 `flow` 值如下:
- `xtls-rprx-vision`
- `""`
### Kcp with FinalMask
_This feature is available only in version 2.7.0 and above._
In some cases, you may need to specify a custom MTU (in the `kcpSettings` object) when using FinalMask. Unfortunately, Xray configuration does not clearly separate client and server MTU values.
```json
{
"mtu": 1350
}
```
Since Remnawave needs to generate the client-side configuration, we have added a custom field that does not exist in the original Xray configuration.
```json
{
"clientMtu": 70
}
```
The `clientMtu` parameter (if present) will be converted to `mtu` on the client side. This way, you can set a custom MTU for the client side.

View File

@@ -0,0 +1,44 @@
## 外部分组
通过使用外部分组,你可以在用户请求订阅时覆盖其使用的某些设置或模板。 _每个用户同一时间只能拥有一个活动的外部分组。_
例如,你可以为不同的用户群体设置不同的路由方案(如 Happ、v2rayTUN而不同的路由方案也可以定义在模板中。
通过右侧的附加菜单,你可以快速为所有用户分配一个外部分组 (或反向操作,将所有用户从该外部分组中移除)。
如果用户没有被分配任何外部分组 - 则会使用 "**订阅Subscription**" 页面中的全局设置, 以及默认的 "**Default**" 客户端配置模板。
---
接下来,我们来逐步了解外部分组卡片中可用的设置。
### 模板覆盖Template Override
当用户请求订阅时,系统会根据请求来源的客户端类型为其提供相应的模板。 例如,如果客户端基于 Mihomo 内核运行Remnawave 会自动识别,并提供 **Mihomo** 类型 的 **Default** 模板(可在模板管理页面进行设置)。
在 Remnawave 中你可以为每种类型Mihomo、Stash、Xray Json、Singbox、Clash创建任意数量的模板但默认情况下系统总是会提供 **Default** 模板。
**而外部分组中的此项设置,正是用于覆盖这一默认行为。**
举例来说,假设我们希望某个外部分组使用 _自定义模板Custom Template_ ,该模板属于 **Mihomo** 类型, 那么只需在对应选项中选择该模板并保存更改。 此后,当属于该外部分组的用户发起订阅请求时,他们将收到 _Custom Template_ 模板, 而不是 _Default_.
如果你将模板覆盖字段留空,则该分组中的用户仍会接收 _Default_ 模板。
_请注意在 “请求订阅的应用Response Rules” 中的模板覆盖优先级高于本处设置。_
### 设置(订阅)
在此部分你可以覆盖“订阅Subscription→ 设置Settings”中定义的全局配置。
通过这种方式,你可以一次性为整个用户组覆盖多个参数。
请记住,如果某个参数被显式覆盖(包括空值),该值就会被应用。 只有删除覆盖(点击垃圾桶图标)才能取消覆盖。
例如,假设在全局设置中,我的订阅标题是 “Remnawave” 但我想为 10 个特定用户将其改为 “Remnawave v.2.x” 这时我只需在此部分中修改该参数,然后将此外部分组分配给这 10 位用户即可。
### 主机Hosts
延续上面的逻辑,在此部分中,你可以完全覆盖你在每个 **主机Host** 卡片中看到的某些参数。
**此处设置的覆盖值将应用于用户在订阅中收到的所有主机。**
例如,通过覆盖 `vlessRouteId` 参数,我们可以为特定用户组(即该外部分组中的用户)分配特定值,从而实现整组用户的 "_路由route_" 划分。 当然这种路由设置的另一半逻辑在服务器端的配置文件Config Profile中定义。

View File

@@ -0,0 +1,70 @@
## 主机Hosts
简单来说主机Host 是服务器配置在客户端侧的表现形式。 如果服务器端需要一个 **入站Inbound** 才能建立连接,那么客户端侧的用户就需要一个 **主机Host**
一组主机(或称为 _列表_)代表一个订阅。 订阅是一个链接,当用户将此链接添加到客户端后,就会看到一个主机列表(也可以理解为“服务器列表”)。用户随后可以从中选择任意一个主机进行连接。
需要特别注意的是, **主机Host** 仅仅是你服务器配置的客户端解释形式。 例如,如果用户已经获取了订阅(也就是说,主机列表已经在他们手中),即使你在面板上禁用了该主机,用户 **仍然可以** 连接到该主机所指向的服务器。 但当用户更新订阅时,该主机将会从列表中消失。
由于主机直接绑定到一个入站(该入站位于配置文件中) - 主机会继承大部分来自入站的设置。 不过在某些情况下,可能需要覆盖或补充这些设置,这正是 **高级设置Advanced** 部分的用途。
---
当你创建一个新主机或编辑现有主机时,将会看到两个设置区域: **基础Basic** and **高级Advanced** 设置。
### 基础设置Basic
#### 备注Remark
此字段定义该主机在客户端中的显示名称。通常,这里会填写用户将要连接的国家或地区名称。
_提示若希望客户端中显示国旗图标可在备注开头添加国旗 emoji。_
#### 入站与配置文件选择Inbound Selection & Profile
如前所述,主机只是你服务器配置的客户端表示形式,因此创建主机时必须选择一个入站。根据你已有的入站、节点和配置文件数量,从菜单中选择合适的入站。
#### 地址与端口Address and Port
地址可以是域名或 IP 地址。 在大多数情况下,应填写用户将要连接的服务器域名或地址。端口通常与对应 **入站** 的端口相同,但在 _某些情况下也可能不同_
_你还可以在地址栏中输入多个域名例如: `node-1.com,node-2.com,node-3.com`. 虽然这看起来可以用于负载均衡,但实际上用户在请求订阅时只会随机获取其中一个地址,且并非真正的负载均衡。
在用户刷新订阅或触发自动更新之前他们的连接地址不会改变。_
#### 标签与节点Tag and Nodes
这些参数对最终用户不可见,主要是为了方便你(面板管理员)在管理大量主机时更容易区分。
特别是“节点”字段的选择不影响功能 - **仅用于视觉标识和导航方便**
---
### 高级设置Advanced
**在大多数情况下,除非你明确知道自己在做什么,否则不建议修改此部分内容。
某些参数错误地修改后可能导致连接无法正常工作。
请谨慎操作,并在应用更改前反复确认设置。**
以下只介绍几个主要项目:
#### SNI (ServerNames)
在某些场景下,你可能需要为特定主机覆盖入站(配置文件中的) `serverNames` 对象。
请记住, `serverNames` 本质上可以理解为 **Reality** 协议中的“_连接验证密码_”, 例如,如果你在此字段中手动指定了 `example.com`, 而入站中的 `serverNames` 定义如下:
```json
"serverNames": [
"example1.com",
"example2.com"
]
```
此连接将无法工作,因为 `example.com` 不在允许的 `SNI`中。
#### 从地址覆盖 SNIOverride SNI from Address
默认情况下Remnawave 会取入站中 `serverNames` 数组的第一个值,作为客户端的 SNI。 若启用此选项,系统将使用你在“**基础设置**”中指定的地址作为 SNI 传递给客户端。
除此之外,本节中还值得注意的是 `vlessRouteId` 字段。 该字段是对 Xray Core 的一个小型抽象层,允许你更方便地使用 Xray 的 `vlessRoute` 功能。 <a href="https://xtls.github.io/en/config/routing.html#ruleobject">了解更多关于路由规则.</a>
---

View File

@@ -0,0 +1,21 @@
## 内部分组
内部分组的主要目的在于为用户提供**访问控制** 。
内部分组与**配置文件Profiles** 及其**入站Inbounds** 直接关联。 你可以为一个内部分组分配任意数量的活动入站(这些入站存在于配置文件中)。 由于配置文件及其入站又与节点直接相关 因此通过使用内部分组, 我们可以精细地控制哪些用户或用户组可以访问哪些节点。
---
在每个分组卡片(列表视图中)上,你可以看到该分组的活动入站数量,以及分组内的成员数量(即属于该分组的用户)。
点击分组卡片中的“更多操作”按钮,你可以快速添加或移除所有用户。 如果你只想将某个分组分配给 _特定_ 用户 可以前往 **"用户Users"** 页面进行操作。
在管理用户与节点的访问权限时,有时会比较混乱——这时可以使用 **"可用节点Available Nodes"** 按钮,快速查看该分组可访问的节点。 请记住,在创建或修改一个 **节点**, 我们需要选择对应的 **配置文件** 并指定该配置文件中哪些 **入站** 会在该节点上启用。 而由于我们在内部分组中也会选择 **入站** , 因此可以通过这种关联关系,确定该分组 (以及其成员) 可以访问的具体节点。
---
例如,我们有两个用户组: **免费组Free****付费组Paid**. 我们希望 **免费** 用户只能访问 _服务器组 #1_, 而付费用户则可以访问 _服务器组 #1__服务器组 #2_.
为此,我们可以创建两个分组: **Free****Premium**, 并在各自的分组中选择对应的入站。
当我们创建一个用户时,如果这是一个免费用户,只需为其启用 **Free** 内部分组。 而如果是付费用户,则可以同时启用**Free**和**Premium** (如果该用户需要访问所有节点/入站)。 当然,我们也可以只为付费用户启用一个分组 **Premium**, 这样该用户将无法访问来自 **Free** 分组的节点或入站。

View File

@@ -0,0 +1,144 @@
---
title: API Changelog 2.3.2 vs. 2.4.0
authors: remnawave
tags: [api-changelog]
date: 2025-12-19
hide_table_of_contents: true
---
# API Changelog v2.3.2 vs. v2.4.0
### New Endpoints: 14
- `GET /api/bandwidth-stats/nodes`
- `GET /api/bandwidth-stats/nodes/realtime`
- `GET /api/bandwidth-stats/nodes/{uuid}/users`
- `GET /api/bandwidth-stats/nodes/{uuid}/users/legacy`
- `GET /api/bandwidth-stats/users/{uuid}`
- `GET /api/bandwidth-stats/users/{uuid}/legacy`
- `GET /api/subscription-page-configs`
- `PATCH /api/subscription-page-configs`
- `POST /api/subscription-page-configs`
- `POST /api/subscription-page-configs/actions/clone`
- `POST /api/subscription-page-configs/actions/reorder`
- `DELETE /api/subscription-page-configs/{uuid}`
- `GET /api/subscription-page-configs/{uuid}`
- `GET /api/subscriptions/subpage-config/{shortUuid}`
### Deleted Endpoints: 4
- `GET /api/nodes/usage/range`
- `GET /api/nodes/usage/realtime`
→ replaced with `GET /api/bandwidth-stats/nodes/realtime`
- `GET /api/nodes/usage/{uuid}/users/range`
→ replaced with `GET /api/bandwidth-stats/nodes/{uuid}/users/legacy`
- `GET /api/users/stats/usage/{uuid}/range`
→ replaced with `GET /api/bandwidth-stats/users/{uuid}/legacy`
### Modified Endpoints: 7
---
GET /api/external-squads
- Responses changed
- Modified response: 200
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: response
- Properties changed
- Modified property: externalSquads
- Items changed
- Required changed
- New required property: subpageConfigUuid
- Properties changed
- New property: subpageConfigUuid
PATCH /api/external-squads
- Request body changed
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- New property: subpageConfigUuid
- Responses changed
- Modified response: 200
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: response
- Required changed
- New required property: subpageConfigUuid
- Properties changed
- New property: subpageConfigUuid
POST /api/external-squads
- Responses changed
- Modified response: 201
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: response
- Required changed
- New required property: subpageConfigUuid
- Properties changed
- New property: subpageConfigUuid
POST /api/external-squads/actions/reorder
- Responses changed
- Modified response: 200
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: response
- Properties changed
- Modified property: externalSquads
- Items changed
- Required changed
- New required property: subpageConfigUuid
- Properties changed
- New property: subpageConfigUuid
GET /api/external-squads/\{uuid\}
- Responses changed
- Modified response: 200
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: response
- Required changed
- New required property: subpageConfigUuid
- Properties changed
- New property: subpageConfigUuid
PATCH /api/nodes
- Request body changed
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: consumptionMultiplier
- Min changed from 0.1 to 0
- Max changed from null to 100
POST /api/nodes
- Request body changed
- Content changed
- Modified media type: application/json
- Schema changed
- Properties changed
- Modified property: consumptionMultiplier
- Min changed from 0.1 to 0
- Max changed from null to 100

View File

@@ -0,0 +1,65 @@
---
title: API Changelog 2.4.4 vs. 2.5.0
authors: remnawave
tags: [api-changelog]
date: 2026-01-07
hide_table_of_contents: true
---
# API Changelog 2.4.4 vs. 2.5.0
#### GET /api/system/metadata
- new endpoint added
#### GET /api/external-squads
- :warning: removed the required property 'response/externalSquads/items/customRemarks/emptyInternalSquads' from the response with the '200' status
- added the required property 'response/externalSquads/items/customRemarks/HWIDMaxDevicesExceeded' to the response with the '200' status
- added the required property 'response/externalSquads/items/customRemarks/HWIDNotSupported' to the response with the '200' status
#### PATCH /api/external-squads
- :warning: added the new required request property 'customRemarks/HWIDMaxDevicesExceeded'
- :warning: added the new required request property 'customRemarks/HWIDNotSupported'
- :warning: removed the required property 'response/customRemarks/emptyInternalSquads' from the response with the '200' status
- :warning: removed the request property 'customRemarks/emptyInternalSquads'
- added the required property 'response/customRemarks/HWIDMaxDevicesExceeded' to the response with the '200' status
- added the required property 'response/customRemarks/HWIDNotSupported' to the response with the '200' status
#### POST /api/external-squads
- :warning: removed the required property 'response/customRemarks/emptyInternalSquads' from the response with the '201' status
- added the required property 'response/customRemarks/HWIDMaxDevicesExceeded' to the response with the '201' status
- added the required property 'response/customRemarks/HWIDNotSupported' to the response with the '201' status
#### POST /api/external-squads/actions/reorder
- :warning: removed the required property 'response/externalSquads/items/customRemarks/emptyInternalSquads' from the response with the '200' status
- added the required property 'response/externalSquads/items/customRemarks/HWIDMaxDevicesExceeded' to the response with the '200' status
- added the required property 'response/externalSquads/items/customRemarks/HWIDNotSupported' to the response with the '200' status
#### GET /api/external-squads/\{uuid\}
- :warning: removed the required property 'response/customRemarks/emptyInternalSquads' from the response with the '200' status
- added the required property 'response/customRemarks/HWIDMaxDevicesExceeded' to the response with the '200' status
- added the required property 'response/customRemarks/HWIDNotSupported' to the response with the '200' status
#### GET /api/subscription-settings
- :warning: removed the required property 'response/customRemarks/emptyInternalSquads' from the response with the '200' status
- added the required property 'response/customRemarks/HWIDMaxDevicesExceeded' to the response with the '200' status
- added the required property 'response/customRemarks/HWIDNotSupported' to the response with the '200' status
#### PATCH /api/subscription-settings
- :warning: added the new required request property 'customRemarks/HWIDMaxDevicesExceeded'
- :warning: added the new required request property 'customRemarks/HWIDNotSupported'
- :warning: removed the required property 'response/customRemarks/emptyInternalSquads' from the response with the '200' status
- :warning: removed the request property 'customRemarks/emptyInternalSquads'
- added the required property 'response/customRemarks/HWIDMaxDevicesExceeded' to the response with the '200' status
- added the required property 'response/customRemarks/HWIDNotSupported' to the response with the '200' status
#### POST /api/users/\{uuid\}/actions/revoke
- added the new optional request property 'revokeOnlyPasswords'

9
blog/authors.yml Normal file
View File

@@ -0,0 +1,9 @@
remnawave:
name: Remnawave
title: Maintainer
url: https://t.me/remnawave
image_url: https://docs.rw/img/logo.svg
page: false
socials:
telegram: https://t.me/remnawave
github: remnawave

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

View File

@@ -0,0 +1,103 @@
---
title: Summing up Config&Profiles
authors: remnawave
tags: [misc]
date: 2025-06-30
---
В этой статье мы проведем небольшой обзор новой системы Профилей Конфигураций (Config Profiles) и Внутренних Сквадов (Internal Squads), которая будет доступна с релизом 2.0 (планируется в середине июля/начале августа 2025-го года).
<!-- truncate -->
## Как это реализивано в 1.x?
Итак, в версии 1.x это работает довольно просто и банально.
У нас есть центральный конфиг ядра Xray Config (в соотвествующем разделе в админ-панели). Из этого конфига панель извлекает все **Inbound'ы** и их **тэги**. Тэг является уникальным и явно идентифицирует Inbound.
При подключении Remnawave Node вы выбираете `Inbound'ы`, которые будут находиться в конфиге ядра этой ноды.
С другой стороны, при карточке пользователя вы также выбираете активные `Inbound'ы`, доступные этому пользователя.
Такой базовый подход хоть и довольно просто реализован, но имеет ряд недостатков:
- **Конфигурация ядра глобально одна для всех нод.**
Если вам жизненно необходимо иметь полностью разные конфиги на каждой ноде это начинает быть серьезной проблемой.
- **При большом количестве `Inbound'ов` управление пользователями начинает приносить головную боль.**
Из-за того, что пользователь привязывается напрямую к определенным `Inbound'у`, при их частом изменении управление пользователями становится очень сложным.
- **При изменении общего конфига перезапускаются все ноды.** Если вы сделали ошибку в конфиге, то пользователи не смогут подключиться ни к одной ноде, пока вы не исправите ошибку.
<img src={require('./remnawave_1x_sum.png').default} width="100%" style={{borderRadius: '8px'}} alt="Remna Wave 1x Sum" />
Эту систему можно отобразить в виде упрощенной схемы выше.
И закрепим материал: глобально у нас есть один центральный конфиг ядра, в карточке ноды мы выбираем, какие `Inbound'ы` будут физически присутствовать в конфиге ядра этой ноды, а затем в карточке пользователя мы выбираем, какие `Inbound'ы` будут доступны для этого пользователя. По итогу Remnawave при старте ноды собирает готовый конфиг и отправляет его в ядро.
## Как это будет в 2.x?
Начиная с версии 2.0 мы вводим новые понятия в рамках панели:
- **Профили конфигурации** (Config Profiles) каждый **профиль конфигурации** это полноценный конфиг ядра. Вы можете создать сколько угодно профилей конфигурации но тэги Inbound'ов должны быть глобально уникальные. После сохранения профиля Remnawave извлечет все тэги `Inbound'ов` этого профиля и сохранит их в базу данных.
- **Внутренние сквады** (Internal Squads) пользовательские группы. В каждом из сквадов вы можете выбрать, какие `Inbound'ы` будут в нем доступны. Можно выбирать любые `Inbound'ы` со всех доступных **Профилей конфигурации**.
### Профили конфигурации (Config Profiles) {#config-profiles}
<img src={require('./config_profiles_preview_1.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
В новом разделе **Профили конфигурации** можно создать новые профили, скачать JSON-файл уже существующего профиля, удалить профиль.
Редактор в целом не претерпел изменений и выглядит так же, как и раньше.
<img src={require('./config_profiles_preview_2.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
Как уже упоминалось выше каждый **Профиль конфигурации** это полноценный конфиг ядра, который включает в себя не только массив с Inbounds, но и всю остальную конфигурацию ядра.
Плавно перейдем в раздел **Ноды** и посмотрим, как теперь будет выглядеть выбор `Inbound'ов` для ноды.
<img src={require('./config_profiles_preview_3.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
<img src={require('./config_profiles_preview_4.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
Итак, мы видим, что в новой системе мы можем выбрать **Профиль конфигурации**, который будет активен на конкретной ноде, и **какие `Inbound'ы` из выбранного Профиля будут активированы на этой ноде**.
Просуммируем:
- Вы можете создавать сколько угодно **Профилей конфигурации** но тэги `Inbound'ов` должны быть глобально уникальные.
- Вы можете выбрать **Профиль конфигурации** для ноды и указать, какие `Inbound'ы` из выбранного Профиля будут активированы на этой ноде.
### Внутренние сквады (Internal Squads) {#internal-squads}
Перейдем к **Внутренним сквадам** (Internal Squads). В общем списке доступна небольшая статистика по сквадам: количество пользователей, количество активных `Inbound'ов` по каждому скваду.
<img src={require('./internal_squads_preview_1.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
<img src={require('./internal_squads_preview_2.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
В карточке редактирования сквада вы можете указать активные для этого сквада `Inbound'ы`.
Как уже упоминалось выше вы можете выбирать любые `Inbound'ы` со всех доступных **Профилей конфигурации**.
Внутренние сквады, в свою очередь, связаны с пользователями.
<img src={require('./internal_squads_preview_3.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
В карточке пользователя доступен выбор сквадов: пользователю можно присвоить несколько сквадов одновременно.
Также в карточке пользователя есть шорткат к быстрому редактированию конкретного сквада.
<img src={require('./internal_squads_preview_4.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
При таком уровне абстракции администратор не может сразу понять, к каким нодам привязан конкретный пользователь. Рассмотрим возможный выход из ситуации.
В карточке пользователя доступна новая кнопка **View Accessible Nodes**.
<img src={require('./internal_squads_preview_5.png').default} width="100%" style={{borderRadius: '8px'}} alt="Config Profiles Preview 1" />
В данном разделе отображаются все ноды, доступные пользователю, а также поясняется, почему именно у него есть доступ к каждой из них - в частности, из‑за членства в соответствующих сквадах.
### Итоги
Ниже представлена схема новой системы.
<img src={require('./remnawave_2x_squads.png').default} width="100%" style={{borderRadius: '8px'}} alt="Remnawave 2x Squads" />
Новая система устраняет перечисленные недостатки старой: при изменении профиля конфигурации (конфига ядра) перезапускаются только ноды, использующие этот профиль.

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

View File

@@ -0,0 +1,86 @@
---
title: Release v1.3.1
authors: remnawave
tags: [release]
date: 2025-02-24
---
# Release v1.3.1
**🚧 Breaking Changes Alert 🚧**
This release contains breaking changes. Please review the following sections carefully before upgrading.
{/* truncate */}
## 🔄 Breaking Changes
### Metrics Port Configuration
- Prometheus metrics endpoint now runs on a separate port
- Added new `METRICS_PORT` environment variable
- Metrics endpoint path changed from `/api/metrics` to `/metrics`
- No longer served on the main application port. Please use new `METRICS_PORT` environment variable to access metrics.
### 🧬 API changes
1. All user endpoints now include `lastConnectedNode` information
2. Enhanced subscription information in responses
3. Traffic reset strategy changed
`CALENDAR_MONTH`, `YEAR` is **removed**.
`MONTH` now uses the same strategy as `CALENDAR_MONTH` before.
:::warning
**If you use API, please review your codebase to reflect these changes.**
:::
:::info
There is no need to manually change reset strategy for existing users, it will be changed automatically when you upgrade.
:::
4. Traffic reset strategy also use new logic.
`DAY` every day at 00:00 UTC
`WEEK` every week at Monday 00:00 UTC (night from Sunday to Monday)
`MONTH` every month at the first day of month at 00:00 UTC
## 🔧 How to Upgrade
1. Add the required new environment variables:
- `METRICS_PORT`
- `API_INSTANCES`
2. Update your monitoring configuration to use the new metrics port
3. Update your API clients. Change deprecated `CALENDAR_MONTH`, `YEAR` to `MONTH` or `WEEK` or `DAY`.
:::warning
It will be impossible to downgrade to previous version, because of migration of reset strategy.
:::
## ✨ New Features
### Multiple Instances Support
- Bulk user deletion is now available. Delete many users with selected status with ease.
- Added support for running multiple API instances
- New `API_INSTANCES` environment variable to control instance scaling
- Flexible scaling options:
- `max`: Utilize all available CPU cores
- `<number>`: Run a specific number of instances
- `-1`: Use all cores except one
> ⚠️ **Important**: Never set instance count higher than your server's physical core count
### Frontend
- i18n in now supported. Currently, Russian, English and Persian languages are supported.
## 🐛 Bug Fixes
- [x] Fixed an error, when you tried to use Telegram bot for notifications, but it is already had getUpdates or webhook active.
- [x] Other minor fixes and improvements.

View File

@@ -0,0 +1,56 @@
---
title: Release v2.1.0
authors: remnawave
tags: [release]
date: 2025-08-13
---
# Release v2.1.0
**🚧 Полное обновление обязательно 🚧**
Этот релиз содержит обновления всех компонентов Remnawave. Пожалуйста, внимательно ознакомьтесь с этим документом перед обновлением.
<!-- truncate -->
Хоть и новая версия панели _будет_ работать со старой версией Remnawave Node (до v2.1.0), мы настоятельно рекомендуем обновить Remnawave Node до версии v2.1.0.
## Remnawave Panel v2.1.0
### 🔄 Breaking Changes
- Через API (Patch метод в UsersController) более невозможно обновить статус пользователя на **LIMITED**, **EXPIRED**.
### Обновление
```bash
cd /opt/remnawave && docker compose pull remnawave && docker compose down && docker compose up -d && docker compose logs -f -t
```
## Remnawave Node v2.1.0
### 🔄 Breaking Changes
- Версия Remnawave Node v2.1.0 несовместима с версиями панели до v2.1.0.
### Прочие изменения
- Версия Xray Core обновлена до v25.8.3.
### Обновление
```bash
cd /opt/remnanode && docker compose pull remnanode && docker compose down && docker compose up -d && docker compose logs -f -t
```
## Remnawave Subscription Page v6.0.0
В версии v6.0.0 был обновлен формат `app-config.json` до новой версии, которая позволяет отключить неиспользуемые языки, а так же кастомизировать имя бренда и добавить логотип.
Встроенный в панель билдер был так же обновлен для поддержки нового формата `app-config.json`.
### Обновление
```bash
cd /opt/remnawave/subscription && docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```

15
blog/tags.yaml Normal file
View File

@@ -0,0 +1,15 @@
blog:
release:
description: "Blog posts about Remnawave Panel's new releases"
development:
description: 'Blog posts about the development of the Remnawave Panel'
birth:
endi:
i18n:
beta:
search:
documentation:
profilo:
adoption:
unlisted:
new:

View File

@@ -0,0 +1,203 @@
---
title: Updating from 1.3.x to 1.4.x
authors: remnawave
tags: [updating-guides]
date: 2025-03-14
---
# Release v1.4.x
<Button
label="Check out full changelog"
variant="secondary"
outline
link="https://hub.remna.st/changelog/remnawave-v1-4-0"
/>
<!-- truncate -->
## Remnawave Panel
### Updating backend
1. Update docker-compose.yml.
```bash
cd /opt/remnawave && nano docker-compose.yml
```
2. Replace your current configuration with the new one:
```yaml title="docker-compose.yml"
services:
remnawave-db:
image: postgres:17
container_name: 'remnawave-db'
hostname: remnawave-db
restart: always
env_file:
- .env
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
- TZ=UTC
ports:
- '127.0.0.1:6767:5432'
volumes:
- remnawave-db-data:/var/lib/postgresql/data
networks:
- remnawave-network
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
interval: 3s
timeout: 10s
retries: 3
remnawave:
image: remnawave/backend:latest
container_name: 'remnawave'
hostname: remnawave
restart: always
ports:
- '127.0.0.1:3000:3000'
env_file:
- .env
networks:
- remnawave-network
// highlight-next-line-green
depends_on:
// highlight-next-line-green
remnawave-db:
// highlight-next-line-green
condition: service_healthy
// highlight-next-line-green
remnawave-redis:
// highlight-next-line-green
condition: service_healthy
// highlight-next-line-green
remnawave-redis:
// highlight-next-line-green
image: valkey/valkey:8.0.2-alpine
// highlight-next-line-green
container_name: remnawave-redis
// highlight-next-line-green
hostname: remnawave-redis
// highlight-next-line-green
restart: always
// highlight-next-line-green
networks:
// highlight-next-line-green
- remnawave-network
// highlight-next-line-green
volumes:
// highlight-next-line-green
- remnawave-redis-data:/data
// highlight-next-line-green
healthcheck:
// highlight-next-line-green
test: ['CMD', 'valkey-cli', 'ping']
// highlight-next-line-green
interval: 3s
// highlight-next-line-green
timeout: 10s
// highlight-next-line-green
retries: 3
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: false
volumes:
remnawave-db-data:
driver: local
external: false
name: remnawave-db-data
// highlight-next-line-green
remnawave-redis-data:
// highlight-next-line-green
driver: local
// highlight-next-line-green
external: false
// highlight-next-line-green
name: remnawave-redis-data
```
3. Moving on to the .env file.
```bash
cd /opt/remnawave && nano .env
```
4. Remove old .env variables:
```title=".env"
// highlight-next-line-red
SUB_SUPPORT_URL
// highlight-next-line-red
SUB_PROFILE_TITLE
// highlight-next-line-red
SUB_UPDATE_INTERVAL
// highlight-next-line-red
SUB_WEBPAGE_URL
// highlight-next-line-red
EXPIRED_USER_REMARKS
// highlight-next-line-red
DISABLED_USER_REMARKS
// highlight-next-line-red
LIMITED_USER_REMARKS
// highlight-next-line-red
SUPERADMIN_PASSWORD
// highlight-next-line-red
SUPERADMIN_USERNAME
```
Don't worry about the removed variables, they are moved to dashboard settings.
Check out "Subscription Settings" section in dashboard.
Superadmin credentials now is stored in database and you will be prompted to create a superadmin account after updating.
1. Add new .env variables:
```title=".env"
// highlight-next-line-green
### REDIS ###
// highlight-next-line-green
REDIS_HOST=remnawave-redis
// highlight-next-line-green
REDIS_PORT=6379
```
6. Going live
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```
### About subscription templates
In previous versions of Remnawave, you could can mount custom templates for Sing-box, Mihomo, and Stash with setup similar to this:
```yaml title="docker-compose.yml"
volumes:
- ./custom/configs/clash/stash_template.yml:/var/lib/remnawave/configs/stash/stash_template.yml
- ./custom/configs/clash/clash_template.yml:/var/lib/remnawave/configs/clash/clash_template.yml
- ./custom/configs/singbox/singbox_legacy.json:/var/lib/remnawave/configs/singbox/singbox_legacy.json
- ./custom/configs/singbox/singbox_template.json:/var/lib/remnawave/configs/singbox/singbox_template.json
```
In v1.4.x, we've removed support of _mounting_ custom templates from docker-compose.yml.
Now, you can only use templates from dashboard.
Check out new section in dashboard `Templates`.
## Remnawave Node (Remnanode)
1. Update with command:
```bash
cd /opt/remnanode && docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```

View File

@@ -0,0 +1,69 @@
---
title: Updating from to 1.5.x
authors: remnawave
tags: [updating-guides]
date: 2025-04-06
---
# Release v1.5.x
<Button
label="Check out full changelog"
variant="secondary"
outline
link="https://hub.remna.st/changelog/remnawave-v1-5-0"
/>
<!-- truncate -->
### Warning
:::danger
It is necessary to update the Remnawave Node (Remnanode) to v1.5.x **AFTER** updating the Remnawave Panel.
:::
## Remnawave Panel
:::warning
Open you current Remnawave Panel in browser and logout.
:::
### 1. Update Remnawave Panel
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```
### 2. Recreate admin user with RESCUE CLI
1.5.x version of Remnawave Panel uses a new password hashing algorithm, so old admin user will not be able to login.
```bash
docker exec -it remnawave remnawave
```
After entering the Rescue CLI, select option 'Reset superadmin' and follow the instructions.
### 3. Open Remnawave Panel
You will be prompted to create a new superadmin user.
### 4. Getting new SSL_CERT
In Remnawave Dashboard, go to `Nodes` -> `Management` and copy new `SSL_CERT`.
### 5. Update Remnawave Node (Remnanode)
Firstly, update SSL_CERT in the `.env` file with new one.
```bash
cd /opt/remnanode && nano .env
```
Then, update Remnawave Node (Remnanode) with command:
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```

View File

@@ -0,0 +1,148 @@
---
title: Upgrading to 1.6.x
authors: remnawave
tags: [updating-guides]
date: 2025-05-10
---
# Release v1.6.x
<Button
label="Check out full changelog"
variant="secondary"
outline
link="https://hub.remna.st/changelog/remnawave-v1-6-0"
/>
<!-- truncate -->
## Remnawave Panel
### API schema changed
Remnawave Panel API schema changed, so you need to update your API clients.
:::danger
**Release v1.6.x contains really breaking changes in API schema.**
Almost all endpoints are changed!
Please, review [new API schema](https://docs.rw/api) before updating.
:::
### Change .env variables
If you are using Telegram bot notifications, pleace review changes below:
```bash title="1.5.x .env"
IS_TELEGRAM_ENABLED=true
TELEGRAM_BOT_TOKEN=1234567890
TELEGRAM_ADMIN_ID=1234567890
TELEGRAM_ADMIN_THREAD_ID=1234567890
NODES_NOTIFY_CHAT_ID=1
NODES_NOTIFY_THREAD_ID=1
```
And update them with new values:
```bash title="1.6.x .env"
# Disable/Enable Telegram notifications
IS_TELEGRAM_NOTIFICATIONS_ENABLED=false
# Telegram bot token
TELEGRAM_BOT_TOKEN=change_me
# Notifications about users
TELEGRAM_NOTIFY_USERS_CHAT_ID=change_me
# Notifications about nodes
TELEGRAM_NOTIFY_NODES_CHAT_ID=change_me
# Optional, if you want to send notifications to specific topics in Telegram group
TELEGRAM_NOTIFY_USERS_THREAD_ID=
TELEGRAM_NOTIFY_NODES_THREAD_ID=
```
### Update Remnawave Panel
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```
## Remnawave Subscription Page
The backend part of @remnawave/subscription-page has been fully rewritten with NestJS (TypeScript) from scratch.
### New .env file format and variables
```bash title=".env"
APP_PORT=3010
### Remnawave Panel URL, can be http://remnawave:3000 or https://panel.example.com
REMNAWAVE_PANEL_URL=https://panel.example.com
META_TITLE="Subscription page"
META_DESCRIPTION="Subscription page description"
# Serve at custom root path, for example, this value can be: CUSTOM_SUB_PREFIX=sub
# Do not place / at the start/end
CUSTOM_SUB_PREFIX=
# Support Marzban links
MARZBAN_LEGACY_LINK_ENABLED=false
MARZBAN_LEGACY_SECRET_KEY=
REMNAWAVE_API_TOKEN=
# If you use "Caddy with security" addon, you can place here X-Api-Key, which will be applied to requests to Remnawave Panel.
CADDY_AUTH_API_TOKEN=
```
You can use with .env file or environment variables.
```yaml title="docker-compose.yml"
services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- APP_PORT=3010
- REMNAWAVE_PANEL_URL=https://panel.example.com # Can be http://remnawave:3000 or https://panel.example.com
- META_TITLE="Subscription page"
- META_DESCRIPTION="Subscription page description"
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true
```
Also, pay attention if you are using custom app-config.json.
New correct path is `/opt/app/frontend/assets/app-config.json`.
```yaml title="docker-compose.yml"
volumes:
- ./app-config.json:/opt/app/frontend/assets/app-config.json
```
### Update Remnawave Subscription Page
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```

View File

@@ -0,0 +1,55 @@
---
title: Upgrading to 2.x
authors: remnawave
tags: [updating-guides]
date: 2025-07-29
---
# Release v2.x
<!-- truncate -->
## Remnawave Panel
:::danger Внимание!
Убедитесь, что вы сделали резервную копию базы данных перед обновлением. Релиз 2.x несовместим с предыдущими версиями и содержит критические изменения.
:::
Как мы уже писали в блоге, новая версия полностью переосмысливает архитектуру инбаундов.
Рекомендуем ознакомиться с [новой архитектурой](/blog/misc/new-profiles-and-squads/explaining-new-profile-and-squads-system).
И, если вы сомневаетесь, ознакомьтесь со статьей [Быстрый старт](/docs/learn/quick-start).
В целом весь процесс миграции будет бесшовным, но есть несколько моментов, которые нужно учитывать.
1. Все активные инбаунды на нодах будут перенесены в том виде, в котором они были на момент обновления. (активные = включенные)
2. Будет создан один "внутренний сквад", в него будут добавлены все доступные инбаунды.
3. Всем пользователям будет назначен внутренний сквад.
Из-за пунктов 2,3 пользователи в своей подписке могут получить хосты, которые им не должны быть доступны.
Поэтому перед обновлением рекомендуется выключить хосты, которые не должны быть доступны пользователям. Чуть позже вы сможете их включить.
После обновления, вы можете выключить лишние инбаунды в разделе "Внутренние сквады".
Итак, резюмируя:
1. Обязательно сделайте бекап базы данных. Обязательно.
2. Выключите видимость хостов, которые не должны быть доступны всем пользователям, или только некоторым.
3. Обновитесь до Remnawave Panel 2.x.
4. После обновления, перейдите в раздел "Внутренние сквады" и выключите лишние инбаунды для единственного сквада.
5. Верните видимость хостов, которые ранее были выключены.
### Обновление Remnawave Panel
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```
## Remnawave Node
Хоть это и не обязательно, но мы рекомендуем обновить Remnawave Node до последней доступной версии.
```bash
docker compose pull && docker compose down && docker compose up -d && docker compose logs -f -t
```

453
docs/awesome-remnawave.mdx Normal file
View File

@@ -0,0 +1,453 @@
---
sidebar_position: 7
title: ❤️ Awesome Remnawave
hide_title: true
hide_table_of_contents: true
description: 'Discover the amazing ecosystem of tools, scripts, and integrations built by the Remnawave community. From monitoring solutions to automation scripts, find everything you need to enhance your Remnawave experience.'
image: '/awesome/awesome-preview.webp'
---
import Button from '@site/src/components/Button'
import ProjectCard from '@site/src/components/ProjectCard'
import ProjectsGrid from '@site/src/components/ProjectsGrid'
import HeroSection from '@site/src/components/HeroSection'
import CategoryNav from '@site/src/components/CategoryNav'
import RemnavaweTelegramMiniAppGuide from '/docs/awesome-remnawave/\_install-guides/remnawave-telegram-mini-app.md'
import RemnawaveManagementScriptsGuide from '/docs/awesome-remnawave/\_install-guides/remnawave-management-scripts.md'
import RemnasetupGuide from '/docs/awesome-remnawave/\_install-guides/remnasetup.md'
import AnsiblePlaybookGuide from '/docs/awesome-remnawave/\_install-guides/ansible-playbook.md'
import RemnawaveReverseProxyGuide from '/docs/awesome-remnawave/\_install-guides/remnawave-reverse-proxy.md'
import RemnawaveBackupRestoreGuide from '/docs/awesome-remnawave/\_install-guides/remnawave-backup-restore.md'
import RemnawaveCloudflareNodes from '/docs/awesome-remnawave/\_install-guides/remnawave-cloudflare-nodes.md'
import WarpNativeInstallerGuide from '/docs/awesome-remnawave/\_install-guides/warp-native-installer.md'
import RemnavaweBedolagaBotGuide from '/docs/awesome-remnawave/\_install-guides/remnawave-bedolaga-bot.md'
import RemnashopGuide from '/docs/awesome-remnawave/\_install-guides/remnashop.md'
import RemnawaveBackuperGuide from '/docs/awesome-remnawave/\_install-guides/remnawave-backuper.md'
import XrayCheckerGuide from '/docs/awesome-remnawave/\_install-guides/xray-checker.md'
import WhiteboxGuide from '/docs/awesome-remnawave/\_install-guides/whitebox.md'
import McpRemnawaveGuide from '/docs/awesome-remnawave/\_install-guides/mcp-remnawave.md'
<HeroSection
title="❤️ Awesome Remnawave"
subtitle="Discover the amazing ecosystem of tools, scripts, and integrations built by the Remnawave community. From monitoring solutions to automation scripts, find everything you need to enhance your Remnawave experience."
/>
<CategoryNav
categories={[
{ id: 'monitoring-analytics', icon: '📊', title: 'Monitoring & Analytics' },
{ id: 'commerce', icon: '💰', title: 'Commerce' },
{ id: 'auto-installers', icon: '🚀', title: 'Auto-installers' },
{ id: 'backup-restore', icon: '💾', title: 'Backup & Restore' },
{ id: 'misc', icon: '🔧', title: 'Misc' },
{ id: 'clients', icon: '🖥️', title: 'Clients' }
]}
/>
<CategorySection
id="monitoring-analytics"
title="Monitoring & Analytics"
description="Tools for monitoring, analyzing, and visualizing your Remnawave infrastructure"
icon="📊"
columns={2}
>
<ProjectCard
id="xray-checker"
title="Xray Checker"
description="Xray Checker is a tool for monitoring proxy server availability with support for VLESS, VMess, Trojan, and Shadowsocks protocols. It automatically tests connections through Xray Core and provides metrics for Prometheus, as well as API endpoints for integration with various monitoring systems."
author="kutovoys"
authorLink="https://github.com/kutovoys"
image="/awesome/xray-checker.webp"
githubRepo="kutovoys/xray-checker"
links={{
github: 'https://github.com/kutovoys/xray-checker',
docs: 'https://xray-checker.kutovoy.dev/',
telegram: 'https://t.me/+FvF4gjr_JLZiOGEy'
}}
>
<XrayCheckerGuide />
</ProjectCard>
<ProjectCard
id="whitebox"
title="Whitebox"
description="A Prometheus exporter that provides availability monitoring of external VPN services powered by VMESS, VLESS, TROJAN, WireGuard, AmneziaWG and Shadowsocks."
author="quyxishi"
authorLink="https://github.com/quyxishi"
image="/awesome/whitebox-hemera-view.webp"
githubRepo="quyxishi/whitebox"
links={{
github: 'https://github.com/quyxishi/whitebox'
}}
>
<WhiteboxGuide />
</ProjectCard>
</CategorySection>
<CategorySection
id="commerce"
title="Commerce"
description="Telegram bots and mini apps made for commerce with Remnawave."
icon="📦"
columns={2}
>
<ProjectCard
id="remnawave-telegram-shop-bot"
title="RWP Shop"
description="A Telegram bot for selling subscriptions with integration to Remnawave. This service allows users to purchase and manage subscriptions through Telegram with multiple payment system options."
author="jolymmiles"
authorLink="https://github.com/Jolymmiles"
image="/awesome/rwp-shop-image.webp"
githubRepo="Jolymmiels/remnawave-telegram-shop"
links={{
github: 'https://github.com/Jolymmiels/remnawave-telegram-shop',
docs: 'https://docs.remnawavebot.dev',
private: 'https://me.remnawavebot.dev/',
telegram: 'https://t.me/remnawavetelegramshop'
}}
featured={true}
/>
<ProjectCard
id="remnawave-bedolaga-bot"
title="Remnawave Bedolaga Bot"
description="Modern Telegram bot for automating VPN business through Remnawave API. Full-featured solution with user management, multi-channel payments, referral system, detailed analytics, Web API, Web Cabinet and Telegram Mini App integration."
author="Fr1ngg"
authorLink="https://github.com/Fr1ngg"
image="/awesome/bedolaga.webp"
githubRepo="Fr1ngg/remnawave-bedolaga-telegram-bot"
links={{
github: 'https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot',
telegram: 'https://t.me/+wTdMtSWq8YdmZmVi'
}}
featured={true}
>
<RemnavaweBedolagaBotGuide />
</ProjectCard>
<ProjectCard
id="remnashop"
title="Remnashop"
description="A modern Telegram bot for selling and managing subscriptions with maximum flexibility. Create trial, free, or paid plans, restrict access for specific users or groups, set limits, adjust prices, and assign plans to different nodes — all through an intuitive plan configurator."
author="snoups"
authorLink="https://github.com/snoups"
image="/awesome/remnashop.webp"
githubRepo="snoups/remnashop"
links={{
github: 'https://github.com/snoups/remnashop',
telegram: 'https://t.me/remna_shop'
}}
>
<RemnashopGuide />
</ProjectCard>
</CategorySection>
<CategorySection
id="auto-installers"
title="Auto-installers"
description="Automated installation, configuration, and deployment tools for Remnawave infrastructure."
icon="🚀 "
columns={2}
>
<ProjectCard
id="remnawave-reverse-proxy"
title="Remnawave Reverse Proxy"
description="Server Setup Using NGINX Reverse Proxy. This script is designed to streamline the setup of a reverse proxy server using NGINX and Xray, as well as to automate the installation of the Remnawave control panel and node. In this configuration, Xray operates directly on port 443, forwarding traffic through a socket that NGINX listens to."
author="eGamesAPI"
authorLink="https://github.com/eGamesAPI"
image="/awesome/remnawave-reverse-proxy.webp"
githubRepo="eGamesAPI/remnawave-reverse-proxy"
links={{
github: 'https://github.com/eGamesAPI/remnawave-reverse-proxy',
docs: 'https://wiki.egam.es',
telegram: 'https://t.me/+G8GtPf9dW9FlMWVi'
}}
featured={true}
>
<RemnawaveReverseProxyGuide />
</ProjectCard>
<ProjectCard
id="remnawave-management-scripts"
title="Remnawave Management Scripts"
description="Comprehensive bash scripts for Remnawave Panel, Remnawave Node, and Reality Selfsteal with full automation support. Features Docker integration, intelligent backup/restore system with version checking, advanced monitoring, and complete lifecycle management."
author="DigneZzZ"
authorLink="https://github.com/DigneZzZ"
image="/awesome/remnawave-script.webp"
githubRepo="DigneZzZ/remnawave-scripts"
links={{
github: 'https://github.com/DigneZzZ/remnawave-scripts'
}}
>
<RemnawaveManagementScriptsGuide />
</ProjectCard>
<ProjectCard
id="remnasetup"
title="RemnaSetup"
description="Universal script for automatic installation, configuration, and updating of Remnawave and Remnanode infrastructure. Includes installation of the control panel, node, subscription page, Caddy setup, Tblocker, BBR, WARP, and an automatic backup system with Telegram integration."
author="Capybara-z"
authorLink="https://github.com/Capybara-z"
image="/awesome/remnasetup.webp"
githubRepo="Capybara-z/RemnaSetup"
links={{
github: 'https://github.com/Capybara-z/RemnaSetup'
}}
>
<RemnasetupGuide />
</ProjectCard>
<ProjectCard
id="ansible-playbook"
title="Ansible playbook for Install Remnawave"
description="This project helps install Remnawave via Ansible."
author="iphizic"
authorLink="https://github.com/iphizic"
image="/awesome/ansible.webp"
githubRepo="iphizic/remna-playbook"
links={{
github: 'https://github.com/iphizic/remna-playbook'
}}
>
<AnsiblePlaybookGuide />
</ProjectCard>
</CategorySection>
<CategorySection
id="backup-restore"
title="Backup & Restore"
description="Tools for backing up and restoring your Remnawave database and configurations"
icon="💾"
columns={1}
>
<ProjectCard
id="remnawave-backup-restore"
title="Remnawave Backup & Restore"
description="The script automates backups and performs a restore of the Remnawave database."
author="distillium"
authorLink="https://github.com/distillium"
image="/awesome/remnawave-backup-restore.webp"
githubRepo="distillium/remnawave-backup-restore"
links={{
github: 'https://github.com/distillium/remnawave-backup-restore'
}}
>
<RemnawaveBackupRestoreGuide />
</ProjectCard>
<ProjectCard
id="remnawave-backuper"
title="Backuper"
description="Automated backup solution with unlimited size support and multi-platform delivery. Supports Gmail, Telegram, and Discord with password protection and Telegram topic integration."
author="erfjab"
authorLink="https://github.com/erfjab"
image="/awesome/remnawave-backuper.webp"
githubRepo="erfjab/Backuper"
links={{
github: 'https://github.com/erfjab/Backuper'
}}
>
<RemnawaveBackuperGuide />
</ProjectCard>
</CategorySection>
<CategorySection
id="misc"
title="Misc"
description="Utilities, tools, and integrations that don't fit into other categories."
icon="🔧"
columns={2}
>
<ProjectCard
id="remnawave-telegram-mini-app"
title="Remnawave Telegram Subscription Mini App"
description="This is a Telegram Subscription Mini App that allows users to view their subscriptions directly through Telegram. As a requirement for using the page, the Telegram ID must be set in the user's profile to ensure proper identification and linking of subscriptions."
author="maposia"
authorLink="https://github.com/maposia"
image="/awesome/remnawave-telegram-sub-mini-app.webp"
githubRepo="maposia/remnawave-telegram-sub-mini-app"
links={{
github: 'https://github.com/maposia/remnawave-telegram-sub-mini-app',
telegram: 'https://t.me/reway_apps'
}}
>
<RemnavaweTelegramMiniAppGuide />
</ProjectCard>
<ProjectCard
id="remnawave-cloudflare-nodes"
title="Cloudflare Nodes"
description="Automatically manage Cloudflare DNS records based on Remnawave node health status."
author="hteppl"
authorLink="https://github.com/hteppl"
image="/awesome/remnawave-cloudflare-nodes.webp"
githubRepo="hteppl/remnawave-cloudflare-nodes"
links={{
github: 'https://github.com/hteppl/remnawave-cloudflare-nodes',
telegram: 'https://t.me/+oWSs_u-Wg2piNDIy'
}}
>
<RemnawaveCloudflareNodes />
</ProjectCard>
<ProjectCard
id="warp-native-installer"
title="WARP Native Installer"
description="This script installs Cloudflare WARP in 'native' mode via WireGuard, without using warp-cli. Automates package installation, wgcf configuration, and enables autorun. Available as both shell script and Ansible role."
author="distillium & TheMelbine"
authorLink="https://github.com/distillium"
image="/awesome/warp-native.webp"
githubRepo="distillium/warp-native"
links={{
github: 'https://github.com/distillium/warp-native'
}}
>
<WarpNativeInstallerGuide />
</ProjectCard>
<ProjectCard
id="geo-file-viewer"
title="Geo File Viewer"
description="A utility for viewing the contents of geoip and geofile (.dat) files in the v2fly format."
image="/awesome/geofileviewer.webp"
links={{
website: 'https://jomertix.github.io/geofileviewer'
}}
/>
<ProjectCard
id="remnawave-admin"
title="Remnawave Admin Web + Bot"
description="Web panel and telegram bot for managing Remnawave panel. Features user/node/host management, billing, anti-abuse system with multi-factor connection analysis, built-in mail server, webhook notifications, and an interactive web dashboard with geo-map visualization."
author="Case211"
authorLink="https://github.com/Case211"
image="/awesome/remnawave-admin.webp"
githubRepo="Case211/remnawave-admin"
links={{
github: 'https://github.com/Case211/remnawave-admin',
telegram: 'https://t.me/remnawave_admin'
}}
featured={true}
/>
<ProjectCard
id="mcp-remnawave"
title="MCP Remnawave"
description="An MCP server for managing Remnawave panel through AI assistants like Claude Desktop, Cursor, and Windsurf. Provides 51 tools for managing users, nodes, hosts, subscriptions, squads, and HWID devices, along with real-time panel statistics and guided prompts for common tasks."
author="TrackLine"
authorLink="https://github.com/TrackLine"
image="/awesome/mcp-remnawave.webp"
githubRepo="TrackLine/mcp-remnawave"
links={{
github: 'https://github.com/TrackLine/mcp-remnawave'
}}
>
<McpRemnawaveGuide />
</ProjectCard>
</CategorySection>
<CategorySection
id="clients"
title="Clients"
description="Proxy clients based on Remnawave functionality"
icon="🖥️"
columns={2}
>
<ProjectCard
id="koala-clash"
title="Koala-Clash (fork of Clash Verge Rev)"
description="Koala-Clash is a desktop (Windows, Linux, macOS) client for Mihomo. A Clash Meta GUI based on Tauri."
author="coolcoala"
authorLink="https://github.com/coolcoala"
image="/awesome/koalaclash.webp"
githubRepo="coolcoala/clash-verge-rev-lite"
hwidSupported={true}
links={{
github: 'https://github.com/coolcoala/clash-verge-rev-lite',
telegram: 'https://t.me/+WCL__GOFzZJkYjZi'
}}
/>
<ProjectCard
id="flclashx"
title="FlClashX (fork of FlClash)"
description="A fork of the multi-platform (Windows, Android, Linux, macOS) proxy client FlClash based on ClashMeta, simple and easy to use, open source and ad-free."
author="pluralplay"
authorLink="https://github.com/pluralplay"
image="/awesome/flclashx.webp"
githubRepo="pluralplay/flclashx"
links={{
github: 'https://github.com/pluralplay/flclashx',
telegram: 'https://t.me/flclashx'
}}
hwidSupported={true}
featured={true}
/>
<ProjectCard
id="prizrakbox"
title="Prizrak-Box (fork of Pandora-Box)"
description="Prizrak-Box is a desktop (Windows, Linux, macOS) client for Mihomo, supporting subscription management and routing rule configuration.
It allows using and overriding routes with custom templates (includes built-in templates relevant for Russia)."
author="legiz"
authorLink="https://github.com/legiz-ru"
image="/awesome/prizrakbox.webp"
githubRepo="legiz-ru/Prizrak-Box"
hwidSupported={true}
links={{
github: 'https://github.com/legiz-ru/Prizrak-Box'
}}
/>
<ProjectCard
id="flowvy"
title="Flowvy (fork of FlClash)"
description="Flowvy is a multi-platform (Windows, Android) client based on FlClash, featuring advanced notifications for traffic usage and subscription expiry. It offers a redesigned UI with Russian localization, a new home widget, and supports core setting overrides from the config."
author="x_kit_"
authorLink="https://github.com/this-xkit/"
image="/awesome/flowvy.webp"
githubRepo="this-xkit/Flowvy"
hwidSupported={true}
links={{
github: 'https://github.com/this-xkit/Flowvy'
}}
/>
</CategorySection>
---
<h2 id="remnafamily">💬 Join the chat list in Telegram</h2>
### RemnaFamily
[Join the chat list](https://t.me/addlist/_MNKSbbkAlQ3ZjQy)
## 🎯 Add Your Project
Want to showcase your Remnawave-related project? We'd love to see it!
**Requirements:**
- ✅ Project must be open source
- ✅ Project must be related to Remnawave or useful for Remnawave users
**How to submit:**
1. Open a PR on [GitHub](https://github.com/remnawave/panel/blob/main/docs/awesome-remnawave.mdx)
2. Make sure the target branch is `main`
:::tip Making beautiful previews
1. Make screenshot of your project
2. Paste it to https://shots.so
3. Select background colors and download image
4. Compress it to `webp` format with https://squoosh.app/
5. Put it to `static/awesome` directory
:::
---
<div
style={{
textAlign: 'center',
marginTop: '4rem',
padding: '2rem',
borderRadius: '12px'
}}
>
<h3>🌟 Thank you to all contributors!</h3>
<p>The Remnawave community thrives because of amazing developers like you.</p>
</div>

View File

@@ -0,0 +1,51 @@
### Installation instructions
#### Clone repo and change dir
```bash
git clone https://github.com/iphizic/remna-playbook.git
cd remna-playbook
```
#### Now make Python .env:
```bash
python3 -m venv .env
```
#### Activate .env:
```bash
source .env/bin/activate
```
#### Install Ansible and requirements:
```bash
pip install -r requirements.txt
ansible-galaxy install -r requirements.yml
```
#### Make inventory and other vars
Make inventory like inventory.yml.example in inventory dir
In directory group_vars make all.yml like all.yml.example
#### `Optional` Make some user but not root
:::warning
To run this playbook, the GitHub username must match the username in all.yml
:::
```bash
ansible-playbook prepare-playbook.yml -u root -k
```
First question it is root password
Second question it is password for the created user
#### Run install Remnaware:
```bash
ansible-playbook playbook.yml -K
```

View File

@@ -0,0 +1,7 @@
### Features
- **51 tools** for managing users, nodes, hosts, subscriptions, squads, and HWID devices
- **3 resources** for real-time panel statistics, node status, and health checks
- **5 guided prompts** for common operational tasks
- **Type-safe API** interactions via `@remnawave/backend-contract`
- **Docker Ready** — easy deployment with Docker Compose

View File

@@ -0,0 +1,21 @@
### 🔥 Main Features
- 📦 Complete Remnawave installation + Subscription page + Caddy
- 🌐 Remnanode installation with Caddy, Tblocker, BBR, and WARP
- 💾 Backup system with Telegram integration
- ♻️ Recovery from local backups and Telegram
- 🔄 Automatic component updates
### Quick Start
#### Option 1
```bash
bash <(curl -fsSL raw.githubusercontent.com/Capybara-z/RemnaSetup/refs/heads/main/install.sh)
```
#### Option 2
```bash
curl -fsSL https://raw.githubusercontent.com/Capybara-z/RemnaSetup/refs/heads/main/install.sh -o install.sh && chmod +x install.sh && sudo bash ./install.sh
```

View File

@@ -0,0 +1,14 @@
* 📦 **Flexible Plans** Create trial, free, or paid plans with any limits, multi-currency pricing, customizable duration, and assign plans to users or user groups.
* 🎟️ **Promocodes** Reward users with extra days, traffic, plan activation, or discounts.
* 📢 **Broadcasts** Send messages with photos, videos, GIFs, stickers, and HTML formatting. Target by user type and preview before sending.
* 🔔 **Notifications** Custom alerts for users (expiring subscriptions, traffic limits) and system events (bot updates, new users, node status) and more.
* 👥 **Referral Program** Two-level referrals with customizable rewards and detailed statistics.
* 💳 **Flexible Payments** Supports multiple gateways with configurable setup, test payments, and display order.
* 📱 **Device Management** Users can manage connected devices within limits.
* 🏷️ **Discounts** Personal and next-purchase discounts.
* 🔐 **Access Modes** Full, open, invite-only, or restricted access with automatic notifications and conditional rules.
* 📈 **Ad Links & Analytics** Track user acquisition, traffic sources, and view detailed statistics.
* 👤 **User Management** Full user editor with subscription, roles, stats, plan access, device management.
* 🔄 **Sync & Migration** Synchronization with panel and seamless migration from other bots.
* 🌐 **Internationalization** Multi-language support with locale-specific banners.

View File

@@ -0,0 +1,26 @@
### Features
- creating a manual backup and configuring automatic scheduled backups
- notifications in Telegram with backup file attached
- supports sending backup to Google Drive
- restore from backup
- backups retention policy (7 days) implemented
- quick access from anywhere on the system with the `rw-backup` command
### Installation
```bash
curl -o ~/backup-restore.sh https://raw.githubusercontent.com/distillium/remnawave-backup-restore/main/backup-restore.sh && chmod +x ~/backup-restore.sh && ~/backup-restore.sh
```
:::danger
As a precaution, use the restore function on the same panel version from which the backup was made (or create the backup from the latest panel version).
:::
:::warning
This script is designed to perform meaningful maintenance operations on the Remnawave database. Although it has been thoroughly tested, its functions affect the entire database and its components. It is recommended that you carefully follow the script's instructions before executing any commands.
:::
:::tip
The script backups and restores only the entire database, as well as the .env and .env-node files (if they exist in the /opt/remnawave/ or /root/remnawave/ directory). The backup and recovery of all other files and configurations are entirely the responsibility of the user.
:::

View File

@@ -0,0 +1,14 @@
### Features
- Unlimited backup size
- 3 platform support [gmail, telegram, discord]
- Password support
- Telegram topic support
### Installation
```bash
sudo bash -c "$(curl -sL https://github.com/erfjab/Backuper/raw/master/backuper.sh)"
```

View File

@@ -0,0 +1,16 @@
### 🔥 Key Features
- 💰 **Multi-channel payments** - Telegram Stars, Tribute, YooKassa (SBP + cards), CryptoBot, Heleket, MulenPay, PayPalych (SBP + cards), Platega (cards + SBP), WATA, Freekassa (NSPK SBP + cards), CloudPayments (cards + SBP)
- 🎯 **99% automation** - from registration to subscription renewals
- 📱 **MiniApp personal cabinet** - web interface for subscription purchase and management
- 🆕 **Web Cabinet (Cabinet WebApp)** - new user personal account with JWT authentication, Telegram Login Widget, email login with verification, password reset, and full CORS support
- 🎁 **Advanced promo system** - promo codes (balance/days/trial), promo groups, campaigns with automatic bonuses, personal offers
- 📊 **Detailed analytics** - complete business overview with statistics and topic notifications
- 🛡️ **Enterprise ready** - Python 3.13, AsyncIO, PostgreSQL, Redis, modular architecture
- 🔒 **Security** - panel protection via cookie authentication, support for remnawave-reverse-proxy
- 🗄️ **Backup system** - automatic backups with Telegram notifications and in-bot restore
- 🌐 **Multi-language** - Russian and English with expansion capability
- 🔧 **Flexible configuration** - tariff mode, traffic packages, device limits, smart server selection
- 🌐 **Web API** - 50+ REST endpoints for external integrations and custom admin panels
- 🔄 **Auto-sync** - background synchronization of subscriptions and servers with Remnawave
- 🎮 **Contests & games** - daily games with prizes and referral contests
- ✔️ **Channel subscription check** - verify channel subscription before access

View File

@@ -0,0 +1,9 @@
### Features
- **Automatic Health Monitoring** - Continuously monitors node health status via Remnawave API
- **Dynamic DNS Management** - Adds DNS records for healthy nodes, removes records for unhealthy ones
- **Auto Zone Discovery** - Automatically discovers Cloudflare zone IDs from domain names
- **Multi-Domain Support** - Manage multiple domains with multiple DNS zones each
- **Telegram Notifications** - Real-time alerts for node status changes, DNS updates, and critical events
- **Configurable Intervals** - Set custom health check intervals
- **Docker Ready** - Easy deployment with Docker and Docker Compose

View File

@@ -0,0 +1,136 @@
### 📦 Key Features
- 🚀 **One-line installation** for Panel, Node, and Selfsteal configurations
- 🎛️ **Interactive menus** with real-time status monitoring and guided operations
- 💾 **Smart backup system** with version compatibility checking and safety rollbacks
- 🔄 **Complete lifecycle management** - install, update, backup, restore, uninstall
- 🎯 **Reality masking** with 11 AI-generated website templates
### Quick Install Commands
#### Remnawave Panel (v3.5.5+)
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnawave.sh) @ install
```
#### Remnawave Node (v3.1.2+)
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh) @ install
```
#### Reality Selfsteal (v2.1.3+)
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/selfsteal.sh) @ install
```
:::info Options
- Add `--dev` for development version
- Add `--name customname` for custom directory (default: `/opt/remnawave`, `/opt/remnanode`)
:::
#### For existing installations
Use `install-script` to add CLI wrapper only:
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnawave.sh) @ install-script
```
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh) @ install-script
```
### Available CLI Commands
**Installation & Management:**
- `install`, `update`, `uninstall`
- `install-script`, `uninstall-script`
**Service Control:**
- `up`, `down`, `restart`, `status`, `logs`
**Node-specific Commands:**
- `core-update` - Manual Update/Install Xray-core to latest version
- `xray-log-out`, `xray-log-err` - View Xray logs
- `setup-logs` - Configure log rotation
**Configuration:**
- `edit`, `edit-env`, `console` (Panel only)
**Interactive Menus:**
- Run `remnawave`, `remnanode`, or `selfsteal` without arguments for interactive menu
- Real-time status monitoring and resource usage
- Step-by-step guided operations
**Backup & Restore (Panel):**
- `backup` - Create manual backup
- `schedule` - Configure automated backups
- `restore` - Restore from backup archive
**Reality Selfsteal:**
- Choose from 11 AI-generated website templates
- Automatic SSL certificate management by Caddy
- DNS validation before start
Run `remnawave help`, `remnanode help`, or `selfsteal help` for detailed usage.
### 💾 Intelligent Backup & Restore System
**🔄 Smart Backup Features:**
- **Version-aware backups** with compatibility checking
- **Safety restore** with automatic rollback protection
- **Scheduled automation** with cron integration
- **Telegram notifications** with file delivery and alerts
- **Cross-server migration** support with detailed instructions
- **Compressed archives** with unified structure
**📦 What's Backed Up:**
- PostgreSQL database as `db_backup.sql`
- Configuration files: `docker-compose.yml`, `.env`, `app-config.json`
- Optional: full directory backup with selective restore
**🎯 Quick Commands:**
```bash
remnawave backup # Create instant backup
remnawave schedule # Setup automated backups
remnawave restore # Intelligent restore with version checks
```
**🛡️ Safety Features:**
- Automatic version compatibility verification
- Safety backup before restore operations
- Rollback capability if restore fails
- Real-time status monitoring during operations
**📋 Restore Options:**
- Full restore (replace all files and database)
- Database-only restore (keep existing files)
- Custom directory restoration
- Manual restore commands included in each backup archive
**Legacy Standalone Scripts:**
Available for users who need legacy standalone backup/restore tools:
- [remnawave-backup.sh](https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnawave-backup.sh) - Standalone backup script
- [restore.sh](https://github.com/DigneZzZ/remnawave-scripts/raw/main/restore.sh) - Standalone restore script
📦 Full info, updates, and examples: [**remnawave-scripts**](https://github.com/DigneZzZ/remnawave-scripts)
Project: [GIG.ovh](https://gig.ovh)

View File

@@ -0,0 +1,19 @@
### Installation Guidelines
:::warning
Please read the [Installation Guidelines](https://github.com/eGamesAPI/remnawave-reverse-proxy/blob/main/README.md) or the [wiki](https://wiki.egam.es) before proceeding with the installation.
:::
### Installation
```bash
bash <(curl -Ls https://raw.githubusercontent.com/eGamesAPI/remnawave-reverse-proxy/refs/heads/main/install_remnawave.sh)
```
### Features
- Support for automatic configuration updates via subscription
- NGINX reverse proxy setup in combination with Xray
- Cloudflare SSL certificates with automatic renewal
- UFW setup for access management
- BBR optimization for TCP connections

View File

@@ -0,0 +1,136 @@
### 📦 Key Features
- 🚀 **One-line installation** for Panel, Node, and Selfsteal configurations
- 🎛️ **Interactive menus** with real-time status monitoring and guided operations
- 💾 **Smart backup system** with version compatibility checking and safety rollbacks
- 🔄 **Complete lifecycle management** - install, update, backup, restore, uninstall
- 🎯 **Reality masking** with 11 AI-generated website templates
### Quick Install Commands
#### Remnawave Panel (v3.5.5+)
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnawave.sh) @ install
```
#### Remnawave Node (v3.1.2+)
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh) @ install
```
#### Reality Selfsteal (v2.1.3+)
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/selfsteal.sh) @ install
```
:::info Options
- Add `--dev` for development version
- Add `--name customname` for custom directory (default: `/opt/remnawave`, `/opt/remnanode`)
:::
#### For existing installations
Use `install-script` to add CLI wrapper only:
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnawave.sh) @ install-script
```
```bash
bash <(curl -Ls https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh) @ install-script
```
### Available CLI Commands
**Installation & Management:**
- `install`, `update`, `uninstall`
- `install-script`, `uninstall-script`
**Service Control:**
- `up`, `down`, `restart`, `status`, `logs`
**Node-specific Commands:**
- `core-update` - Manual Update/Install Xray-core to latest version
- `xray-log-out`, `xray-log-err` - View Xray logs
- `setup-logs` - Configure log rotation
**Configuration:**
- `edit`, `edit-env`, `console` (Panel only)
**Interactive Menus:**
- Run `remnawave`, `remnanode`, or `selfsteal` without arguments for interactive menu
- Real-time status monitoring and resource usage
- Step-by-step guided operations
**Backup & Restore (Panel):**
- `backup` - Create manual backup
- `schedule` - Configure automated backups
- `restore` - Restore from backup archive
**Reality Selfsteal:**
- Choose from 11 AI-generated website templates
- Automatic SSL certificate management by Caddy
- DNS validation before start
Run `remnawave help`, `remnanode help`, or `selfsteal help` for detailed usage.
### 💾 Intelligent Backup & Restore System
**🔄 Smart Backup Features:**
- **Version-aware backups** with compatibility checking
- **Safety restore** with automatic rollback protection
- **Scheduled automation** with cron integration
- **Telegram notifications** with file delivery and alerts
- **Cross-server migration** support with detailed instructions
- **Compressed archives** with unified structure
**📦 What's Backed Up:**
- PostgreSQL database as `db_backup.sql`
- Configuration files: `docker-compose.yml`, `.env`, `app-config.json`
- Optional: full directory backup with selective restore
**🎯 Quick Commands:**
```bash
remnawave backup # Create instant backup
remnawave schedule # Setup automated backups
remnawave restore # Intelligent restore with version checks
```
**🛡️ Safety Features:**
- Automatic version compatibility verification
- Safety backup before restore operations
- Rollback capability if restore fails
- Real-time status monitoring during operations
**📋 Restore Options:**
- Full restore (replace all files and database)
- Database-only restore (keep existing files)
- Custom directory restoration
- Manual restore commands included in each backup archive
**Legacy Standalone Scripts:**
Available for users who need legacy standalone backup/restore tools:
- [remnawave-backup.sh](https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnawave-backup.sh) - Standalone backup script
- [restore.sh](https://github.com/DigneZzZ/remnawave-scripts/raw/main/restore.sh) - Standalone restore script
📦 Full info, updates, and examples: [**remnawave-scripts**](https://github.com/DigneZzZ/remnawave-scripts)
Project: [GIG.ovh](https://gig.ovh)

View File

@@ -0,0 +1,100 @@
### Features
- View your subscriptions in the mini app
- Multi-language support (English, Russian)
### Environment Variables
The application requires the following environment variables to be set:
| Variable | Description |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `REMNAWAVE_PANEL_URL` | Remnawave Panel URL, can be `http://remnawave:3000` or `https://panel.example.com` |
| `REMNAWAVE_TOKEN` | Authentication token for Remnawave API |
| `BUY_LINK` | The URL for purchase actions |
| `CRYPTO_LINK` | Allows using encrypted links (currently supported Happ application) |
| `REDIRECT_LINK` | Allows you to specify a **custom redirect page URL** for deep links. Useful for handling protocols like `v2box://` in Telegram Desktop (Windows). For more details and examples, see [Telegram Deep Link Redirect](https://github.com/maposia/redirect-page/tree/main) |
| `AUTH_API_KEY` | If you use "Caddy with security" or TinyAuth for Nginx addon, you can place here X-Api-Key, which will be applied to requests to Remnawave Panel. |
| `FORCE_SNOWFLAKES` | Allows snowfall on main page |
### Install and Run
#### 1. Create a new directory for the mini app
```bash
mkdir /opt/remnawave-telegram-sub-mini-app && cd /opt/remnawave-telegram-sub-mini-app
```
#### 2. Download the sample environment variables
```bash
curl -o .env https://raw.githubusercontent.com/maposia/remnawave-telegram-mini-bot/refs/heads/main/.env.example
```
#### 3. Configure the environment variables
```bash
nano .env
```
#### 4. Create docker-compose.yml file
```bash
nano docker-compose.yml
```
**Example below:**
```yaml
services:
remnawave-mini-app:
image: ghcr.io/maposia/remnawave-telegram-sub-mini-app:latest
container_name: remnawave-telegram-mini-app
hostname: remnawave-telegram-mini-app
env_file:
- .env
restart: always
# volumes:
# - ./app-config.json:/app/public/assets/app-config.json
ports:
- '127.0.0.1:3020:3020'
# networks:
# - remnawave-network
#networks:
# remnawave-network:
# name: remnawave-network
# driver: bridge
# external: true
```
Uncomment if you want to use your own template downloaded from the Remnawave panel.
P.S. File must be placed in the same directory as this `docker-compose.yml` file
```yaml
volumes:
- ./app-config.json:/app/public/assets/app-config.json
```
Uncomment if you want to use local connection via single network in docker
```yaml
networks:
- remnawave-network
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true
```
#### 5. Run containers
```bash
docker compose up -d && docker compose logs -f
```
#### 6. Access the mini app
Mini app is now running on `http://127.0.0.1:3020`
Now we are ready to move on to Reverse Proxy installation.

View File

@@ -0,0 +1,98 @@
**Script Author:** [distillium](https://github.com/distillium)
**Ansible Role Author:** [TheMelbine](https://github.com/TheMelbine)
### It automates
- Installing the necessary packages (`wireguard`, `resolvconf`)
- Downloading and configuring `wgcf`
- Generating and modifying the WireGuard configuration
- Connecting and checking status
- Enabling autorun of the `warp` interface
### Installing
#### Option 1: Shell Script (performed on each desired node)
```bash
bash <(curl -fsSL https://raw.githubusercontent.com/distillium/warp-native/main/install.sh)
```
#### Option 2: Ansible Role (Recommended for automation)
```bash
ansible-galaxy install themelbine.warp_native
```
**Example playbook:**
```yaml
- hosts: warp_servers
become: yes
roles:
- themelbine.warp_native
vars:
warp_native_state: present
warp_native_modify_resolv: true
```
[Ansible Role Github Repository](https://github.com/TheMelbine/ansible-role-warp-native)
### Templates for Xray configuration
**Example outbound:**
```json
{
"tag": "warp-out",
"protocol": "freedom",
"settings": {},
"streamSettings": {
"sockopt": {
"interface": "warp",
"tcpFastOpen": true
}
}
}
```
**Example routing rule:**
```json
{
"type": "field",
"domain": ["netflix.com", "youtube.com", "twitter.com"],
"inboundTag": ["Node-1", "Node-2"],
"outboundTag": "warp-out"
}
```
### Interface management
| Operation | Command |
| --------------------- | --------------------------------- |
| Check service status | `systemctl status wg-quick@warp` |
| View interface status | `wg show warp` |
| Stop the interface | `systemctl stop wg-quick@warp` |
| Start the interface | `systemctl start wg-quick@warp` |
| Restart the interface | `systemctl restart wg-quick@warp` |
| Disable autorun | `systemctl disable wg-quick@warp` |
| Enable autorun | `systemctl enable wg-quick@warp` |
### Uninstall
**Shell Script Method:**
```bash
bash <(curl -fsSL https://raw.githubusercontent.com/distillium/warp-native/main/uninstall.sh)
```
**Ansible Role Method:**
```yaml
- hosts: warp_servers
become: yes
roles:
- themelbine.warp_native
vars:
warp_native_state: absent
```

View File

@@ -0,0 +1,138 @@
### 📦 Key Features
- **Multi-protocol VPN Probing**: Supports probing of external VPN services including VMESS, VLESS, Trojan, Wireguard, AmneziaWG and Shadowsocks.
- **RESTful API Service**: Exposes HTTP endpoints for on-demand or scheduled connectivity checks.
- **Custom Probe Configuration**: Accepts probe parameters such as connection details, target URLs, response validation rules, and configurable timeouts.
- **Prometheus Metrics Integration**: Exposes key probe results as Prometheus metrics.
### Getting Started
```shell
git clone -b main https://github.com/quyxishi/whitebox
cd ./whitebox
```
#### via `docker-compose.yaml`
```shell
sudo docker compose up --build -d
```
#### via `Dockerfile`
###### Build
```shell
sudo docker build --tag whitebox .
```
###### Running
```shell
sudo docker run --rm -d -p 9116:9116 whitebox
```
### Checking the results
After deploying, you can validate VPN tunnel probing by visiting:
```url
http://localhost:9116/probe?ctx=<urlencoded_vpn_uri>&target=google.com
```
After that, you will see a Prometheus-style metrics page showing the results of the probe.
For example, the output may look like:
```md
# HELP tun_probe_duration_seconds Returns how long the probe took to complete in seconds
# TYPE tun_probe_duration_seconds gauge
tun_probe_duration_seconds 1.554994
# HELP tun_probe_http_content_length_bytes Length of HTTP content response in bytes
# TYPE tun_probe_http_content_length_bytes gauge
tun_probe_http_content_length_bytes -1
# HELP tun_probe_http_duration_seconds Duration of HTTP request by phase, summed over all traces
# TYPE tun_probe_http_duration_seconds gauge
tun_probe_http_duration_seconds{phase="connect"} 0.1998826
tun_probe_http_duration_seconds{phase="processing"} 0.3262475
tun_probe_http_duration_seconds{phase="resolve"} 0
tun_probe_http_duration_seconds{phase="tls"} 1.2223279
tun_probe_http_duration_seconds{phase="transfer"} 0.0064185
# HELP tun_probe_http_redirects The number of redirects
# TYPE tun_probe_http_redirects gauge
tun_probe_http_redirects 1
# HELP tun_probe_http_ssl Indicates if SSL was used for the final trace
# TYPE tun_probe_http_ssl gauge
tun_probe_http_ssl 1
# HELP tun_probe_http_status_code Response HTTP status code
# TYPE tun_probe_http_status_code gauge
tun_probe_http_status_code 200
# HELP tun_probe_http_uncompressed_body_length_bytes Length of uncompressed response body in bytes
# TYPE tun_probe_http_uncompressed_body_length_bytes gauge
tun_probe_http_uncompressed_body_length_bytes 17650
# HELP tun_probe_success Displays whether or not the probe over tunnel was a success
# TYPE tun_probe_success gauge
tun_probe_success 1
```
### Whitebox Configuration
Refer to the [example configuration](https://github.com/quyxishi/whitebox/blob/main/whitebox.yml) and [code reference](https://github.com/quyxishi/whitebox/blob/main/internal/config/config.go) for implementation details.
### Prometheus Configuration
Whitebox follows the [multi-target exporter pattern](https://prometheus.io/docs/guides/multi-target-exporter/).
###### Example Prometheus configuration:
```yaml
scrape_configs:
- job_name: 'whitebox'
metrics_path: /probe
params:
max_redirects: [ '0' ] # Do not follow redirects. (Optional)
timeout_ms: [ '5000' ] # Probe timeout in ms. (Optional)
file_sd_configs:
- files: [ '/etc/prometheus/whitebox-sd-config.yml' ] # File service discovery configurations (targets).
relabel_configs:
- source_labels: [__address__]
target_label: __param_target # 'target' -> '?target=...'.
- source_labels: [ctx]
target_label: __param_ctx # 'ctx' -> '?ctx=...'.
- source_labels: [client]
target_label: client # Label all probe's with client id.
- source_labels: [protocol]
target_label: protocol # Label all probe's with used protocol.
- source_labels: [__param_target]
target_label: target # Label all probe's with target.
- target_label: __address__
replacement: 127.0.0.1:9116 # The whitebox real hostname:port.
```
###### Example file service discovery configuration (targets):
```yaml
- targets: [ "https://google.com" ]
labels:
ctx: "vless://c9f5228c-8870-47bd-a92f-9b38c7c02b08@1.2.3.4:443?type=tcp&encryption=none&security=reality&pbk=DF-3KL2W4RuNB2HgsEDmLqHLvvTTN4_QfwUCUn8Uhy0&fp=firefox&sni=web.max.ru&sid=dc8wq0b47450f9&spx=%2F&flow=xtls-rprx-vision#ring0-raii-idx0"
client: "ring0-raii-idx0" # Client unique identifier
protocol: "vless" # VPN protocol
# You can also add additional labels here:
# sni: "web.max.ru"
# And then, update relabel_configs in prometheus.yml job's config:
# - source_labels: [sni]
# target_label: sni
- targets: [ "https://cloudflare.com" ]
labels:
# Wireguard connection must be supplied as: base64-encoded peer .ini config prefixed with 'wireguard://'
ctx: "wireguard://W0ludGVyZmFjZV0KUHJpdmF0ZUtleSA9IFNObk5ON0l4YzV0ekNYS2FJNGZXNnEyOFYzbnhGS2YxcmNoYWt4bWdBbHM9CkFkZHJlc3MgPSAxMC4wLjAuMi8zMgpETlMgPSAxLjEuMS4xLCAxLjAuMC4xCk1UVSA9IDE0MjAKCiMgLTEKW1BlZXJdClB1YmxpY0tleSA9IHk2MTdkQ2dNM1g2bEtEanBkdDVhQ3dIWmROWW5OT0FwMFMyanFUbGpmZzA9CkFsbG93ZWRJUHMgPSAwLjAuMC4wLzAsIDo6LzAKRW5kcG9pbnQgPSAxLjIuMy40OjQ0Mw=="
client: "wg-raii-idx0"
protocol: "wireguard"
- targets: [ "https://google.com" ]
labels:
# AmneziaWG connection with obfuscation parameters (Jc, Jmin, Jmax, S1, S2, H1-H4)
# Must be supplied as: base64-encoded peer .ini config prefixed with 'awg://'
ctx: "awg://W0ludGVyZmFjZV0KUHJpdmF0ZUtleSA9IFNObk5ON0l4YzN0emxYS2FJNGY4NnEyOFYzbnhGS2YzcmNoYWt4bWdCbHM9CkFkZHJlc3MgPSAxMC4wLjAuMi8zMgpETlMgPSAxLjEuMS4xLCAxLjAuMC4xCk1UVSA9IDE0MjAKSmMgPSAzCkptaW4gPSA1MApKbWF4ID0gMTAwMApTMSA9IDIwClMyID0gNzgKSDEgPSAzOTEzMTI3OApIMiA9IDgzMjEzODE4NQpIMyA9IDE0MzY5NTc4NTcKSDQgPSAxNjM1ODc3NzQ2CgpbUGVlcl0KUHVibGljS2V5ID0geTYxN2RDZ00zWDZsS0RqcGR0NWFHY0FaZE5Zbk5PQXAwUzNqYVRsamZnMD0KQWxsb3dlZElQcyA9IDAuMC4wLjAvMCwgOjovMApFbmRwb2ludCA9IDEuMi4zLjQ6Mjc3ODkK"
client: "awg-raii-idx0"
protocol: "amneziawg"
```
:::info Tip
After all of that, reload Prometheus, visit http://localhost:9090/targets and check for your `whitebox` job.
:::

View File

@@ -0,0 +1,20 @@
### Key Features
- **Health Monitoring** Monitor the health of Xray proxy servers with support for various protocols (VLESS, VMess, Trojan, Shadowsocks)
- **Automatic Updates** Automatic proxy configuration updates from subscription URLs with configurable intervals
- **Metrics Export** Prometheus-format metrics export displaying proxy status and latency data
- **Web Interface** Dashboard with dark/light theme modes featuring search, filtering, sorting, and auto-refresh capabilities
- **Public Status Page** Display proxy status without authentication for VPN services
- **Web Customization** Custom logo, favicon, CSS styles, or entire template replacement
- **REST API** REST API with OpenAPI/Swagger documentation
- **Flexible Input** Support for URL subscriptions, Base64-encoded strings, V2Ray/Xray JSON files, JSON arrays, and configuration folders
- **Monitoring Integration** Automatic endpoint generation for integration with monitoring systems (e.g., Uptime-Kuma)
- **Latency Simulation** Test endpoints with configurable latency responses
- **Prometheus Pushgateway** Send metrics to external monitoring platforms
- **Multiple Check Methods** Three verification approaches: IP comparison, HTTP status checks, and file download verification
- **Latency Measurement** TTFB-based (Time To First Byte) measurement for accurate performance data
- **Authentication** Protect metrics and web interface using Basic Authentication
- **Multi-Platform Deployment** Docker container or standalone CLI application options
- **Multiple Subscriptions** Support for multiple subscription URLs simultaneously
- **Domain Resolution** Resolve proxy server domains into IPs and expand configurations
- **Reverse Proxy Support** Configurable base path for URL prefixes behind reverse proxies

12
docs/changelog/index.md Normal file
View File

@@ -0,0 +1,12 @@
---
sidebar_position: 8
title: Changelog
hide_title: true
hide_table_of_contents: true
---
```mdx-code-block
import DocCardList from '@theme/DocCardList';
<DocCardList/>
```

View File

@@ -0,0 +1,152 @@
---
sidebar_position: 2
title: Remnawave Node
description: 'Changelog for Remnawave Node'
hide_title: true
hide_table_of_contents: true
---
# Remnawave Node
<ReleaseEntry version="2.7.0" date="28 March 2026">
:::warning
Remnawave Panel **v2.7.0** or higher is required.
:::
- Support for new features from [Remnawave Panel v2.7.0](/docs/changelog/remnawave-panel) (plugins, metadata, system stats, etc.)
- **Xray Core v26.3.27**
</ReleaseEntry>
<ReleaseEntry version="2.6.1" date="24 February 2026">
- **Xray Core 26.2.6**
</ReleaseEntry>
<ReleaseEntry version="2.6.0" date="24 February 2026">
- Preps for Remnawave Panel v2.6.2 (additional notes will be available later)
- **Xray Core 25.12.8**
</ReleaseEntry>
<ReleaseEntry version="2.5.5" date="16 February 2026">
- feat: Rescue CLI (`docker exec -it remnanode cli`)
</ReleaseEntry>
<ReleaseEntry version="2.5.4" date="31 January 2026">
- Fix: [#333](https://github.com/remnawave/panel/issues/333)
</ReleaseEntry>
<ReleaseEntry version="2.5.3" date="30 January 2026">
- Fix: socket naming
</ReleaseEntry>
<ReleaseEntry version="2.5.2" date="30 January 2026">
- Unix sockets for internal communications
</ReleaseEntry>
<ReleaseEntry version="2.5.1" date="25 January 2026">
- Customize Internal ports via env variables: `SUPERVISORD_PORT`, `INTERNAL_REST_PORT`, `XTLS_API_PORT`
</ReleaseEntry>
<ReleaseEntry version="2.5.0" date="28 December 2025">
- Preparations for Panel version 2.5.0
</ReleaseEntry>
<ReleaseEntry version="2.3.2" date="19 December 2025">
- **Xray Core** version bump to **25.12.8**
</ReleaseEntry>
<ReleaseEntry version="2.3.1" date="10 December 2025">
- Add explicit error message if received request from unsupported Remnawave version
:::warning
Remnawave Node **версии 2.3.x и выше** работает только с **Remnawave 2.3.x и выше**.
:::
</ReleaseEntry>
<ReleaseEntry version="2.3.0" date="7 December 2025">
- Part of Remnawave v2.3.0 release
</ReleaseEntry>
<ReleaseEntry version="2.2.3" date="13 November 2025">
- New log messages
- Respect Level 0 Policies
</ReleaseEntry>
<ReleaseEntry version="2.2.2" date="25 October 2025">
:::warning
**APP_PORT**, **SSL_CERT** now is deprecated.
**APP_PORT** → **NODE_PORT**
**SSL_CERT** → **SECRET_KEY**
Changes not required, but **recommended**. Old values will be automatically converted to new ones, but this behaviour will change in next versions.
:::
</ReleaseEntry>
<ReleaseEntry version="2.2.1" date="24 October 2025">
- Small bug fixes
</ReleaseEntry>
<ReleaseEntry version="2.2.0" date="22 October 2025">
- **Xray Core** version bump to **25.10.15**
</ReleaseEntry>
<ReleaseEntry version="2.1.7" date="15 September 2025">
- **Xray Core** version bump to **25.9.11**
</ReleaseEntry>
<ReleaseEntry version="2.1.6" date="6 September 2025">
- **Xray Core** version bump to **25.9.5**
</ReleaseEntry>
<ReleaseEntry version="2.1.5" date="3 September 2025">
- **Xray Core** version bump to **25.8.31**
</ReleaseEntry>
<ReleaseEntry version="2.1.4" date="26 August 2025">
- Add support for force Xray Core restart
- Drop several unused packages (execa, others)
- Refactor Xray Core version extraction
- Add mutex for add/remove users from hot-core config (used by hash checkups)
- Add shortcuts for log tailing of Xray Core stdout, stderr logs (`docker exec -it remnanode xlogs`, `docker exec -it remnanode xerros`)
- Minor performance optimizations
</ReleaseEntry>

View File

@@ -0,0 +1,732 @@
---
sidebar_position: 1
title: Remnawave Panel
description: 'Changelog for Remnawave Panel'
hide_title: true
hide_table_of_contents: true
---
# Remnawave Panel
<ReleaseEntry version="2.7.4" date="30 March 2026">
### New Features
- **Extended clients regex** — added `additionalExtendedClientsRegex` to response rule modifications
- **Load average tooltip** — node card now shows a tooltip with detailed load average info
- **Final Mask** — new host property that allows override `finalMask`
### Bug Fixes
- fix: double save in Config Profiles and other sections
- fix: reset node basic and system info before querying system stats
- fix: allow empty values in response headers validation
- fix: empty SNI in Xray Base64
- fix: force disconnect incompatible Remnawave Node
</ReleaseEntry>
<ReleaseEntry version="2.7.2" date="28 March 2026">
- hotfix: custom remarks
- fix: Hysteria2 Xray-Json generation
- fix: base64 serverDescription
</ReleaseEntry>
<ReleaseEntry version="2.7.0" date="28 March 2026">
:::danger
**Before updating**, make a full backup of your data (database, configuration files, `.env`). See [Backup & Restore tools](/docs/awesome-remnawave#backup-restore).
:::
:::warning
Remnawave Node **v2.7.0** or higher is required.
:::
:::info Update order
0. **Read the [Action needed](#action-needed) section below** and make a **full backup** of your data before proceeding.
1. **Update the panel**:
```bash
cd /opt/remnawave && docker compose pull remnawave && docker compose down && docker compose up -d && docker compose logs -f
```
2. **Update the nodes** (on each node server). Make sure `cap_add: NET_ADMIN` is present in your node's `docker-compose.yml` — it is required for plugins and IP management:
```yaml
cap_add:
- NET_ADMIN
```
Then update:
```bash
cd /opt/remnanode && docker compose pull remnanode && docker compose down && docker compose up -d && docker compose logs -f
```
3. **Force restart all nodes**: once all nodes are updated, open the panel and go to **Nodes** → **Management**. Click the spiral button (grape color) and select **Force restart all nodes**.
:::
### Action needed
#### 0. Telegram login — migrated to Generic OAuth2
The built-in Telegram login widget has been replaced with a [Generic OAuth2](https://core.telegram.org/bots/telegram-login) integration. **Before updating**, disable the Telegram login method in the panel settings and switch to password or another provider.
If you have already updated and can't log in, use the rescue CLI to enable password authentication:
```bash
docker exec -it remnawave cli
```
After updating, you can re-enable Telegram login by configuring it as a Generic OAuth2 provider.
#### 1. Telegram notifications — new format
Remove these variables from your `.env` file:
```bash title=".env"
TELEGRAM_NOTIFY_USERS_CHAT_ID
TELEGRAM_NOTIFY_NODES_CHAT_ID
TELEGRAM_NOTIFY_CRM_CHAT_ID
TELEGRAM_NOTIFY_USERS_THREAD_ID
TELEGRAM_NOTIFY_NODES_THREAD_ID
TELEGRAM_NOTIFY_CRM_THREAD_ID
```
Replace with new unified format (`chat_id:thread_id`, thread_id is optional):
```bash title=".env"
TELEGRAM_NOTIFY_USERS=change_me
TELEGRAM_NOTIFY_NODES=change_me
TELEGRAM_NOTIFY_CRM=change_me
TELEGRAM_NOTIFY_SERVICE=change_me
TELEGRAM_NOTIFY_TBLOCKER=change_me
```
#### 2. Prometheus metrics — breaking changes
If you use Grafana dashboards or custom alerting based on Prometheus metrics, you **must** update your queries.
**Renamed metrics** (`nodejs_*` → `process_*`):
| Old name | New name |
| ------------------------------- | ----------------------------- |
| `nodejs_heap_used_bytes` | `process_heap_used_bytes` |
| `nodejs_heap_total_bytes` | `process_heap_total_bytes` |
| `nodejs_active_handlers` | `process_active_handles` |
| `nodejs_event_loop_latency_p50` | `process_event_loop_delay_ms` |
| `nodejs_event_loop_latency_p95` | `process_event_loop_p99_ms` |
**Removed metrics**: `nodejs_heap_usage_percent`, `nodejs_active_requests`, `nodejs_cpu_usage_percent`, `nodejs_memory_usage_bytes`, `nodejs_http_req_rate`, `nodejs_http_req_latency_p50`, `nodejs_http_req_latency_p95`
**New process metrics**: `process_rss_bytes`, `process_external_bytes`, `process_array_buffers_bytes`, `process_uptime_seconds`
**New node system metrics**: `node_network_rx_bytes_per_sec`, `node_network_tx_bytes_per_sec`, `node_network_rx_bytes_total`, `node_network_tx_bytes_total`, `node_memory_total_bytes`, `node_memory_free_bytes`, `node_uptime_seconds`, `node_cpu_count`, `node_system_info`
**Reduced label cardinality**: `node_online_users`, `node_status` and all `node_inbound_*`/`node_outbound_*` bandwidth metrics now use only `node_uuid` (+ `tag` for bandwidth). Labels like `node_name`, `node_country_emoji`, `provider_name`, `tags` are moved to dedicated info metrics:
- `node_basic_info` — static node labels (`node_uuid`, `node_name`, `node_country_emoji`, `provider_name`, `tags`)
- `node_system_info` — OS-level labels (`node_uuid`, `arch`, `cpu_model`, `hostname`, `platform`, `release`, `version`)
Use Prometheus [joins](https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching) to enrich queries, e.g.:
```promql
node_online_users * on(node_uuid) group_left(node_name) node_basic_info
```
You can use the updated Grafana dashboard compatible with v2.7.0 metrics: [Remnawave Panel Dashboard](https://grafana.com/grafana/dashboards/25064-remnawave-monitoring-dashboard/)
#### 3. New optional variable
```bash title=".env"
PANEL_DOMAIN=panel.domain.com
```
Used for generating direct links (e.g. in Telegram notifications with inline buttons).
&nbsp;
### New features
- **Node Plugins**: extensible plugin system for nodes — [docs](https://docs.rw/docs/learn/node-plugins)
- **Torrent Blocker** — detect and block torrent traffic with configurable block duration, ignore lists, and per-rule-tag targeting. Telegram notifications with inline "View user" button
- **Ingress Filter** — block inbound connections from specific IPs via nftables
- **Egress Filter** — block outbound connections to specific IPs/ports
- **Connection Drop** — drop connections from non-whitelisted IPs
- Shared IP lists support (`ext:list_name` format) across plugins
- Plugin actions: clone, reorder, execute commands on nodes (block/unblock IPs, recreate tables)
- Torrent Blocker Reports: paginated list, statistics (top users, top nodes, 24h summary), truncate
- **Metadata API**: store and retrieve custom key-value metadata for users and nodes (`GET/PUT /api/metadata/user/{uuid}`, `/api/metadata/node/{uuid}`)
- **Resolve User endpoint** (`POST /api/users/resolve`): resolve a user by any one identifier (uuid, id, shortUuid, or username)
- **System Recap** (`GET /api/system/stats/recap`): aggregated system overview — users, nodes, traffic, countries, version, init date
- **Traffic Limit Strategy**: new `MONTH_ROLLING` reset period — rolling 30-day traffic window
- **Fetch Users IPs**: new IP control endpoint (`POST /api/ip-control/fetch-users-ips/{nodeUuid}`) — fetch per-user IP addresses from a specific node
- **IP format change**: IP addresses now returned as objects with `ip` and `lastSeen` fields (instead of plain strings)
- **Telegram Bot proxy support**: new optional `TELEGRAM_BOT_PROXY` variable (format: `protocol://user:password@host:port`)
- **Custom Telegram Bot API server**: new optional `TELEGRAM_BOT_API_ROOT` variable (default: `https://api.telegram.org`)
- **Telegram inline keyboards**: notification messages now support interactive buttons
- **Node Bulk Update**: update `countryCode`, `consumptionMultiplier`, `providerUuid`, `tags`, `activePluginUuid` for multiple nodes at once
- **Node System Info**: CPU, memory, network, uptime now reported separately from the node model and cached with 30s TTL
- **Hysteria2 protocol**: support for Hysteria protocol and transport options (Xray-Json client only)
- **KCP transport**: support for KCP network type with TTI and congestion options
- **Tunnel protocol**: support for `tunnel` protocol in XRay configuration
- **Shadowsocks ciphers**: added `2022-blake3-aes-256-gcm`, `aes-128-gcm`, `aes-256-gcm` cipher methods
- **CIDR ranges in plugins**: IP/CIDR validation support in node plugin configurations
- **RAW subscription refactor**: the `rawHosts` array in `/api/subscriptions/by-short-uuid/{shortUuid}/raw` is replaced with `resolvedProxyConfigs` — a fully typed structure with discriminated unions for protocol (`vless`, `trojan`, `shadowsocks`), transport (`tcp`, `ws`, `xhttp`, `httpupgrade`, `grpc`, `kcp`), and security (`tls`, `reality`, `none`). Each proxy entry now contains `protocolOptions`, `transportOptions`, `securityOptions`, `streamOverrides`, `mux`, `clientOverrides`, and `metadata` instead of flat fields
&nbsp;
### Improvements
- **Docker**: switched from Alpine to Debian-based image (`node:24.14-trixie-slim`)
- **Valkey 9**: upgraded from 8.1, now uses Unix socket instead of TCP (default).
- **Prometheus metrics refactor**: simplified metric labels (reduced cardinality), renamed `NODEJS_*` → `PROCESS_*`, added node system metrics (network rx/tx, memory, uptime, cpu count)
- **Removed `systeminformation`**: system stats now use Node.js `os` module
- **Cache refactor**: migrated from `@nestjs/cache-manager` to internal `RawCacheService`, cache TTLs changed from milliseconds to seconds
- **Scheduler offsets**: cron jobs staggered by 520 minutes to avoid thundering herd at midnight
- **OCI labels**: Docker image now includes standard container metadata labels
&nbsp;
### Removed
- **Telegram OAuth2** (`POST /api/auth/oauth2/tg/callback`) — migrated to Generic OAuth2 provider
- **Outline subscription route** (`GET /api/sub/outline/{shortUuid}/{type}/{encodedTag}`)
- **Realtime bandwidth stats** (`GET /api/bandwidth-stats/nodes/realtime`)
- **User tracking fields**: `subLastOpenedAt`, `subLastUserAgent` dropped from the database
- **Node hardware fields**: `cpuCount`, `cpuModel`, `totalRam` dropped from the database (replaced by Node System Info cache)
- **`tgAuthSettings`** removed from Remnawave Settings model (request and response)
&nbsp;
### API Changelog 2.6.4 vs. 2.7.0
<details>
<summary>View changelog</summary>
#### Removed Endpoints
- `GET /api/bandwidth-stats/nodes/realtime`
- `POST /api/auth/oauth2/tg/callback`
- `GET /api/sub/outline/{shortUuid}/{type}/{encodedTag}`
#### New Endpoints
- `POST /api/ip-control/fetch-users-ips/{nodeUuid}` — fetch per-user IPs
- `GET /api/ip-control/fetch-users-ips/result/{jobId}` — get fetch results
- `POST /api/users/resolve` — resolve user by any identifier
- `GET /api/system/stats/recap` — system recap
- `GET /api/metadata/node/{uuid}` — get node metadata
- `PUT /api/metadata/node/{uuid}` — upsert node metadata
- `GET /api/metadata/user/{uuid}` — get user metadata
- `PUT /api/metadata/user/{uuid}` — upsert user metadata
- `GET /api/node-plugins` — list all plugins
- `GET /api/node-plugins/{uuid}` — get plugin
- `POST /api/node-plugins` — create plugin
- `PATCH /api/node-plugins` — update plugin
- `DELETE /api/node-plugins/{uuid}` — delete plugin
- `POST /api/node-plugins/actions/clone` — clone plugin
- `POST /api/node-plugins/actions/reorder` — reorder plugins
- `POST /api/node-plugins/executor` — execute commands on nodes
- `GET /api/node-plugins/torrent-blocker` — get reports
- `GET /api/node-plugins/torrent-blocker/stats` — get reports stats
- `DELETE /api/node-plugins/torrent-blocker` — truncate reports
---
#### Removed `cpuCount`, `cpuModel`, `totalRam`, `xrayVersion`, `nodeVersion` from Node response + added `versions`, `system`
- Removed: `cpuCount`, `cpuModel`, `totalRam`, `xrayVersion`, `nodeVersion`
- Added: `versions` (nullable object with `xray` and `node` strings), `system` (nullable `NodeSystem` object), `activePluginUuid`
- Changed: `xrayUptime` type from `string` to `number`, `usersOnline` type from `nullable(number)` to `number`
Affected endpoints:
- `GET /api/nodes`
- `PATCH /api/nodes`
- `POST /api/nodes`
- `POST /api/nodes/actions/reorder`
- `GET /api/nodes/{uuid}`
- `POST /api/nodes/{uuid}/actions/disable`
- `POST /api/nodes/{uuid}/actions/enable`
---
#### Removed `subLastOpenedAt`, `subLastUserAgent` + added `MONTH_ROLLING` to `trafficLimitStrategy` enum in User response
Affected endpoints:
- `GET /api/users`
- `PATCH /api/users`
- `POST /api/users`
- `GET /api/users/{uuid}`
- `GET /api/users/by-id/{id}`
- `GET /api/users/by-email/{email}`
- `GET /api/users/by-username/{username}`
- `GET /api/users/by-short-uuid/{shortUuid}`
- `GET /api/users/by-tag/{tag}`
- `GET /api/users/by-telegram-id/{telegramId}`
- `POST /api/users/{uuid}/actions/disable`
- `POST /api/users/{uuid}/actions/enable`
- `POST /api/users/{uuid}/actions/reset-traffic`
- `POST /api/users/{uuid}/actions/revoke`
---
#### Added `MONTH_ROLLING` to `trafficLimitStrategy` enum in Subscription response
Affected endpoints:
- `GET /api/sub/{shortUuid}/info`
- `GET /api/subscriptions`
- `GET /api/subscriptions/by-short-uuid/{shortUuid}`
- `GET /api/subscriptions/by-short-uuid/{shortUuid}/raw` (also removed `subLastOpenedAt`, `subLastUserAgent`)
- `GET /api/subscriptions/by-username/{username}`
- `GET /api/subscriptions/by-uuid/{uuid}`
---
#### Removed `tgAuthSettings` from Remnawave Settings
- `GET /api/remnawave-settings` — removed from response
- `PATCH /api/remnawave-settings` — removed from response and request
---
#### RAW subscription response — `rawHosts` replaced with `resolvedProxyConfigs`
`GET /api/subscriptions/by-short-uuid/{shortUuid}/raw` — the `rawHosts` array is replaced with `resolvedProxyConfigs`. The flat host object is now a typed `ResolvedProxyConfig` structure:
- `protocol` + `protocolOptions` (discriminated: `vless` / `trojan` / `shadowsocks`)
- `transport` + `transportOptions` (discriminated: `tcp` / `ws` / `xhttp` / `httpupgrade` / `grpc` / `kcp`)
- `security` + `securityOptions` (discriminated: `tls` / `reality` / `none`)
- `streamOverrides` (`finalMask`, `sockopt`)
- `mux`
- `clientOverrides` (`shuffleHost`, `mihomoX25519`, `serverDescription`, `xrayJsonTemplate`)
- `metadata` (`uuid`, `tag`, `inboundTag`, `configProfileUuid`, `isDisabled`, `isHidden`, `viewPosition`, `remark`, `vlessRouteId`, `rawInbound`, `excludeFromSubscriptionTypes`)
Old flat fields (`password`, `sni`, `alpn`, `fingerprint`, `host`, `network`, `path`, `publicKey`, `shortId`, `spiderX`, `tls`, `rawSettings`, `additionalParams`, `xHttpExtraParams`, `muxParams`, `sockoptParams`, `encryption`, `flow`, `dbData`, etc.) are removed.
---
#### Other changes
- `GET /api/auth/status` — removed required property `tgAuth` from authentication response
- `GET /api/ip-control/fetch-ips/result/{jobId}` — `ips` items type changed from `string` to `object` (`{ ip, lastSeen }`)
- `GET /api/system/health` — replaced `pm2Stats` with `runtimeMetrics`
- `GET /api/system/stats` — removed `cpu/physicalCores`, `memory/active`, `memory/available`
</details>
</ReleaseEntry>
<ReleaseEntry version="2.6.4" date="25 February 2026">
- hotfix: Mihomo and hidden hosts (hidden by default)
- feat: Xray-Json Advanced: `addVirtualHostAsOutbound` [docs](https://docs.rw/docs/learn/xray-json-advanced)
</ReleaseEntry>
<ReleaseEntry version="2.6.3" date="25 February 2026">
- **hotfix: missing host with enabled "Serve Json At The Base Path" and Xray-Json Advanced**
- feat: additional Xray-Json Advanced options: `useHostRemarkAsTag`, `useHostTagAsTag`. [Docs](https://docs.rw/docs/learn/xray-json-advanced)
- feat: special Remnawave directives for Mihomo templates: `remnawave.includeHiddenHosts: true`
- feat: new Hosts option — "Exclude Host From Specific Subscription Types" (Host Card → Advanced)
- feat: new SRR option (responseModifications) — `ignoreServeJsonAtBaseSubscription`
</ReleaseEntry>
<ReleaseEntry version="2.6.2" date="24 February 2026">
- feat: "Xray-Json Advanced" multiple outbounds in client xray-json, [documentation](https://docs.rw/docs/learn/xray-json-advanced)
- feat: view, drop user connections from any nodes (Users → User Card → More Actions → **Show sessions**)
- ...other minor changes
:::warning
Remnawave Node v2.6.0 or higher is required. To access additional features like IP Management — in Remnawave Node `docker-compose.yml` you **must** add under remnanode service:
```yaml
cap_add:
- NET_ADMIN
```
:::
</ReleaseEntry>
<ReleaseEntry version="2.6.1" date="16 February 2026">
- feat: add `ignoreHostXrayJsonTemplate` flag in Response Rules (SRR)
- fix: dynamic outline conf
- feat: separate page for snippets
</ReleaseEntry>
<ReleaseEntry version="2.6.0" date="30 January 2026">
- New webhook event: `service.subpage_config_changed`. Emitted when subpage config created, updated or deleted.
- Bulk actions for Nodes, endpoint: [/api/nodes/bulk-actions](https://docs.rw/api/#tag/nodes-controller/POST/api/nodes/bulk-actions)
</ReleaseEntry>
<ReleaseEntry version="2.5.7" date="21 January 2026">
- Generic Oauth2 auth method
</ReleaseEntry>
<ReleaseEntry version="2.5.6" date="21 January 2026">
- NodeJS v24
- Fix: bulk and cron reset user traffic
</ReleaseEntry>
<ReleaseEntry version="2.5.5" date="17 January 2026">
- hotfix: bulk revoke subscription
</ReleaseEntry>
<ReleaseEntry version="2.5.4" date="17 January 2026">
- add KeyCloak as OAuth2 Provider
- add Prizrak-Box to extended Mihomo Clients
- Fix: OpenAPI schema date formats in bandwidth-stats route
</ReleaseEntry>
<ReleaseEntry version="2.5.3" date="9 January 2026">
- frontend: fix Config & Inbound selection in Node creation card
- backend: fix Xray-json additional host properties
</ReleaseEntry>
<ReleaseEntry version="2.5.2" date="8 January 2026">
- Backend: hotfix for empty overrides in external squads
- Frontend: config profile selection in Node Card
</ReleaseEntry>
<ReleaseEntry version="2.5.1" date="7 January 2026">
- Hotfix: default custom remarks for External Squads
</ReleaseEntry>
<ReleaseEntry version="2.5.0" date="7 January 2026">
- `scope` in webhook, OpenAPI models for webhook, refer to updated [docs](https://docs.rw/docs/features/webhooks)
- [API changes](https://docs.rw/blog/api-changelog/v244-v250)
- Custom remarks for: HWID Max Devices Exceeded, HWID Not Supported
- Template Variables support in `maxDevicesAnnounce`
- Revoke subscription: allow to revoke only connection passwords
- ...other minor UI changes
:::warning
Recommended Node version — **v2.5.0**.
:::
</ReleaseEntry>
<ReleaseEntry version="2.4.4" date="22 December 2025">
- Subpage Builder: clone App, enhanced subpage config import, other UI fixes
</ReleaseEntry>
<ReleaseEntry version="2.4.3" date="20 December 2025">
- Move some of .env variables to Subpage Builder: `META_TITLE`, `META_DESCRIPTION`, `SUBSCRIPTION_UI_DISPLAY_RAW_KEYS`
</ReleaseEntry>
<ReleaseEntry version="2.4.2" date="20 December 2025">
- iOS Modal/Drawer header offset
- Fix: Subpage Config — appname validation
- ...other minor UI fixes
</ReleaseEntry>
<ReleaseEntry version="2.4.0" date="20 December 2025">
:::warning
Always make **backup** before updating.
:::
- **New UI**: all charts across dashboard (Nodes → Statistics, Node Card → Show usage, User Card → Show usage)
- **API Changes**: refactor stat routes. Before updating check up [API Changelog](https://docs.rw/blog/api-changelog/v232-v240)
- Brand new **Subscription Page Builder**. New app-config format, full i18n with builder, separate app-configs for external squads and much more.
- ...other minor changes
</ReleaseEntry>
<ReleaseEntry version="2.3.2" date="9 December 2025">
- HWID Inspector: HWID top users table
- **Rescue CLI**: truncate (clean all data) from HWID or SRH tables (`docker exec -it remnawave cli`)
- Fix: adjust time ranges for "Online Now" badge (60s → 30s)
- ...other: restore Internal Squads in Telegram notifications, correct OpenAPI schema for "Encrypt Cryptolink" endpoint
</ReleaseEntry>
<ReleaseEntry version="2.3.1" date="8 December 2025">
- New: [fine-tuned notifications](https://docs.rw/docs/features/fine-tuned-notifications)
- Fix: empty `/api/subscription` response
- Fix: bulk reset race condition
</ReleaseEntry>
<ReleaseEntry version="2.3.0" date="7 December 2025">
:::warning
Обязательно сделайте бекап перед обновлением. Обновление содержит серьёзные изменения в API.
:::
Версия панели (2.3.0) требует обновить ноды до версии 2.3.0.
**Основные изменения:**
- Полный контроль flow для VLESS-инбаундов
- Внешние сквады: переопределение настроек HWID, переопределение «примечаний» (по статусам)
- Возможность изменить порядок: внутренние сквады, внешние сквады, профили, шаблоны
- Поддержка balancers в сниппетах
- Табличный вид отображения списка нод
- ZSTD-сжатие конфига перед отправкой на ноды
- Новая `.env` переменная — `REDIS_SOCKET` (подключение Redis/Valkey через unix-сокет)
- Выбрать индивидуальный Xray-Json для каждого хоста (на основе шаблонов)
- Исключить хост из определённых внутренних сквадов
- «Теги» для нод (можно указать несколько тегов)
- Массовое изменение активного профиля/инбаундов у нод (мультивыбор)
- Новая `.env` переменная: `USER_USAGE_IGNORE_BELOW_BYTES`
- Новая `.env` переменная: `SERVICE_DISABLE_USER_USAGE_RECORDS`
- Рефактор: очереди, фоновые задачи, оптимизация таблиц в базе данных
- ...прочие QoL изменения и исправления
</ReleaseEntry>
<ReleaseEntry version="2.2.6" date="6 November 2025">
- Override response headers with External Squads
- Add gRPC support
- Branding: set colored brand name
- Webhook URL: now supports multiple URLs (separated by commas)
- Users table: filtering, search by External Squad
- Fix: iOS floating header
- Fix: missing background in Metrics
- ...other minor changes
</ReleaseEntry>
<ReleaseEntry version="2.2.5" date="2 November 2025">
- Hotfix: missing host creation button (if there is no hosts)
</ReleaseEntry>
<ReleaseEntry version="2.2.4" date="2 November 2025">
- Fix: Xray Json (Serve at base path) incorrect template response
- Fix: VLESS Encryption — incorrect decryption parsing logic
- New: Vazirmatn font for Persian language and Noto Sans SC for Chinese
- New: Host overrides in External Squads
- New: Reset Node Traffic
- More strict passkey (register + auth) settings
- **New: help action button with detailed articles on Hosts, Config Profiles, Internal and External Squads sections**
- New: view computed Config Profile (Config Profile + applied snippets)
- Monkey patch incorrect **serverNames** array before saving changes
- Refactor some layouts in frontend
- ...other minor changes
</ReleaseEntry>
<ReleaseEntry version="2.2.3" date="27 October 2025">
- Hotfix: `/json` — incorrect response body
:::warning
In previous versions, when HWID was enabled, the panel forcibly removed the **profile-web-page-url** header, which is responsible for displaying the subscription link in client applications. This behavior from the panel has proven to be incorrect in practice. In this version, Remnawave will no longer forcibly hide this header when HWID is enabled.
**If you're using HWID together with a crypto link (Happ), don't forget to disable the display of this header in the Subscription → Settings section. Look for the "Profile Webpage URL" option.**
:::
</ReleaseEntry>
<ReleaseEntry version="2.2.2" date="26 October 2025">
- Hotfix: 5xx errors while updating user **by username**
- Fix: Incorrect response content type with "serve json at base path" option (or /json)
- More clear errors while adding passkey device
</ReleaseEntry>
<ReleaseEntry version="2.2.0" date="26 October 2025">
Крупнейшее обновление с момента выхода v2.x.
[→ Ознакомиться с описанием обновления](https://telegra.ph/Remnawave-v220-10-25) **[RU]**
</ReleaseEntry>
<ReleaseEntry version="2.1.19" date="12 October 2025">
- **Infra Billing:** Multiselect in Infra Billing Nodes table (quickly change next billing date for multiple nodes)
- **Infra Billing:** Quick update billing date button (move node to the next billing cycle with one click)
- **Infra Billing:** Update Infra Billing Node request schema changed
- Fix: Hosts, Nodes cards margins in mobile view
</ReleaseEntry>
<ReleaseEntry version="2.1.18" date="11 October 2025">
- Add support for **mldsa65Seed** & verify
- **Add full support for Vless Encryption**
- Fix: incorrect boolean assignment in **ais** (base64)
- Return **serverDescription** for **FlClashX**
- Fix: ALPN in xray-json
- **Add option to link nodes to Hosts** (visual assignment only)
- Frontend: new keypairs generators: MLDSA65, ML-KEM768
- Frontend: fix incorrect squads assignment in bulk actions
- Frontend: Host card now inside Drawer (instead of Modal)
</ReleaseEntry>
<ReleaseEntry version="2.1.17" date="2 October 2025">
- Frontend: fix incorrect loader position
- Frontend: fix aggressive reloads
</ReleaseEntry>
<ReleaseEntry version="2.1.16" date="30 September 2025">
- Backend: added new object to GetSubscriptionRequestHistoryStats response
- Frontend: hide header with scroll
- Frontend: SRH Inspector — new chart
</ReleaseEntry>
<ReleaseEntry version="2.1.15" date="29 September 2025">
- Main title and logo customization, new .env params: `BRANDING_TITLE`, `BRANDING_LOGO_URL`
- Small UI fixes in Subscription Request History drawer
- New: shuffleHost, mihomoX25519 in Host Card
- Add UUID column to Users table (search, sorting)
- Allow spaces in Config Profile and Internal Squad names
</ReleaseEntry>
<ReleaseEntry version="2.1.14" date="23 September 2025">
- fix: telegramId incorrect search behaviour
- fix: cleanup subscription request history
- fix: incorrect link in profile-webpage-url header
- allow to update user by username
- allow to pass own UUID in user creation
- update Happ CryptoLink to v3
</ReleaseEntry>
<ReleaseEntry version="2.1.13" date="15 September 2025">
- **HWID Inspector**, view stats for your HWID devices, full featured table (list, search, sort, filter) available
- API endpoint: [Get all HWID devices](https://remna.st/api/#tag/hwid-user-devices-controller/get/api/hwid/devices)
- API endpoint: [Get HWID Device stats](https://remna.st/api/#tag/hwid-user-devices-controller/get/api/hwid/devices/stats)
- fix: ip parsing in subscription requests
</ReleaseEntry>
<ReleaseEntry version="2.1.12" date="15 September 2025">
- Minor UI fixes in frontend
- [New webhook events related to HWID devices (added, deleted)](https://github.com/remnawave/backend/blob/main/libs/contract/constants/events/events.ts#L21)
- add allowInsecure to Host
- add User Subscription Request History, up to 24 latest records will be stored
- [new API endpoint to delete all user HWID devices](https://remna.st/api/#tag/hwid-user-devices-controller/post/api/hwid/devices/delete-all)
</ReleaseEntry>
<ReleaseEntry version="2.1.9" date="6 September 2025">
- Restore curl in Dockerfile
</ReleaseEntry>
<ReleaseEntry version="2.1.8" date="3 September 2025">
**Backend:**
- `/api/system/tools/x25519/generate` — generate 30 x25519-keypairs
- Bulk Actions now supports mass HWID modifications
- `/raw` subscription schema and path changed. New path: `/api/subscriptions/by-short-uuid/{shortUuid}/raw`
- Node version downgraded to 22.18.0
- Change memory allocator from jemalloc to mimalloc
- Upgrade deps (PrismaORM 6.15.0, etc)
**Frontend:**
- Queues (sidebar) now hidden by default. Toggle: `Cmd/Ctrl + Shift + J`
- Fix incorrect tag assignment in Host card section
- Add supports for HWID mass actions
</ReleaseEntry>
<ReleaseEntry version="2.1.7" date="30 August 2025">
- new endpoints in [Subscriptions Controller](https://remna.st/api#tag/subscriptions-controller): get subscription info by short uuid and by uuid.
</ReleaseEntry>
<ReleaseEntry version="2.1.6" date="29 August 2025">
:::warning
`/raw` subscription route response changed.
Previous: `{ "user": {}... }`
New: `{ "response": { "user": {}... } }`
:::
- fix: subscription link is not shown with HWID enabled (only for admin dashboard)
- fix: infra billing incorrect ranges
- fallback hosts (expired, limited, disabled) now use vless instead of trojan
- refactor: change infra billing notifications texts
- minor UI fixes in frontend
</ReleaseEntry>
<ReleaseEntry version="2.1.5" date="26 August 2025">
- Hotfix for incorrect migration behaviour on clean database
</ReleaseEntry>
<ReleaseEntry version="2.1.4" date="26 August 2025">
**Backend:**
- Add indexes to database
- Add **tId** for internal use (speed up config generation & pagination)
- Add option to **force** restart all nodes (Xray Core restart guaranteed, hash-checking will be skipped)
- raw subscription keys will not be returned anymore in `/info` route if HWID enabled
- add _bytes_ response in `/info` and `browser-json` of subscription
- fix bug with `@nestjstools/messaging`, which was cause of memory leak with Redis/Valkey
- Redis/Valkey DB will be completely flushed with panel start
- Stash Subscription Generator now uses MihomoService under hood (allows Vless Reality with Stash)
- Add `UTC` mark in Telegram notifications
- **Add support for coming Vless-Route** option in Xray Core
- Fix: clearing clients array from Xray Config before adding users
- Fix: HWID Devices was not registered in database if HWID Detection is off for specific user
- GetAllInbounds, GetInboundByProfileUuid — now returns activeSquads uuids
**Frontend:**
- Fix: input in Host card resets between tabs
- Add unsaved changes warnings in Config Profile editor
- Modify Restart all nodes action button, add modal with restart type selection (graceful, force)
- Add _Inbounds With Active Squads_ drawer in Config Profiles section
- Minor UI improvements and fixes
</ReleaseEntry>

View File

@@ -0,0 +1,168 @@
---
sidebar_position: 3
title: Subscription Page
description: 'Changelog for Remnawave Subscription Page'
hide_title: true
hide_table_of_contents: true
---
# Subscription Page
<ReleaseEntry version="7.1.8" date="8 March 2026">
### New features
`MARZBAN_LEGACY_DROP_REVOKED_SUBSCRIPTIONS` .env variable.
`true` drop requests from legacy subscription urls, if `subRevokedAt` field is not `null` (subscription was revoked at least once).
`false` - **default** value, the same behavior as before.
</ReleaseEntry>
<ReleaseEntry version="7.1.7" date="30 January 2026">
- Pass multiple Marzban Secret keys
```
MARZBAN_LEGACY_SECRET_KEY=key1,key2,key3
```
:::warning
Minimum panel version — v2.5.x or higher
:::
</ReleaseEntry>
<ReleaseEntry version="7.1.6" date="21 January 2026">
- Bump NodeJS to v24.13
- ...other minor changes
:::warning
Minimum panel version — v2.5.x or higher
:::
</ReleaseEntry>
<ReleaseEntry version="7.1.4" date="17 January 2026">
- change health check endpoint
- add additional headers to ignore
- fail fast on invalid subpage config during startup
:::warning
Minimum panel version — v2.5.x or higher
:::
</ReleaseEntry>
<ReleaseEntry version="7.1.2" date="11 January 2026">
- hotfix: headers
</ReleaseEntry>
<ReleaseEntry version="7.1.1" date="11 January 2026">
- fix: remove headers filtering
</ReleaseEntry>
<ReleaseEntry version="7.1.0" date="7 January 2026">
- Hide `Get Link` (Show QR) button via subpage config
- New button types: `HAPP_CRYPT3_LINK`, `HAPP_CRYPT4_LINK`
</ReleaseEntry>
<ReleaseEntry version="7.0.7" date="28 December 2025">
- Fix: iOS18 cards
- Fix: Scrollbar for language selector
</ReleaseEntry>
<ReleaseEntry version="7.0.5" date="22 December 2025">
- New: **App Icons**
</ReleaseEntry>
<ReleaseEntry version="7.0.4" date="20 December 2025">
- Move some of .env variables to Subpage Builder: `META_TITLE`, `META_DESCRIPTION`, `SUBSCRIPTION_UI_DISPLAY_RAW_KEYS`
</ReleaseEntry>
<ReleaseEntry version="7.0.3" date="20 December 2025">
- Fix: fallback platform selection
</ReleaseEntry>
<ReleaseEntry version="7.0.0" date="20 December 2025">
:::warning
v7.0.0 (or higher) requires Remnawave v2.4.0 (or higher).
**Breaking change**: API token now is required.
.env variable: `REMNAWAVE_API_TOKEN`.
:::
- New app-config format
- Dynamic App Config loading from Remnawave
- Disable/enable any languages as you want. English now is not necessary.
- Add as many blocks as you want, customize svg icons and more. **Check up Subscription Page Builder in Remnawave.**
</ReleaseEntry>
<ReleaseEntry version="6.4.2" date="11 December 2025">
- Fonts: Vazirmatn for Persian, NotoSans SC for Chinese
</ReleaseEntry>
<ReleaseEntry version="6.4.1" date="10 December 2025">
- Display **Connection Keys** on Subscription Page
:::info
This feature is **disabled by default**. It must be enabled via .env/environment variables.
Checkout docs: [Display Raw Keys](https://docs.rw/docs/install/subscription-page/display-raw-keys)
:::
</ReleaseEntry>
<ReleaseEntry version="6.4.0" date="9 December 2025">
- New design
</ReleaseEntry>
<ReleaseEntry version="6.3.0" date="7 December 2025">
- Part of Remnawave v2.3.0 release
</ReleaseEntry>
<ReleaseEntry version="6.1.0" date="24 November 2025">
- Add French language support
- Add "Check Panel connection on application start"
- Log panel url and custom_sub_prefix on application start for debug purposes
- ...other minor changes
</ReleaseEntry>
<ReleaseEntry version="6.0.6" date="15 September 2025">
- Small fixes for IP Address parsing and handling
- Add support for **Cloudflare Zero Trust** auth, new .env variables:
```
CLOUDFLARE_ZERO_TRUST_CLIENT_ID=""
CLOUDFLARE_ZERO_TRUST_CLIENT_SECRET=""
```
</ReleaseEntry>

79
docs/clients.mdx Normal file
View File

@@ -0,0 +1,79 @@
---
sidebar_position: 8
title: 📱 Clients
hide_title: true
hide_table_of_contents: true
description: 'A comprehensive list of proxy clients that work with Remnawave across all platforms - Android, iOS, Windows, macOS, and Linux. Find the perfect client for your needs.'
image: '/clients/clients-preview.webp'
---
<HeroSection
title="Clients"
subtitle="A comprehensive list of proxy clients that work with Remnawave. Choose the best client for your platform and preferred proxy core."
/>
<CategoryNav
categories={[
{ id: 'android', icon: '📱', title: 'Android' },
{ id: 'windows', icon: '💻', title: 'Windows' },
{ id: 'ios', icon: '🍎', title: 'iOS' },
{ id: 'macos', icon: '👛', title: 'macOS' },
{ id: 'linux', icon: '🐧', title: 'Linux' }
]}
/>
<CategorySection
id="android"
title="Android"
description="Proxy clients for Android devices"
icon="📱"
columns={3}
>
<ClientsList platform="android" />
</CategorySection>
<CategorySection
id="ios"
title="iOS"
description="Proxy clients for iOS devices"
icon="🍎"
columns={3}
>
<ClientsList platform="ios" />
</CategorySection>
<CategorySection
id="windows"
title="Windows"
description="Proxy clients for Windows"
icon="💻"
columns={3}
>
<ClientsList platform="windows" />
</CategorySection>
<CategorySection
id="macos"
title="macOS"
description="Proxy clients for macOS"
icon="👛"
columns={3}
>
<ClientsList platform="macos" />
</CategorySection>
<CategorySection
id="linux"
title="Linux"
description="Proxy clients for Linux"
icon="🐧"
columns={3}
>
<ClientsList platform="linux" />
</CategorySection>
---
### Notice
This list is community-maintained. If you find any broken links or want to add a client, please open a PR on GitHub.

Some files were not shown because too many files have changed in this diff Show More