DevSync is a Git-aware workspace synchronization tool for remote-first software development.
It composes Git, SSH, and Mutagen. It does not replace them.
- A lightweight CLI orchestration layer around Git, SSH, and Mutagen.
- Convention-first workspace sync for local macOS to remote Linux development.
- Fail-closed synchronization: ambiguous state aborts rather than guessing.
- Transparent: repositories, SSH, and Mutagen sessions remain inspectable with native tools.
- Not a Git replacement.
- Not Dropbox for code.
- Not a distributed filesystem.
- Not a daemon.
- Not an automatic conflict resolver.
- Not a workspace migration or node orchestration platform.
make build ./bin/devsync version ./bin/devsync bootstrap ./bin/devsync bootstrap --init-workspace ./bin/devsync init-remote ./bin/devsync doctor ./bin/devsync sync --dry-run ./bin/devsync sync
.gitis never synchronized.- Branch names must match.
- Any local/remote history mismatch aborts.
- Git history is authoritative.
- DevSync never pulls from or pushes to the peer workspace clone.
devsync syncis one-shot: it flushes intentionally, then pauses synchronization.- Filesystem sync happens only after Git validation succeeds.
- DevSync never silently recreates Mutagen sessions.
Global config lives at:
~/.config/devsync/config.yaml
Workspace overrides live at the repository root:
.devsync.yaml
The default convention maps:
~/remote/work/example -> core-dev:~/workspace/work/example
See docs/examples.md for configuration examples.
devsync bootstrap: validate first-run setup and create missing global config.devsync bootstrap --init-workspace: also write.devsync.yamlfor the current repository.devsync init --remote-host <host> --remote-path <path>: write an explicit workspace override.devsync init-remote: explicitly seed the remote Git repository, restore canonicalorigin, then stop before synchronization.devsync status: inspect Git, config, Mutagen, and sync freshness.devsync sync --dry-run: show the operation plan without mutation.devsync sync: validate Git history equality, flush Mutagen, then pause synchronization.devsync attach: intentionally enable continuous synchronization.devsync detach: pause continuous synchronization.devsync forward: start configured SSH local port forwards until interrupted.devsync doctor: validate local and remote prerequisites.devsync session ls: list Mutagen sync sessions.devsync session inspect: inspect the resolved Mutagen session.devsync session flush: flush the resolved Mutagen session.devsync session recreate --force-recreate-session: explicitly recreate a drifted session.devsync version: print build and runtime metadata.
Global diagnostics flags:
--debug: emit structured debug logs.--trace: emit verbose command-level traces for SSH, remote validation, SCP, and Mutagen endpoint rendering.
Environment equivalents:
DEVSYNC_DEBUG=1 devsync status DEVSYNC_TRACE=1 devsync doctor
make test
make build
make checksums
make release-snapshotRelease metadata is embedded with linker flags. See Makefile and .goreleaser.yaml.