An unofficial community Go implementation of the Remnawave node for xray-core. Manages xray-core lifecycle, users, traffic statistics, and IP blocking through a REST API.
⚠️ Warning: This is an unofficial community realization of remnawave-node. It is not affiliated with the official Remnawave team. Use at your own risk.
| remnawave/node | remnawave-node-go | |
|---|---|---|
| Language | TypeScript (NestJS) | Go |
| Runtime | Node.js / Bun | Native binary |
| RAM (idle) | ~109 MB | ~70 MB |
| Docker image | ~490 MB | ~79 MB |
| xray-core | Bundled binary + geodata in image | Compiled as Go library* |
| Architecture | Microservice (NestJS + supervisord) | Single static binary |
| Status | Official | Unofficial (community) |
* xray-core is compiled directly into the binary as a Go library. Only geodata files (
geoip.dat,geosite.dat) are downloaded on first start and cached in the Docker volume for subsequent starts.
| Variable | Required | Default | Description |
|---|---|---|---|
SECRET_KEY |
Yes | — | Base64-encoded payload generated by the Remnawave panel. |
NODE_PORT |
No | 2222 |
Main HTTPS server port (mTLS + JWT auth) |
INTERNAL_REST_PORT |
No | 61001 |
Internal HTTP server port (localhost only) |
LOG_LEVEL |
No | info |
Log level: debug, info, warn, error |
SECRET_KEY=<your-base64-encoded-secret-key>
NODE_PORT=2222
INTERNAL_REST_PORT=61001
LOG_LEVEL=infodocker run -d \
--name remnawave-node-go \
--network host \
--restart unless-stopped \
-e SECRET_KEY=<your-secret-key> \
-v xray-geodata:/usr/local/share/xray \
hteppl/remnawave-node-go:latestCreate a .env file (see example above), then:
docker compose up -ddocker-compose.yml:
services:
remnawave-node-go:
image: hteppl/remnawave-node-go:latest
container_name: remnawave-node-go
restart: unless-stopped
network_mode: host
env_file:
- .env
volumes:
- xray-geodata:/usr/local/share/xray
volumes:
xray-geodata:# Follow logs
docker logs -f remnawave-node-go
# Last 100 lines
docker logs --tail 100 remnawave-node-go
# With timestamps
docker logs -t remnawave-node-goTo get more detailed logs, set LOG_LEVEL=debug in your .env file and restart the container.
You can retrieve the current xray config from the internal REST API:
# Print config to stdout
curl -s http://127.0.0.1:61001/internal/get-config | jq
# Save config to file
curl -s http://127.0.0.1:61001/internal/get-config | jq > config.json# Stop
docker compose down
# Restart
docker compose restart
# Update to latest version
docker compose pull && docker compose up -d- Remnawave — for the original panel and node ecosystem
- W-Nana/remnawave-node-go — for the original codebase of this project
This project is licensed under the AGPL-3.0 license.
