- Category
- Developer Tools
- Rank
- No. 3210Tools index
Previous survey · No. 3074 ·
- Type
- TOOL
- Use case
- Deployment & Operations
- Interfaces
- CLI
- GitHub
- 37 stars
- Latest release
- v0.7.1
- Date
About
syq is a command-line tool for copying, reorganizing, and removing files locally or across machines, using its own protocol instead of rsync's so the receiving machine needs no SSH server or open incoming port. It supports resumable transfers, remote command execution, rsync-style syntax compatibility, and scripting via a JSON API or Python SDK.
What it does
A single Rust binary for Linux and macOS that moves files between disks, servers and S3-style buckets. It logs in over SSH, installs a matching helper on the far side if one is missing, then sends file data over parallel encrypted TCP connections on ports 47600 to 47699, falling back to SSH when those ports are blocked. It can also run with an rsync-shaped command line, so existing scripts can switch over with limited edits.
Why it's ranked here
Speed plus a careful security model. The author's own benchmark project shows one 1.07 GB file going from Germany to the US East Coast at 159.9 MB/s against 18.3 MB/s for rsync, with your results expected to differ. The security notes are unusually specific: symlink races are blocked by working through open directory handles, release downloads are checked against an Ed25519-signed manifest, and server-to-server copies run on a signed, single-use grant instead of a forwarded SSH agent. It is MIT licensed and still pre-1.0.
What's good
The written principles commit to things users care about: an incomplete copy must never look successful, and a failed direct route never silently relays your data through a third machine. Removal is designed to work on a completely full disk. The rsync compatibility notes list every behavioural difference in a table instead of hiding them. Scripts can pin an exact release, which is downloaded, verified and cached, or refuse to run on the wrong version. Copies between two servers end with a receipt the destination signs, so the machine in the middle cannot fake success.
Tradeoffs
Not a drop-in rsync. Rsync filter rules such as exclude and include are rejected in favour of gitignore syntax with last-match-wins, there are no backup or link-dest trees, no rsync daemon support, and the delta step only reuses blocks at the same offset, so inserted data defeats it. There is no Windows build. The update reminder contacts a maintainer-run host that logs your IP address and derived city, though it can be switched off. The pipe-to-shell installer checks a hash embedded in the script but not the release signature. Copies take no snapshot, so files changing mid-copy can mix versions.
How to use it well
Best for people who regularly push large trees between their own machines over SSH, especially across long or lossy links, and want to send results back to a laptop that runs no SSH server. Open the TCP port range on servers you control or you only get the SSH path. Read the compatibility table before swapping it into an rsync script that relies on filter rules. Pin a version in automation. For point-in-time backups, take a filesystem snapshot first, since the tool reads files as they are.
Technical notes+
Cargo.toml declares rust-version 1.94 and MIT, pulling in aws-sdk-s3 for buckets, hpke and ed25519-dalek for key exchange and release signing, blake3 and xxhash-rust for hashing, zstd and lz4 for compression, and a bundled rusqlite. src/main.rs dispatches hidden internal roles (--server, --restricted-receiver, --session-pool) before user subcommands, calls tune_allocator to raise glibc M_MMAP_THRESHOLD to 32 MiB so block buffers stay on the heap, and raise_nofile lifts the descriptor soft limit toward the hard limit, capped near one million. Receiver modules deny subprocess launches on macOS because SCM_RIGHTS lacks atomic close-on-exec there. src/cli.rs makes TransferStrategy::Locality the default: whole-file locally, aligned-block reuse for same-size files with a remote endpoint.
Observed
- License
- MIT
- Language
- Rust
- Platform support
- Linux and macOS, x86-64 and ARM64; no Windows build documented
- Install surface
- Standalone shell installer into the user's local bin directory without sudo, or a Homebrew tap
- Interfaces
- Native CLI plus an rsync-compatible command, with structured results and a Python SDK for scripting
- Transport
- SSH for authentication; encrypted TCP data on ports 47600 to 47699 when reachable, otherwise SSH
- Rsync filter rules
- Unsupported; gitignore-style ignore options instead
- Delta transfer
- Reuses matching blocks only at the same offsets; shifted blocks are not matched
- Release verification
- Self-updates and remote helpers checked against an Ed25519-signed manifest; first-time installer script does not verify the signature
- Update-check telemetry
- Interactive update reminder logs time, version, platform, IP and derived location; can be disabled
- Consistency
- No snapshot is taken during a copy
Read from README.md, Cargo.toml, LICENSE, PRINCIPLES.md, docs/rsync-compat.md, docs/security.md, docs/speed.md, docs/install.md, docs/integrity-checking.md, src/main.rs, src/cli.rs.
What it can do
Copy files locally or across machines using a custom protocol
Local or remote file paths → Copied files
Resume interrupted file transfers
Partially transferred file → Completed file transfer
Execute commands remotely
Command string → Command execution result
Reorganize files
File paths → Reorganized file structure
Remove files locally or remotely
File paths → Deleted files
Accept rsync-style command syntax
rsync-style command → Executed file operation
Script file operations via JSON API
JSON commands → Executed file operation
Script file operations via Python SDK
Python code → Executed file operation
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.