April 15, 2026
A dev loop that keeps up
By Phil Scott
Save a file, see the change — the shorter that loop, the more you actually iterate instead of batching edits and checking later. Pennington's dev server keeps it short: save, and the browser updates itself.
Edit content, the browser follows
The dev server watches your content directory. Save a markdown file and it
pushes a refresh to the browser over a WebSocket — no manual reload. A 300ms
debounce coalesces rapid saves into a single reload, so a formatter-on-save
doesn't trigger a storm of refreshes. It works under a plain dotnet run, with
a reconnect guard so the browser recovers cleanly after a server restart.
.cs edits, too
Code samples come from source files via :symbol fences, so a sample reflects the
current source every time the docs render. Edit the referenced .cs and the next
render re-reads it, so the embedded sample reflects what you just typed — no copy
to keep in sync. The watcher reacts only to source-file extensions (*.cs, *.json,
and so on), so most build churn never registers, and the 300ms debounce coalesces
whatever does into a single reload — a rebuild burst doesn't thrash anything. Point it
at a focused content root so a stray *.cs under bin/ or obj/ never sneaks in. The hot reload
explanation covers how the watcher
and the WebSocket fit together.