$ codrop run

codrop

Your working state, on every machine you own.

codrop keeps code, environments, and .env files in step across every machine you work from. Laptop, desktop, the box under the desk — pick one up and it's already where you left off. git pull is now decorative.

$ ls install/

Installation options

Unix-only: prebuilt binaries for macOS (Apple Silicon and Intel) and Linux x86-64. Install it on each machine you want in the set, then check it took with codrop --version.

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/termdx/Codrop/releases/latest/download/codrop-installer.sh | sh
$ play demo.mp4

See it run

codrop — two machines, one working tree
demo recording — coming soon

A recording of the boring miracle: save on one machine, open on the other.

$ cat what-is-codrop.txt

What is codrop?

codrop is a Rust daemon that watches a folder, content-addresses every change, and syncs it to your other devices over an encrypted peer-to-peer connection. Devices are identified and authenticated by public key, so you never deal with IP addresses — and it works across LAN, NAT, and hostile café Wi-Fi. It isn't a replacement for git. It's the layer underneath, where your half-finished branch and your .env file live.

live, not committed

Git records commits; codrop mirrors your working folder in real time. An edit on the laptop shows up on the desktop about a second later — new files, changes, deletes.

encrypted p2p

Devices talk directly, addressed and authenticated by Ed25519 public key. Connectivity escalates direct → hole-punched → relayed, so no server sits in the middle by default.

conflicts preserved

Vector clocks — not wall-clock time — order changes, so a newer edit is distinguishable from a concurrent one. One version wins the path; the other is kept under .codrop/conflicts/.

only changed chunks move

Files are split into content-defined chunks stored by hash, so a small edit to a large file transfers a chunk or two, and identical content is deduplicated across files and versions.

sane ignores

node_modules, .git, target, dist, build, and .next are excluded out of the box; gitignore syntax covers the rest. It's the escape hatch for secrets, too.

unix, and honest about it

Exec bits and symlinks travel with the file, and deletes propagate as tombstones. The daemon leans on Unix process APIs, so Windows means WSL.

$ man codrop

Frequently asked

Git records commits. codrop mirrors your working folder in real time. Use both: git for history, PRs, and blame; codrop for the uncommitted stuff between commits — the state you'd otherwise shuttle around with git stash, a USB stick, or a desperate Slack file drop.

Not by IP address. Each folder has a stable endpoint id — run codrop id to print it — and pairing is mutual: run codrop pair with the other machine's id on both sides, then codrop run. More than two machines pair with each other to form a mesh.

No. node_modules, .git, target, dist, build, and .next are ignored by default. Anything else you want kept local goes in .codropignore, which takes gitignore syntax.

Traffic is end-to-end encrypted between devices you've explicitly paired, and a daemon only accepts trusted peers. Blobs are stored unencrypted at rest under .codrop/, though — so don't sync secrets to a device you don't control, and use codrop ignore to keep a file on one machine.

Prebuilt binaries for macOS on Apple Silicon and Intel, and Linux x86-64. Linux arm64 and musl build from source. Windows isn't supported — the daemon relies on Unix process and file-permission APIs — so it means WSL, give or take.

MIT. Read the source, fork it, run it on hardware we've never heard of.

$ subscribe --product codrop

Hear about it before your feed does.

Occasional notes on what codrop learned to sync this month. No drip campaign, no re-engagement emails.