Problem
When a remote move is blocked because the machine has no GNU rsync, the error tells the user what is wrong but leaves them to work out how to fix it — including researching which package to install and how.
The message shown on Test connection:
⚠ SSH and the remote path are reachable, but no GNU rsync was found for the transfer. Install GNU rsync for your platform or set its path under Settings → Paths.
And the platform-support hint (vireo/platform_support.py:201):
Install GNU rsync and configure its executable under Settings → Paths.
Why it matters
This is a hard stop for a non-technical user. macOS ships Apple's openrsync, which reports itself as "rsync version 2.6.9 compatible" — so a user who checks rsync --version sees a plausible-looking rsync and concludes the app is wrong about it. Nothing in the message hints that the system binary is the problem, or that a second rsync is needed alongside it.
The app already knows everything required to give a precise instruction at the moment it renders this message:
- the platform is macOS (
sys.platform)
/usr/bin/rsync resolved but failed is_gnu_rsync — i.e. this is specifically the openrsync case, not the nothing-installed case; platform_support.py:199 already distinguishes "misconfigured" from "missing"
- Homebrew's install path
/opt/homebrew/bin/rsync is already the third auto-detect candidate (vireo/move.py:270), so a brew install rsync will be picked up with no further configuration
Suggested fix
Make the hint platform- and state-specific:
- macOS + openrsync detected → "macOS ships Apple's openrsync, which can't transfer over SSH. Install GNU rsync with
brew install rsync" — with a copy button on the command. Add a note that no further configuration is needed afterward.
- macOS + nothing found → same command.
- Linux → the distro package hint (
apt install rsync / dnf install rsync).
- Windows → existing guidance.
Also worth reconsidering the "or set its path under Settings → Paths" suffix. It's the escape hatch, but it's listed as a co-equal option, which invites users to go hunting in Settings for a path they don't have yet. Leading with the install command and demoting the manual path to a secondary line would match what almost everyone needs.
Note
Once brew install rsync runs, auto-detect works with no user action — verified via the app's own resolver:
>>> move.resolve_rsync_bin()
'/opt/homebrew/bin/rsync'
>>> move.is_gnu_rsync('/opt/homebrew/bin/rsync')
True
So the entire remaining gap really is just the wording of the hint.
Problem
When a remote move is blocked because the machine has no GNU rsync, the error tells the user what is wrong but leaves them to work out how to fix it — including researching which package to install and how.
The message shown on
Test connection:And the platform-support hint (
vireo/platform_support.py:201):Why it matters
This is a hard stop for a non-technical user. macOS ships Apple's
openrsync, which reports itself as "rsync version 2.6.9 compatible" — so a user who checksrsync --versionsees a plausible-looking rsync and concludes the app is wrong about it. Nothing in the message hints that the system binary is the problem, or that a second rsync is needed alongside it.The app already knows everything required to give a precise instruction at the moment it renders this message:
sys.platform)/usr/bin/rsyncresolved but failedis_gnu_rsync— i.e. this is specifically the openrsync case, not the nothing-installed case;platform_support.py:199already distinguishes"misconfigured"from"missing"/opt/homebrew/bin/rsyncis already the third auto-detect candidate (vireo/move.py:270), so abrew install rsyncwill be picked up with no further configurationSuggested fix
Make the hint platform- and state-specific:
brew install rsync" — with a copy button on the command. Add a note that no further configuration is needed afterward.apt install rsync/dnf install rsync).Also worth reconsidering the "or set its path under Settings → Paths" suffix. It's the escape hatch, but it's listed as a co-equal option, which invites users to go hunting in Settings for a path they don't have yet. Leading with the install command and demoting the manual path to a secondary line would match what almost everyone needs.
Note
Once
brew install rsyncruns, auto-detect works with no user action — verified via the app's own resolver:So the entire remaining gap really is just the wording of the hint.