- Rust 62.5%
- TypeScript 19.7%
- CSS 14.6%
- JavaScript 2.6%
- Dockerfile 0.4%
- Other 0.2%
| .forgejo/workflows | ||
| deploy | ||
| parser | ||
| web | ||
| .dockerignore | ||
| .gitignore | ||
| compose.yml | ||
| Dockerfile | ||
| README.md | ||
| Y11_REC_FORMAT.md | ||
Y11 Replay Viewer
A local-first Rainbow Six Siege Y11 replay viewer. The Rust parser runs inside a Web Worker through WebAssembly, so replay data stays in the browser and large files do not block the interface.
Run the web app
Requirements: a recent Node.js release, Rust with the
wasm32-unknown-unknown target, and wasm-pack.
cd web
npm install
npm run build:all
npm run dev
Open the local URL printed by Vite, then drag a replay folder or one or more
.rec files onto the upload screen. The native folder picker is also available
where the browser supports it.
Use npm run build after frontend-only edits. Run npm run wasm after changing
the Rust WebAssembly interface, or npm run build:all to rebuild both layers.
Checks
cd web
npm run test:parser
npm run build
cd ../parser
cargo test --all-targets --features wasm
cargo clippy --all-targets --features wasm -- -D warnings
npm run test:parser feeds every replay below parser/replays through
the generated WebAssembly module and verifies that the browser-facing match
model contains the expected rounds and teams.
Forgejo deployment
The manually dispatched workflow in .forgejo/workflows/deploy.yml builds the
Rust/WASM parser and web frontend into a self-contained nginx image, publishes
it to the Forgejo container registry, and deploys it through compose.yml.
Configure a dedicated Forgejo runner on the VPS with the label vps, Docker
Engine access, the Docker Compose plugin, and access to the external Traefik
network named proxy. Add this repository Actions variable and secrets:
- variable
REGISTRY_HOST: the Forgejo registry hostname, without a path; - secret
REGISTRY_USERNAME: a Forgejo user allowed to publish packages; and - secret
REGISTRY_TOKEN: that user's personal access token.
The deployed route is replay.hadeler.me; adjust the Traefik labels in
compose.yml if the hostname, entrypoint, or certificate resolver differs.