tool · Rust, TypeScript · 2025
DevKit
A Rust-based asset hot-reload daemon for indie game projects.
Case study · STAR
The story
Situation
My iteration loop was painful. Every time I touched a sprite, sound, or texture, I'd wait ~12s while the engine reprocessed assets and reloaded the scene. Across a 6-hour session that's hundreds of dead seconds — and worse, broken flow.
- 12s round-trip per asset change
- Three engines in rotation (Unity, Godot, custom)
- No existing tool covered all three
Task
Build a daemon that watches the project's `assets/` dir, processes changed files (texture compression, sprite atlasing, audio normalization), and pushes diffs to the running game over a local socket. Cross-engine, cross-platform, <500ms round-trip.
- Cross-platform (mac, linux, win)
- Engine-agnostic protocol
- Sub-500ms perceived reload
Action
Wrote it in Rust on top of `notify` for file watching, defined per-asset-type pipelines in TOML so adding a new format is config-only, and chose a tiny WebSocket protocol so every engine could integrate with ~50 lines of glue code.
- Rust + `notify` crate for cross-platform watching
- TOML-defined per-asset pipelines
- WebSocket protocol — Unity, Godot, custom engines all on it
Result
Iteration time dropped from ~12s to under 500ms. Used in two of my last jams. Two friends adopted it for their own projects.
- Adopted by two other solo devs
- Saved hours per jam (24-to-48-hour formats)
- Reload time
- <500ms
- Iteration speedup
- 24x
- Engines supported
- 3
- Lines of glue / engine
- ~50
Tech notes
notifycrate for cross-platform file watching- Per-asset-type pipelines defined in TOML
- WebSocket protocol so the same daemon serves Unity, Godot, and custom engines