NoxVR Bot is a load-testing tool written in Rust that connects to NoxVR relay servers over QUIC, simulating real players to benchmark and stress-test game instances.
- QUIC transport — encrypted, low-latency connections via
quinn - Configurable bot count — spawn any number of concurrent simulated players
- Multiple movement patterns — circular, random teleport, square
- Voice playback & capture — send
.opusfiles or listen to incoming audio - RSA authentication — reuses the NoxVR client credentials
- Graceful shutdown — clean teardown on
Ctrl+C
The easiest way to run the bot is with Docker Compose:
- Configure the target instance in a
.envfile - Place your Nox credentials in the correct folder
- Run
docker compose up
- Docker + Docker Compose v2 installed
- Nox credentials (generated by the Nox client when you log in to an account)
Copy .env.example to .env and adjust the values:
# Instance to join: <instance_id>@<server>
[email protected]
# Mode: 'listen' (receive + play voice) or 'play' (send an .opus file)
NOX_MODE=listen
# Bot index that listens (MODE=listen)
NOX_LISTEN_ID=0
# Connect as a regular user (skips the AUTHORIZE_BOT check)
NOX_HUMAN=1
# Number of bots / movement mode
NOX_COUNT=1
NOX_MOVEMENT=none
# Log level
NOX_RUST_LOG=info,noxbot=debug,noxrelay=info,nox_api=debug
⚠️ .envholds your local configuration: do not commit it. It is already listed in.gitignore.
The bot needs 3 files, normally generated by the Nox client when you log in:
config.json— account configurationpublic_key.pem— RSA public keyprivate_key.pem— RSA private key
Expected config.json format:
{
"server": "hactazia.fr",
"servers": {
"hactazia.fr": {
"user_id": 12345,
"gateway": "https://hactazia.fr",
"_token": "..."
}
}
}The
serverfield must match the part after the@inNOX_INSTANCE(e.g.[email protected]→server=hactazia.fr).
The folder location depends on your OS:
| OS | .nox folder |
|---|---|
| Windows | %APPDATA%\.nox → C:\Users\<user>\AppData\Roaming\.nox |
| Linux | ~/.config/nox |
- Make sure Docker Desktop (with WSL 2) is installed.
- Make sure your credentials are in
C:\Users\<user>\AppData\Roaming\.nox. - From the project root:
docker compose up --buildThe Windows mount is already configured in docker-compose.yml:
volumes:
- $APPDATA/.nox:/nox:ro # windows- Make sure Docker and the Compose plugin are installed.
- Make sure your credentials are in
~/.config/nox. - Edit
docker-compose.yml: comment the Windows line and uncomment the Linux line:
volumes:
# - $APPDATA/.nox:/nox:ro # windows
- $HOME/.config/nox:/nox:ro # linux- Start the bot:
docker compose up --buildTo hear --listen audio through the host speakers, uncomment the devices section in docker-compose.yml:
devices:
- /dev/snd:/dev/snd- Run in the background — uncomment
restart: unless-stoppedor rundocker compose up -d. - View logs —
docker compose logs -f. - Stop —
docker compose down.
# Development build
cargo build
# Release build (optimized)
cargo build --release
# Run
cargo run --release --bin noxbot -- --count 10 --movement circularrelay/— QUIC relay client librarytest/— load-testing application (noxbotbinary)api/— API client
