End-to-end encrypted text, voice, file, and video communication for the original Xbox - and desktop PCs.
v0.6.0.0 public beta Β· Built with NXDK Β· Privacy by Design
XNET turns a retail original Xbox into a secure communicator. Up to four consoles - or a mix of consoles and PCs (Windows, macOS, or Linux) - can chat, talk, send files, and see each other on camera, all encrypted end-to-end and routed through a relay that cannot read message content.
β Runs on a stock, unmodified 64 MB retail Xbox. No RAM upgrade, no developer hardware, no special revision required. If your console runs homebrew, it runs XNET - camera video included.
This release adds a desktop PC client and stabilizes USB/camera behavior on the console at boot and in the menu.
- XNET PC Client. A cross-platform GUI client (
pc-client/) joins the same encrypted sessions as Xbox consoles - text chat, voice, Secure Transfer, and Secure Video. Windows: standalone release viabuild.bat(XNET-PC.exe). macOS and Linux: run from source with Python 3.10+ (seepc-client). - Deferred Secure Video camera init. The EyeToy / Xbox camera driver now claims the device at USB enumeration but does not start the sensor or isochronous stream until you enter a Secure Video session. Boot and the main menu stay quiet even with a camera plugged in.
- USB stability at boot and in the menu. Fixes startup lockups with a camera connected but no Communicator present, and crashes when hot-plugging a Communicator after boot without one attached at power-on.
- Settings cleanup (console). The development Camera Test entry was removed from Settings in v0.4.5.5; Secure Video is unchanged and is started from VIDEO CHAT on the main menu.
π Connect out of the box (console). The Xbox release includes an
xnet.cfgalready pointed at a live public relay - flash, launch, and create or join a room. The relay blindly forwards encrypted packets and stores nothing. Prefer your own relay? Change it in Settings any time.
Compatibility: The PC client implements the same v0.5+ wire format as the console (AES-128-CBC + HMAC-SHA-256, synthetic IVs, anti-replay, relay-generated session nonces). Xbox consoles, the PC client, and the relay in a room must all be on v0.5.0 or later (v0.6.0.0 recommended). v0.4.x does not interoperate.
- Encrypted text chat - type from an on-screen keyboard (Xbox) or PC GUI.
- Real-time voice chat - open-mic voice over an Xbox Communicator or Hawk adapter and headset (Xbox); PC microphone via PyAudio.
- Secure video chat - live camera video from a PS2 EyeToy or Xbox camera (Xbox), or a PC webcam; up to four tiles.
- Encrypted file transfer - send files console-to-console or PC β Xbox.
- Desktop PC client - full session client for chat, voice, transfer, and video on Windows (release build), macOS, and Linux (from source).
- Authenticated encryption - AES-128-CBC with HMAC-SHA-256 (encrypt-then-MAC, verified before decryption).
- Per-packet IVs + replay protection - a unique IV on every packet and a sliding-window sequence check that rejects replayed traffic.
- Zero-knowledge relay - the server blindly forwards encrypted packets and stores nothing.
- Zero persistence - rooms live only in memory and vanish when they end. No accounts, no friend lists, no cloud, no logs on the relay.
- Built for the hardware - fits and runs on a stock 64 MB console at 640Γ480.
- An original Xbox capable of running homebrew (softmod, modchip, or TSOP).
- 64 MB of RAM - i.e. a completely stock console. A 128 MB debug/dev console works too, but is not required.
- A network connection (wired Ethernet; DHCP).
| Platform | Requirements |
|---|---|
| Windows | Windows 10/11 (64-bit). Release build needs no Python install. |
| macOS / Linux | Python 3.10+, Tk, PortAudio (for PyAudio). See pc-client. |
All platforms: microphone and speakers (PyAudio) for voice; webcam (OpenCV) for Secure Video; same relay as the console (configurable in Settings).
| Feature | Hardware (Xbox) | Hardware (PC) |
|---|---|---|
| Text + files | Controller only | Keyboard / mouse |
| Voice | Xbox Communicator headset (045E:0283) - retail or Hawk; works with headsets like the Xbox 360 headset or a Logitech Pro X | Microphone + speakers |
| Video | PS2 EyeToy (silver US, 054C:0155) or the Japanese Xbox Video Camera (045E:028C) | Webcam (Secure Video menu) |
You can mix Xbox and PC peers in one room - a PC with only a headset can join video and participate by voice; a console with only a camera will be seen but silent.
XNET routes traffic between consoles through a relay (consoles never connect
directly, so no one learns anyone else's IP). The release ships with a public
relay already configured in xnet.cfg, so you don't need to set anything up to
get started. You can point at a different relay or host your own any time - see
Hosting a Relay below.
- Build
default.xbe(see Building from Source) or grab a release build. - FTP the XNET folder to your console (for example under
E:\Apps\XNET\). - The release includes an
xnet.cfgnext todefault.xbe(theD:launch directory at runtime), already pointed at a public relay - keep it as-is to connect immediately, or edit it to use your own relay. See Configuration. - Launch XNET from your dashboard.
Windows
- Open a terminal in
pc-client/. - Run
run.bat(creates a venv, installs dependencies, launches the client) or build a standalone exe withbuild.bat.
macOS / Linux
- Open a terminal in
pc-client/. - Create a venv, install dependencies, and launch - see
pc-client.
Use the same relay and room token as an Xbox peer. For Secure Video on Xbox, peers must use VIDEO CHAT β JOIN (chat rooms ignore video packets).
On boot, XNET mounts the drives, brings up USB and networking, and drops you at
the main menu. A log is written to E:\Dashboard\system\xnet.log.
XNET reads xnet.cfg from its launch directory (D:\xnet.cfg) at boot. The
release ships with this file already pointed at a public relay, so it works
untouched - the example below just shows the format if you want to change
anything. All keys are optional (anything omitted falls back to a built-in
default), and everything here can also be changed in-app from the Settings
screen, which writes the file back for you.
relay=your.relay.host.or.ip # bundled cfg ships with a public relay pre-set
port=7777
mic_gate=50000
mic_gain=100
debug_log=0| Key | Meaning |
|---|---|
relay |
Relay hostname or IP (bundled cfg ships with a public relay) |
port |
Relay port (default 7777) |
mic_gate |
Voice activation threshold; 0 = open mic (always transmit) |
mic_gain |
Mic input gain in percent (25β200); lower it if a hot mic distorts |
debug_log |
1 enables verbose per-frame logging for bug reports |
From the main menu:
- CREATE ROOM - generates a room token and waits for others to join.
- JOIN ROOM - type a room token to enter an existing room.
- VIDEO CHAT - start or join a Secure Video session (camera tiles + voice).
- FILE TRANSFER - send or receive a file with another console.
- SETTINGS - relay, mic, and diagnostics (below).
- ABOUT - version and project info.
- QUIT - return to the dashboard.
The room token is the secret. Anyone who has it can join the room and decrypt everything in it, so share tokens only over a channel you already trust, and prefer long, unpredictable ones.
Voice is open-mic - just talk; there's no push-to-talk. In a video session your own tile shows a live MIC ON / TALKING / NO MIC indicator so you can confirm you're transmitting.
- RELAY IP / RELAY PORT - edit the relay you connect to (saved to
xnet.cfg). - MIC SENSITIVITY - how loud you must be to transmit. A live meter shows your level against the gate; speak and watch the bar cross the line.
- MIC GAIN - input volume (25β200%). If the meter shows CLIP while you talk normally, lower the gain. (Great for hot headset mics like a Pro X.)
- DEBUG LOGGING - turn on a full diagnostic trace for bug reports, off for normal use.
XNET is built with the NXDK toolchain.
# install and set up NXDK first (see the NXDK docs), then:
export NXDK_DIR=/path/to/nxdk
cd _src
makeThe build produces bin/default.xbe. The boot build: timestamp is regenerated
automatically on every build, so it always reflects the current binary. The
relay is a single Node.js file in _src_relay/. The PC client lives in
pc-client/ (Python 3.10+, CustomTkinter).
The relay (xnet-relay.js) is a small Node.js server. It is a blind
forwarder: it moves encrypted packets between the consoles in a room and
stores nothing.
node xnet-relay.js # listens on port 7777 by defaultRun it on any always-on host (a small VPS is plenty), point your consoles'
relay/port at it, and you're done. See Recommendations for Relay
Operators in the security docs for hardening notes. Please don't add content
logging - the zero-knowledge design is the point.
XNET encrypts all text, voice, video, and file content end-to-end with AES-128-CBC and authenticates every packet with HMAC-SHA-256 (encrypt-then-MAC, verified before decryption). As of v0.5+, every packet also carries a unique per-packet IV - derived deterministically from its authenticated header - and a sequence number checked against a per-sender sliding window that rejects duplicated or replayed packets. Session keys are derived locally from the room token and are never transmitted as keys; the relay forwards ciphertext only and does not hold a session key.
It is honest, hobbyist software for 24-year-old hardware - not an audited, high-threat tool. Please read the full details and limitations:
- Security Policy - supported versions, threat model, and how to report a vulnerability.
- Security Architecture - key derivation, packet framing, per-packet IV generation, the encrypt-then-MAC construction, the replay window, per-feature data paths, PC client parity, and the relay design.
Compatibility note: v0.5+ changed the wire format (sequence numbers, synthetic IVs, session nonces) and does not interoperate with v0.4.x. Every participant in a session - Xbox, PC client, and relay - must be on v0.5.0 or later.
| File | SHA-256 |
|---|---|
| πΏ XNET .iso | b98ed39a7c1d20d3c277646d62f7024d5b985f90e23f9136df4c217a347cb247 |
| πΏ XNET .xiso | 4aa28160f64ec929097bd5e92698393d1bff3800097a77413e7ff7609a1d0941 |
| π XNET .zip | a5c7a5526615095c806871937e81cb66f0083bc2c59fa38f0050b2b13815159f |
| Platform | SHA-256 |
|---|---|
| XNET-PC-v0.6.0.0-win64.zip | a4a2fef22036695db67843408c1c62ebe2f905283a0028142a4e95efdc137b64 |
| XNET-PC.exe | 9dd90f5437aad824cfba940f7f0ba22dead1621722e0dc0fbb7b02516f7e1785 |
Joins the same relay and room tokens as Xbox consoles. See
pc-client for setup and usage.
- A log is always written to
E:\Dashboard\system\xnet.log(boot, device, and connection events). It truncates on every boot, so it stays small. - For a detailed report, enable DEBUG LOGGING in Settings, reproduce the issue, then grab the log over FTP. Verbose logging is memory-intensive on console - turn it on only to capture a specific problem, then turn it back off.
- Can't connect on a fresh install? Make sure
xnet.cfgis present next todefault.xbe- the release ships with one pointed at the public relay. Without it, enter a relay in Settings before creating or joining a room. - No video tiles? Confirm the EyeToy enumerates in the log (
camera: claimed β¦ (init deferred)at boot;camera: init ok (streaming=1)after entering Secure Video). No audio? Confirm the Communicator enumerates (xblc: mic/spk streaming started). - PC client shows
MIC: RUN SETUP.BAT(Windows)? Launch viarun.bat, the venv Python, or the releaseXNET-PC.exe- not system Python. On macOS/Linux, use the venv frompc-client/README.md.
- xemu / disc builds: in-app config changes may not persist across launches
on
.iso/.xisobuilds. A fix exists but is not folded into this build yet.
- XNET is intentionally written with extensive inline documentation and descriptive code structure. Comments, protocol notes, and implementation details are included throughout the source to promote transparency, simplify auditing, and make the project easier for others to understand, maintain, and contribute to. This level of documentation is deliberate and reflects the project's commitment to openness and long-term preservation.
XNET is built on tiny-AES-c, NXDK, camera and USB research from the original Xbox homebrew community, and the testers and contributors who keep the original Xbox alive online.
Special thanks to Team Resurgent and Darkone83 for their RXDK camera research project
Their work researching the original Xbox camera hardware and developing RXDK-based drivers for the OV519 chipset provided invaluable insight during the development of XNET's video subsystem. Their research greatly accelerated hardware bring-up, testing, and validation efforts.
Additional thanks to the contributors of the Xbox EyeToy project and ConsoleMods Wiki
- Ryzee119 - discovering and testing OV519 hardware registers and device descriptors, and identifying camera device IDs within the original Xbox Video Chat software.
- xbox7887 - research, testing, and documentation imagery.
- Harcroft - research, testing, EEPROM patching, Xbox camera teardown, and guide development.
- Libby - additional patching work.
- Luke Usher - the original idea.
- Evan Blax - English translation patch.
Their collective work preserving and documenting the original Xbox camera ecosystem made modern experimentation and compatibility efforts possible.
XNET would not exist without the collective knowledge shared by the original Xbox community over the past two decades.
If you enjoy this project and would like to help support continued development, consider buying me a coffee.
Your support helps fund:
- New features
- Bug fixes
- Original Xbox hardware for testing
- Server infrastructure
- Documentation and tooling
- Future open-source projects
Thank you for supporting independent development!
"Privacy by Design."


