Summary
Allow users to resolve .sync-conflict-* files directly inside the TUI instead of just flagging them with !.
Motivation
Conflicts are currently detected and badged but require manual filesystem intervention to resolve. This is the most frustrating part of the Syncthing UX and meshd can solve it elegantly.
Proposed UX
- Pressing
enter on a conflicted file (! badge) opens a Conflict Resolution pane
- For text files: side-by-side diff view (current vs conflict version),
k to keep current, K to keep conflict, m to open in $EDITOR for manual merge
- For binary files (images,
.kdbx, etc.): show metadata side-by-side (size, modified time, device origin), k/K to pick one
- Special handling for KeePass
.kdbx: show message "KeePass can merge this natively — open both versions in KeePass to merge" with a hint to use KeePass's sync feature
- After resolution, automatically deletes the
.sync-conflict-* file
CLI equivalent
meshd conflicts # list all current conflicts
meshd conflicts --fix # interactive resolution for each conflict
Implementation Notes
- Conflict files follow the pattern:
<name>.sync-conflict-<date>-<time>-<deviceid>.<ext>
- Device ID in the filename can be resolved back to a device name via
/rest/config/devices
- Side-by-side diff: use
github.com/sergi/go-diff or similar
- Binary detection: check for null bytes in first 8KB of file
Related
Summary
Allow users to resolve
.sync-conflict-*files directly inside the TUI instead of just flagging them with!.Motivation
Conflicts are currently detected and badged but require manual filesystem intervention to resolve. This is the most frustrating part of the Syncthing UX and meshd can solve it elegantly.
Proposed UX
enteron a conflicted file (!badge) opens a Conflict Resolution panekto keep current,Kto keep conflict,mto open in$EDITORfor manual merge.kdbx, etc.): show metadata side-by-side (size, modified time, device origin),k/Kto pick one.kdbx: show message "KeePass can merge this natively — open both versions in KeePass to merge" with a hint to use KeePass's sync feature.sync-conflict-*fileCLI equivalent
Implementation Notes
<name>.sync-conflict-<date>-<time>-<deviceid>.<ext>/rest/config/devicesgithub.com/sergi/go-diffor similarRelated
meshd versions+ Versions tab in TUI) #2