Work / Tools / DevStash

No. 41 · Tools · DevX

backup
restore
continue

A new laptop is two days lost. Dotfiles, shell history, IDE settings, project notes, plugin manifests · gone. DevStash backs them up before you format and restores them after you install. Used twice per format cycle. Nothing else.

2 daysSaved every format
6Shells supported
2 cmdsBackup, then restore
0 bytesTelemetry sent
SQLiteLocal vault, WAL mode

Act I · The Problem

A new laptop is two days lost.

You don't notice the dev environment until it's gone. The shell history you've been training for years. The CLAUDE.md you wrote at 2 a.m. The exact plugin order. None of it is in any cloud. None of it is on any disk image.

  1. Hour 0 Format starts. Shell history vanishes. Years of muscle memory now have to be re-typed from scratch.
  2. Hour 4 OS installed. You start reinstalling Node, Python, pnpm, dotfiles. You forget which version managers you had.
  3. Hour 12 IDE comes up empty. Plugin order gone. Keybindings gone. CLAUDE.md gone. You start writing it again.
  4. Day 2 You're still finding things missing. A week later, you'll find more.

Act II · The Promise

Two commands.
The whole environment, intact.

The stash is the parts of your environment nothing else preserves. Shell history. Claude memory. Configs. Plugin manifests. You see every file before it's saved, and every file before it's restored.

vault / shells /

  • +.bash_history7,912 ln
  • +.zsh_history21,334 ln
  • +fish_history612 ln
  • +PSReadLine1,287 ln
  • +nu-history.txt88 ln
  • +git-bash hist2,041 ln

vault / claude /

  • +CLAUDE.mdglobal
  • +settings.jsonenv, perms
  • +projects/*/MEMORY.mdsmart-merge
  • +reference/*docs
  • +plugins/manifestinstalled list
  • -credentialsnever stored

Act III · The Product

A tiny tool with a strict job.

Two modules today. Smart merge so the new machine doesn't overwrite work the old one didn't have. A web GUI so you can see what's in the vault before you trust it.

devstash history

Every shell on the machine.

Detect, back up and restore command history across Bash, Zsh, Fish, PowerShell, Nushell and Git Bash. Merge mode appends. Overwrite mode replaces.

detect · backup · list · restore -m merge|overwrite

devstash claude

Claude Code memory, smart-merged.

Backs up CLAUDE.md, settings.json, per-project MEMORY.md, reference docs, plugin manifests. Merge mode joins MEMORY.md by section heading. Credentials and sessions are never touched.

detect · backup · list · restore -m merge|overwrite

devstash gui

See the vault before you trust it.

A pure HTML/CSS/JS dashboard at localhost. Browse backups, read inside zips, see commands saved per shell, vault size. No frameworks. No CDN.

dashboard · backups · explorer (incl. zip)

vault / *.zip

Crash-safe writes. SQLite metadata.

Every zip writes to .tmp, verifies, then renames. Backup metadata lives in a local SQLite (WAL mode). No logging, no tracking, just the data needed to find a backup later.

timestamped · verified · merge or overwrite

The Stack

No frameworks in the GUI. No CDN. Loads on a flight.

  • Node.js · ESM
  • TypeScript
  • Commander.js
  • better-sqlite3 (WAL)
  • tsup bundler
  • Pure HTML/CSS/JS GUI
  • Local-first
  • Zero telemetry

Act IV · Proof

Used. Not demoed.

start.bat · one-click

Windows users double-click and DevStash installs deps, builds, finds an open port, opens the GUI. Stop with the window or stop.bat. No PATH wrangling.

Auto port pick · 51877+

If the default port is busy, DevStash auto-increments. No "port already in use" failure mode for users who don't read the docs.

Smart MEMORY.md merge

Merges per `## Section` heading. New sections from the backup are appended. Existing sections are preserved. You don't lose work the new machine has done.

Roadmap, public

SSH keys, gitconfig, VS Code extensions, dotfiles, cron, package lists, browser bookmarks, encrypted cloud sync to S3/R2/GCS. All on the GitHub roadmap, no surprise pivots.

If your developers reformat once a year, that's two weeks of payroll.

I build small, strict tools that do one job and do it on every shell, every OS, every machine. Local-first. No cloud trap. No telemetry.