I build TypeScript libraries, Counter-Strike tools, and the occasional project that gets a little out of hand.
A lot of my work starts with game data: parsing demos, making sense of live match state, and turning it into something useful for developers and broadcasts. I also enjoy working on binary formats, streaming APIs, and making things run in the browser.
| Project | What it does |
|---|---|
| cs2parser | Parses Counter-Strike 2 demos and live GOTV broadcasts, with typed access to players, entities, and game events. Runs in Node.js, Bun, and browsers. |
| bzip2-codec | Dependency-free bzip2 compression and decompression for JavaScript, with Web Streams and WebAssembly. |
| csgogsi | Turns CS2 and CS:GO Game State Integration data into structured match state and typed gameplay events. |
| steam-game-path | Finds and lists installed Steam games across libraries on Windows, macOS, and Linux, with no runtime dependencies. |
I've contributed to LHM.gg / Lexogrine HUD Manager. It's where game data meets the screen: radar, player information, and custom broadcast interfaces.
Not everything needs to be a library. My Heroes III map editor started as a wallpaper generator and grew into a tool for reading, editing, and exporting game maps. There's also a Heroes III soundtrack player for a little background nostalgia.
More projects and experiments live at hwalczak.com.





