These docs describe unreleased changes on master. Read the latest stable documentation.
Install
Syq runs on Linux and macOS, on x86-64 and ARM64.
Standalone installer
curl --proto '=https' --tlsv1.2 -LsSf https://dl.syq.christmas/latest/install.sh | sh
Installs into ~/.local/bin without sudo. Make sure that directory is on your
PATH. To choose another directory, download the script and run
sh install.sh --bin-dir DIR.
Automatic installation on SSH servers
When an official syq release installs its helper on an SSH server, it also
tries to install the same version at ~/.local/bin/syq for use on that server.
Existing files and symlinks there are left alone; shell startup files are
never edited. Syq reports installation or failure unless --quiet is set.
Shell completion and background connections can also trigger installation,
without printing a notice. Failure to install this command does not stop the
transfer.
Use syq --self-update on the server to update this command. To reinstall a
removed command, run the standalone installer above on the server.
Reusing a cached helper does not repeat this installation step. Development
builds and connections using --syq-path or --no-bootstrap do not install
the command.
Homebrew
brew install greaber/tap/syq
Build from source
See source builds for Cargo builds, custom compilation options, and choosing between your own executable and compatible official SSH helpers.
Try a benchmark
Compare syq with rsync on your own machines, or with rsync and cp locally:
curl --proto '=https' --tlsv1.2 -fLsS https://raw.githubusercontent.com/greaber/syq/master/scripts/try-benchmark.sh | bash
Choose an SSH host to compare syq with rsync, or a local copy to include cp. The script creates test data, checks the copied contents, and cleans up afterward. If syq is missing, it offers to install it. See quick comparison for workload sizes, warm-up time, and command-line options.
| Tool | Average speed |
|---|---|
| syq | 159.9 MB/s |
| syq over SSH | 88.3 MB/s |
| rsync | 18.3 MB/s |
Updates
Use syq --self-update for a standalone installation, or brew upgrade syq
for Homebrew.
Standalone and Homebrew installs may print an update reminder in a terminal,
at most once a day after a successful command, naming the upgrade command for
that install. Nothing updates automatically. Set SYQ_NO_UPDATE_CHECK=1 or
DO_NOT_TRACK=1 to disable reminders.
Downloads and the daily reminder check go through dl.syq.christmas, a host
run by the maintainer that serves the GitHub release files from a cache. It
records each request’s time, syq version, platform, the connection’s IP
address, and the country, region, and city derived from that address, so the
project can see how many installs exist and which versions are in use.
Nothing identifies an install, and the check sends nothing else.
Non-interactive use never makes the reminder check. Every download is
verified against the signed release manifest, so the host cannot substitute
files.
Shell completion
See the completion command reference for every command and cache-management option.
Add the line for your shell to its startup file:
# Bash (~/.bashrc)
eval "$(syq completion bash)"
# Zsh (~/.zshrc), after autoload -Uz compinit && compinit
source <(syq completion zsh)
# fish (~/.config/fish/config.fish)
syq completion fish | source
Completion suggests options, hosts, and paths, with file details beside path matches. In Bash, press Tab again to list matches. Remote paths use your usual SSH login. Open a new shell after adding the setup line or upgrading syq.
Keep connections open
Keep an SSH connection ready for repeated copies:
syq persist connect server
This enables persistence and connects without copying files. It also lets you
send files back from the server, with approval on your machine.
Connections stay open until you close them with syq persist off.
Use syq persist status to see them.
See background connections for reconnecting, turning receiving off, and using persistence in scripts.