Configuration
Where settings live
treesync keeps its configuration and local state in ~/.treesync. This holds your
device identity, sign-in session, per-folder settings, and the index that tracks
what’s already synced.
Don’t commit ~/.treesync or copy it between machines — each device has its own
identity and key material. Deleting it resets treesync on this device; your
synced files on disk are untouched.
You manage settings through treesync commands rather than editing files by hand.
Excluding files
By default treesync mirrors everything in a synced folder. To leave files out,
add an ignore file — treesync honors both .treesyncignore and .syncignore.
They use gitignore-style patterns and are nestable: a rule in a subdirectory’s ignore file applies within that subdirectory. Place one at the root of your synced folder and/or inside individual repos.
# Build output and dependencies
node_modules/
dist/
build/
target/
.venv/
# Big local artifacts
*.iso
*.zip
# A repo you don't want synced
scratch-repo/Mirror a repo without its history
A full mirror includes each repo’s .git. To sync a repo’s working files but
not its history, ignore .git — it’s an ordinary rule, no special mode:
.git/What treesync skips automatically
A few transient, machine-local files are never synced, because copying them across devices would be wrong. This is always on — nothing to configure:
- Git’s transient lock files —
index.lockand any*.lockinside a.gitdirectory (HEAD.lock, ref locks,packed-refs.lock). - Unix sockets, FIFOs, and device files.
- treesync’s own state directory.
Your committed dependency lockfiles (Cargo.lock, yarn.lock, poetry.lock,
flake.lock, …) are versioned files and sync normally — only .git-internal
locks are skipped.
Symlinks (known limitation): treesync doesn’t sync symbolic links yet — they’re skipped for now. Support is coming.
Cross-OS folders
Platform-specific directories like node_modules (native binaries) and .venv
can break when shared between operating systems. If you sync the same folder across
macOS and Linux, exclude them with an ignore rule.
On the roadmap
- Respect each repo’s
.gitignore— a per-folder option to also skip whatever git already ignores. - Ignore presets — ready-made rules for
node,python,rust, and friends. - Selective sync — choose which subfolders sync on a given device.
- Bandwidth limits — cap how much upload/download treesync uses.