Monorepo for the Deadlock API project.
api/- Rust API (Axum) serving game data, analytics, leaderboards, and morewebsite/- React frontend (Vite + React Router) for the Deadlock API websiteworkers/- Rust microservices for data ingestion, scraping, and pipeline processingdb/- ClickHouse and Postgres schema, pulled from productionlive-events/- Rust service for live match event streaming via SSEcrates/- Rust libraries shared by the services, among them:valveprotos/- Rust bindings for the Steam and Deadlock protobufs (formerlyvalveprotos-rs)haste/- Source 2 demo and broadcast parser (formerlydeadlock-api/haste), including thedungersbit buffer, varint and char cursor crates it uses (formerlydeadlock-api/dungers)demofusion/- SQL queries (Apache DataFusion) over demo files and live broadcasts, parsed withhastekeyvalues/- parsers for Valve's KV3 (.vdata) and localization filescrosshair/- crosshair share codes (DL.…) to settings and back, and settings to PNGgame-assets/- the versioned game files (.vdata, CSS, localization) to the API's/v1/assetsJSONrate-limit/- the API's sliding-window rate limitertelemetry,service-utils,steam-id,steam-proxy,db-clients,clickhouse-utilsandassets-client, the service plumbing that used to live in onecommoncrate
All Rust crates are members of one cargo workspace (Cargo.toml at the repo root), sharing a
single Cargo.lock and target/. Build or run any of them from the root with cargo <cmd> -p <package>.
Docker images for the Rust services are built with the repo root as context, e.g.
docker build -f api/Dockerfile ..
cd api
cp .env.example .env
# Edit .env with your credentials
cargo runcd website
cp .env.example .env
pnpm install
pnpm dev# Set up workers/.env with your credentials
cd workers
cargo run -p <service-name>cd live-events
cp .env.example .env
# Edit .env with your credentials
cargo runSee live-events/README.md for full documentation.
MIT