
Research
TeamPCP Compromises Telnyx Python SDK to Deliver Credential-Stealing Malware
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.
Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.
Fast, rsync-powered two-way file sync with SQLite metadata and optional SSH. Designed for very large trees, low RAM, and observability.
Requires Node.js 24+.
Open source under the MIT License.
ccsync is NOT READY FOR PRODUCTION USE YET! There is still a significant todo list of subtle edge cases to handle, features to implement, tests to put in place, etc. Do not use this. Our plan is to finish this quickly, then put this into major production on https://cocalc.com, and then I'll update this README when it is much safer to trust ccsync with your files.
Some differences compared to Mutagen, and todos:
See Design Details.
Project (local):
pnpm add ccsync
# or: npm i ccsync
Global (handy for ops boxes):
pnpm add -g ccsync
# then: ccsync help
Build from source (dev):
pnpm install
pnpm build
pnpm test
The package exposes the ccsync CLI (and aliases ccsync-scan, ccsync-ingest, ccsync-merge, ccsync-scheduler) via its bin map.
ccsync session -h
ccsync session create /path/to/alpha /path/to/beta
ccsync session list
ccsync session status 1
Two ways to do it:
a) Let the scheduler do the remote scan over SSH
ccsync session create user@alpha.example.com:/tmp/alaph /tmp/beta
The scheduler will SSH to alpha-host, run a remote scan that streams NDJSON deltas, and ingest them locally.
path, size, ctime, mtime, hash, deleted, last_seen, hashed_ctime) to SQLite. Hashing is streamed and parallelized; we only rehash when ctime changed since the last hash.--prefer), then feeds rsync with NUL-separated --files-from lists.>= 24 (set in engines).pnpm build (TypeScript → dist/), rootDir=src, outDir=dist.dev:scan, dev:ingest, dev:merge, dev:scheduler run the TS sources via tsx.You’ll end up with three DBs alongside your process (or wherever you point them):
alpha.db — metadata for alpha rootbeta.db — metadata for beta rootbase.db — 3-way merge base (relative paths)This separation makes it easy to relocate/rotate databases, inspect state, and compute user-facing reports (e.g. “what changed recently”, “top space users”).
Inotify/FSEvents limits (Linux/macOS): scheduler uses shallow + bounded hot watchers. If you still hit limits, tune:
MAX_HOT_WATCHERS — cap number of deep watchersSHALLOW_DEPTH — 0 or 1 recommendedHOT_DEPTH — typical 1–2DB size: large trees create large but inexpensive DBs. Use WAL mode (default) and SSDs for best throughput.
pnpm install
pnpm build
pnpm test
pnpm link -g .
ccsync -h
TypeScript compiler outputs to dist/.
bin and linked to the compiled files in dist/. If you’re hacking locally in this repo, either run node dist/cli.js … or pnpm link --global to get ccsync on your PATH.ccsync on PATH (installed or included in your SEA image). Then ccsync scan … --emit-delta | ccsync ingest … is all you need. Also, make sure you have ssh keys setup for passwordless login.ccsync is a two-way file sync tool with deterministic Last-Write-Wins (LWW) semantics, built on rsync for transfer and SQLite for state. It aims to be predictable, debuggable, and fast for the common case of two roots (e.g., laptop ↔ server, container bind-mount ↔ host, staging ↔ prod).
lstat, targets are stored and hashed as link:<target>, and rsync preserves them.Use ccsync when you want:
Not a perfect fit if you need:
| Tool | License | Sync model | Conflict policy | Notes |
|---|---|---|---|---|
| ccsync | MIT | Two-way between two roots | LWW (+ preferred side on tie) | rsync transport; SQLite state; symlink-aware |
| Unison | GPL-3 | Two-way | Interactive or policy-driven | Mature, formal; heavier UX for headless flows |
| Syncthing | MPL-2.0 | Continuous P2P mesh | Conflict copies on diverge | Great for many devices; background indexer |
| Mutagen | Source-available (see project docs) | Dev-focused low-latency sync | Modes incl. “prefer side” | Very fast for dev trees; custom protocol |
| lsyncd | GPL-2.0+ | One-way (event → rsync) | N/A | Simple near-real-time mirroring |
Philosophy difference: ccsync favors determinism without duplicates or "conflict" files (LWW + preference). Tools like Syncthing/Dropbox prefer never lose data (create conflict files), which is ideal for less controlled, multi-party edits.
--lww-epsilon-ms, the preferred side wins.<target>; preserved by rsync.toAlpha, toBeta, delete lists) and replayable. State is visible in sqlite tables. After each scan a hash of each directory tree is computed, so you can be certain the state has converged.lutimes where available for precise symlink mtimes.The MIT license is maximally permissive: embed, modify, and redistribute with minimal friction. This makes ccsync easy to adopt in both open-source stacks and commercial tooling.
| Scenario | Recommended | Why | Notes |
|---|---|---|---|
| Two endpoints; predictable outcome; no conflict copies wanted | ccsync | Deterministic LWW with explicit tie-preference; symlink-aware; transparent plans | Great for laptop↔server, container bind-mounts, staging↔prod |
| One-way near-real-time mirroring (e.g., deploy artifacts → webroot) | lsyncd | Event→batch→rsync is simple and robust | If you still want ccsync, just run one side as authoritative (prefer-alpha) |
| Dev loop; tons of small files; low latency | Mutagen | Purpose-built for fast dev sync; very low overhead on edits | License differs; protocol/agent required |
| Many devices; peer-to-peer mesh; zero central server | Syncthing | Discovery, relay, NAT traversal, continuous | Creates conflict copies on diverge (safer for multi-writer) |
| Non-technical users; desktop + mobile; web UI; version history | Nextcloud or Dropbox | Turnkey clients + history + sharing | Heavier footprint; server (Nextcloud) or cloud (Dropbox) |
| CI/CD cache or artifacts between two machines | ccsync | Deterministic, debuggable, rsync-efficient on large binaries | Keep file lists tight; parallelize rsync if needed |
| Large binary files with small edits over LAN | ccsync | rsync rolling checksum excels | Consider --inplace only if types won’t change and perms allow |
| Interactive conflict resolution preferred | Unison | Mature interactive/tunable policy engine | More friction in headless automation |
| Multi-writer folder; avoid any silent overwrite | Syncthing | Uses conflict files rather than overwrite | Safer for less-controlled edits; not deterministic |
| Windows-first environment | Syncthing / Dropbox | Native UX; no rsync/WSL needed | ccsync works best via WSL (document this path) |
| Air-gapped / restricted SSH only | ccsync | rsync over SSH; explicit file lists; easy to audit | Works well in regulated environments |
| Exact promotion between environments (e.g., staging → prod) | ccsync | Precise deletes; type changes honored; no conflict files | Keep backups if human edits happen in prod |
| One-way ingest to object storage (S3, etc.) | rclone (adjacent tool) | Direct backends; checksumming; retries | Different problem space; can be combined with ccsync locally |
Legend:
--lww-epsilon-ms break toward your preferred side (alpha/beta).filename (conflict copy).txt).Rule of thumb
FAQs
Fast rsync-powered two-way sync with SQLite metadata and SSH-friendly scanning.
We found that ccsync demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.

Security News
TeamPCP is partnering with ransomware group Vect to turn open source supply chain attacks on tools like Trivy and LiteLLM into large-scale ransomware operations.

Security News
/Research
Widespread GitHub phishing campaign uses fake Visual Studio Code security alerts in Discussions to trick developers into visiting malicious website.