Product
Developer tooling
Four small npm packages pulled out of my own projects: release tooling for Wails, an encrypted room primitive, a PWA install prompt, and an app icon pipeline.
- Started
- 21 May 2026
- Status
- Live
- Signal
- 4 npm packages
The question
Which parts of my own build setup are actually worth extracting?
Every project accumulates glue code: the release script, the icon generation step, the install prompt you rewrite for the third time. Most of it stays buried in one repo. Four pieces kept following me from project to project, so on 21 May 2026 I pulled them out and published them.
The packages
wails-release-kit: release tooling for Wails desktop apps. The versioning, build and packaging steps I was re-copying between the PeerDrift and DocShift desktop shells.
web-crypto-room: an ephemeral encrypted room primitive built on the Web Crypto API: a key derived from a short room code, AES-GCM payloads, and nothing that outlives the session. It came out of PeerDrift.
pwa-install-prompt: a small wrapper around the beforeinstallprompt event so a PWA can offer installation at a sensible moment instead of never or immediately.
app-icon-pipeline: one source image in, every icon size and manifest entry out. Written because I kept doing it by hand.
Why one day
They were not written that day. They were extracted that day. Each one already existed inside a working project, which is the only reason the extraction was quick: the code had been in use long enough that I knew which parts were general and which were specific to one app.
What I learned
My rule now is that a package is worth publishing once I have copied it twice.
Keeping the scope to one job meant none of the four needed a configuration system, which is most of the reason they were quick to publish.
Half the work was deleting the parts that only made sense in the original project. Extraction is mostly a naming exercise: you find out which of your assumptions were general and which were about one app.
All four are published under npmjs.com/~tonycletus.