Encrypted. Git-backed. Zero servers.

Stop losing 23 minutes every context switch

ctx-sync preserves your entire dev context — projects, env vars, Docker services, mental state — and restores it in seconds.

npm install -g ctx-sync
Get Started
Age encrypted
Git-backed sync
ctx-sync — zsh
~ ctx-sync track ✓ Detected Git repo: my-app (main) ✓ Found .env — 12 variables imported ✓ Docker: postgres, redis running Encrypting state... ✓ State encrypted & committed ~ ctx-sync sync ✓ Pushed to origin/main # On your other machine... ~ ctx-sync restore my-app ✓ Context restored in 2.1s ~

The Context Switch Tax

Research shows developers need 23 minutes to regain flow after an interruption. Switching machines makes it exponentially worse.

Lost project state

Which repos were you in? What branch? What about those uncommitted changes you were testing?

Missing env variables

API keys, database URLs, service tokens — scattered across machines, Slack DMs, and sticky notes.

Docker not running

PostgreSQL, Redis, your custom microservices — nothing is started, and you can't remember the compose flags.

Lost mental context

“What was I debugging? Where did I leave off? What was that thing I was about to try?”

Everything you need,
nothing you don't

ctx-sync tracks your complete development context — not just dotfiles.

Full Project State

Auto-detects Git repos, tracks branches, remotes, stash count, and uncommitted changes. One command captures everything about where you left off.

Encrypted Env Vars

Import from .env files or scan your shell. All values encrypted with Age. Zero manual entry on new machines.

Mental Context

Track tasks, blockers, next steps, and breadcrumbs. Solve the 23-minute problem permanently.

Docker & Services

Track docker-compose services, dev servers, and ports. Restore prompts you before executing anything — every command requires explicit approval.

Git-Backed Sync

No servers, no accounts, no vendor lock-in. Your private Git repo is the only backend.

Team Support

Multi-recipient Age encryption. Share context securely with teammates. Key revocation built in.

Security Audit

Built-in audit command checks permissions, transport, encryption state, and scans for leaks automatically.

Three commands. That's it.

From scattered state to full context in seconds.

1

Track

# 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.

2

Sync

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.

3

Restore

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.

Zero-trust by default

Everything is encrypted. Nothing runs without your approval. No server ever sees your data.

Encrypt everything

All state files use Age encryption. Not just secrets — project names, paths, and mental context too. Your Git repo contains only ciphertext.

No backend, ever

Git is the only transport. No servers, no accounts, no third-party services. Works completely offline. You own 100% of your data.

No side-channel leaks

Secrets never appear in CLI arguments, shell history, process lists, logs, or temp files. All crypto operations happen in memory.

Explicit command approval

Restored commands require explicit confirmation. No auto-execution. No --yes flag for commands. Prevents code execution from compromised repos.

How it compares

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

Ready in 30 seconds

# 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
Read the full guide