Сравнение с Remnawave
GoWave заменяет бэкенд Remnawave и держит его API. Различия в том, как он устроен внутри и что добавлено сверху.
| GoWave | Remnawave | |
|---|---|---|
| Язык | Go | TypeScript (Node.js) |
| Процессы | Один | Три: API, обработчики очередей, планировщик |
| База данных | SQLite или PostgreSQL | PostgreSQL и Valkey (Redis) |
| Память под нагрузкой | около 60 МБ | около 1 ГБ |
| Готовность API после запуска | 0,21 с | 7,1 с |
| API | Все 218 команд @remnawave/backend-contract 3.4.15 |
Эталон |
| Веб-интерфейс | Интерфейс Remnawave | Свой |
| Ноды | Go-нода и remnawave/node |
remnawave/node, Go-нода тоже подключается |
| Установка | Установщик одной командой, бинарник или Docker | Docker Compose |
| Обновление | Кнопкой в панели (systemd) или docker compose pull |
docker compose pull |
Память и время запуска измерены на одинаковом стенде, методика на странице бенчмарков.
Что есть только в GoWave
Заголовок раздела «Что есть только в GoWave»- Работа без Docker: один бинарник и база SQLite.
- Установщик, который сам настраивает HTTPS и переносит данные с Remnawave и PasarGuard.
- Переход с SQLite на PostgreSQL одной командой с откатом при ошибке.
- Перенос из PasarGuard.
Что работает иначе
Заголовок раздела «Что работает иначе»- Регулярные выражения в правилах ответа и шаблонах работают в синтаксисе RE2 (Go), а не JavaScript. Lookahead, lookbehind и обратные ссылки не поддерживаются. Правило Remnawave с такими конструкциями в GoWave перестанет совпадать.
- Обновление в Docker не запускается из панели: она показывает команду для сервера, см. обновление.
Что совместимо
Заголовок раздела «Что совместимо»- API. Эндпоинты, форматы запросов и ответов, коды ошибок и статусы соответствуют
@remnawave/backend-contract. Веб-интерфейс - фронтенд Remnawave. - Подписки. Выдача для Xray JSON, Mihomo, sing-box, base64 и остальных клиентов сверяется с эталонным выводом оригинального бэкенда.
- Ноды. Оригинальная нода
remnawave/nodeи Go-нода. - Страница подписки
remnawave/subscription-page. - Боты и интеграции, которые ходят в API Remnawave по токену.
Что GoWave добавляет к API
Заголовок раздела «Что GoWave добавляет к API»Эндпоинты сверх контракта нужны веб-интерфейсу GoWave, клиенты и боты Remnawave их не вызывают. В справочнике API они собраны в разделе GoWave extensions:
GET /api/nodes/traffic-summary- трафик каждой ноды за всё время, ежемесячный сброс его не обнуляет;GET /api/nodes/{uuid}/logs,GET /api/nodes/{uuid}/updatesиPOST /api/nodes/{uuid}/updates/apply- логи и обновление Go-ноды;GET /api/system/updates/checkиPOST /api/system/updates/apply- обновление панели на systemd;POST /api/system/actions/restore- восстановление из бэкапа.
В PATCH /api/nodes есть поле trafficTrackingStart, которого нет в контракте. Оно задаёт, с чего начнётся счётчик, когда обновление включает учёт трафика: keep оставляет накопленное с последнего сброса (так делает Remnawave), zero начинает с нуля, period пересчитывает текущий период по истории.
Вход через Яндекс удалён. Поля yandex в настройках OAuth остались ради совместимости с контрактом, но провайдер всегда выключен, а сохранённые ключи панель отбрасывает.
Как это проверяется
Заголовок раздела «Как это проверяется»- Тесты сверяют список маршрутов с контрактом и проверяют реальные ответы обработчиков JSON-схемами контракта - на SQLite и на PostgreSQL, в каждом CI.
- Вывод подписок сравнивается с зафиксированными эталонами, снятыми с оригинального бэкенда.
Где что описано
Заголовок раздела «Где что описано»Подписки GoWave описаны здесь: правила ответа, шаблоны Xray JSON, Mihomo и sing-box, переменные. Профили конфигурации устроены как обычные конфиги Xray, поэтому протоколы и транспорты настраиваются по документации Xray.