DiskPushDiskPush

The desktop app

Status: the Electron shell and its IPC surface exist. The two-pane browser is the current work. This document describes the intended behaviour; anything not yet built is marked.

Layout

┌────────────────────────────────────┬────────────────────────────────────┐
│ LEFT: Local / Server 1             │ RIGHT: Remote / Server 2           │
│ [ Local ▼ ]                        │ [ production ▼ ]                   │
│ /home/anthony/projects             │ /var/www                           │
├────────────────────────────────────┴────────────────────────────────────┤
│ Source: LEFT   Destination: RIGHT                                       │
│ [Preview Changes] [Sync →] [← Sync] [Mirror…]                           │
├─────────────────────────────────────────────────────────────────────────┤
│ Transfer Queue                                                          │
├─────────────────────────────────────────────────────────────────────────┤
│ Files │ Changes │ Failed │ Successful │ Profiles │ Logs                 │
└─────────────────────────────────────────────────────────────────────────┘

Either pane can be the local machine or any saved server, which is what makes Server A → Server B an ordinary case rather than a special mode.

Defaults

Dragging between panes uses the safe preset. No dialog appears first. The status area states what is in effect:

Mode: Incremental Sync
Archive metadata: On
Resume partial transfers: On
Skip unchanged files: On
Delete destination-only files: Off

Mirror

The destination pane stays browsable right up to the confirmation: you can navigate it, show hidden files and read properties while deciding. Then a dry run produces the exact change set, the deletions are listed individually, and only then is the button enabled.

Queue

States: queued, scanning, running, paused, interrupted, retrying, completed, failed, cancelled.

One active rsync per remote connection by default, configurable to 8 globally. The default exists because eight simultaneous rsyncs against one server is usually slower than one, not faster.

Pause is implemented as stop-and-resume: rsync has no portable pause. The process is stopped with SIGINT so it cleans up and leaves its partial file, the job is marked interrupted, and resuming re-runs it. The label says Pause because that is what it does from where you are sitting.

Keyboard

Ctrl/Cmd + K      Command palette
Ctrl/Cmd + L      Focus the path bar
Ctrl/Cmd + R      Refresh
Ctrl/Cmd + U      Upload selected
Ctrl/Cmd + D      Download selected
Ctrl/Cmd + P      Preview sync
Ctrl/Cmd + Enter  Run sync
Delete            Delete selected
F2                Rename

Security

See security.md. The renderer is sandboxed, has no Node APIs, and every IPC input is validated in the main process.