The file browser
Two panes, either side anything
LEFT RIGHT
Local / Server 1 Remote / Server 2
The labels describe screen position, not direction. Each pane has an endpoint selector, and either side can be the local machine or any saved server. That gives three shapes:
Local → Server
Server → Local
Server A → Server B
Browsing is SFTP; transferring is rsync
Local browsing filesystem APIs
Remote browsing SFTP over SSH
Transfers rsync
Transport SSH
rsync can list files, with --list-only. DiskPush does not use it for the
interactive browser, for two reasons:
- It only lists. Renaming, chmod, mkdir and delete are not things rsync does, and a file manager needs all of them.
- It re-establishes a session per invocation. SFTP holds one connection open and answers directory reads on it.
So SFTP is the browser and rsync is the engine, sharing the same SSH connection infrastructure.
SFTP without rsync
A server can have SSH and SFTP but no rsync. DiskPush connects anyway:
Connected via SFTP
Remote browsing available
rsync not found on server
Transfer/sync disabled
You keep the browser, so you can look at the machine and work out why, instead of being locked out of a server by a missing package.
Inspect before you mirror
This is the reason the browser and the delete preview are separate things. Before a Mirror can run you get both:
- Human inspection. The destination pane stays fully browsable. Navigate it, show hidden files, sort by date, read properties. DiskPush never hides the destination behind a summary dialog.
- A machine-generated change set. A dry run with
--itemize-changesproduces the exact list of files that would be added, updated, left alone and deleted.
Then, and only then, the confirmation.
The change set
Dry-run output is parsed into structured rows rather than shown as terminal text:
| Action | Path | Source | Destination |
|---|---|---|---|
| Add | new/video.mp4 |
exists | missing |
| Update | site/app.js |
newer | older |
| Metadata | assets/ |
same | timestamp differs |
| Delete | old/archive.zip |
missing | exists |
These come from rsync's 11-character itemize string. >f+++++++++ is a created
file, >f.st...... is one whose contents and time changed, .d..t...... is a
directory whose timestamp moved, and *deleting is what it looks like.
Unchanged rows are only available when itemize-all is on, because rsync reports
only changes by default. The unchanged count comes from --stats.
After a transfer
Affected directories refresh, stale listing caches are dropped, and your current path and selection are kept where they still exist. A manual refresh is always available.

