← projects

tool · Rust, TypeScript · 2025

DevKit

A Rust-based asset hot-reload daemon for indie game projects.

DevKit terminal output showing live asset reload events

Case study · STAR

The story

S

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
T

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
A

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
R

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