ctx-sync preserves your entire dev context — projects, env vars, Docker services, mental state — and restores it in seconds.
npm install -g ctx-sync
Research shows developers need 23 minutes to regain flow after an interruption. Switching machines makes it exponentially worse.
Which repos were you in? What branch? What about those uncommitted changes you were testing?
API keys, database URLs, service tokens — scattered across machines, Slack DMs, and sticky notes.
PostgreSQL, Redis, your custom microservices — nothing is started, and you can't remember the compose flags.
“What was I debugging? Where did I leave off? What was that thing I was about to try?”
ctx-sync tracks your complete development context — not just dotfiles.
Auto-detects Git repos, tracks branches, remotes, stash count, and uncommitted changes. One command captures everything about where you left off.
Import from .env files or scan your shell. All values encrypted with Age. Zero manual entry on new machines.
Track tasks, blockers, next steps, and breadcrumbs. Solve the 23-minute problem permanently.
Track docker-compose services, dev servers, and ports. Restore prompts you before executing anything — every command requires explicit approval.
No servers, no accounts, no vendor lock-in. Your private Git repo is the only backend.
Multi-recipient Age encryption. Share context securely with teammates. Key revocation built in.
Built-in audit command checks permissions, transport, encryption state, and scans for leaks automatically.
From scattered state to full context in seconds.
# In your project directory
ctx-sync track
Auto-detects Git state, imports .env files, finds Docker services, and prompts for mental context. Everything encrypted instantly.
ctx-sync sync
Pushes encrypted state to your dedicated private Git repo (one repo for all projects — separate from your code repos). Pulls updates from other machines. Transport is validated every time — SSH or HTTPS only.
ctx-sync restore my-app
Decrypts env vars, restores .env files, shows your mental context, and offers to start Docker services. You approve every command before it runs.
Everything is encrypted. Nothing runs without your approval. No server ever sees your data.
All state files use Age encryption. Not just secrets — project names, paths, and mental context too. Your Git repo contains only ciphertext.
Git is the only transport. No servers, no accounts, no third-party services. Works completely offline. You own 100% of your data.
Secrets never appear in CLI arguments, shell history, process lists, logs, or temp files. All crypto operations happen in memory.
Restored commands require explicit confirmation. No auto-execution. No --yes flag for commands. Prevents code execution from compromised repos.
| Feature | ctx-sync | Atuin | Dotfiles Managers | Cloud IDEs |
|---|---|---|---|---|
| Project state tracking | Yes | No | No | Partial |
| Environment variables | Encrypted | No | No | Varies |
| Docker state | Yes | No | No | Some |
| Mental context | Yes | No | No | No |
| Shell history | No | Yes | No | Varies |
| End-to-end encryption | Age | Optional | No | No |
| No backend required | Git only | Server | Yes | Cloud |
| Works offline | Yes | Partial | Yes | No |
| Team support | Multi-key | No | No | Yes |
# Install
npm install -g ctx-sync
# Create a dedicated private repo on GitHub first, then:
ctx-sync init
# Track your first project
cd ~/projects/my-app
ctx-sync track
# Sync to remote
ctx-sync sync