Keeping two machines' configuration aligned usually ends in a shell script nobody dares touch, because the reasons behind it were never written down. twin puts the reasons and the instructions in the same file. A sync-file is ordinary Markdown: the prose explains why a path is synced, and fenced YAML blocks say what to do. rsync does the copying. It knows the awkward parts. Paths the other machine owns stay untouched and are named as such, not buried among build artefacts. When both sides changed since the last sync, twin shows a diff and asks before overwriting anything, once for the whole group, so a half-applied deploy is not a state it can leave you in. Targets are a local path, a mounted volume, or user@host:/path over ssh, with no difference in how they are used. Interactive selection runs through fzf with a rendered Markdown preview; the same sync-files drive scriptable status, dry-run and sync commands.

Required Ruby Version

>= 3.1

Authors

Ralf Hülsmann

Versions

  1. 0.4.1 August 02, 2026 (35 KB)
  2. 0.4.0 August 02, 2026 (34.5 KB)
  3. 0.3.0 July 28, 2026 (30 KB)
  4. 0.2.0 June 21, 2026 (22 KB)
  5. 0.1.3 June 12, 2026 (17.5 KB)

Pushed by

SHA 256 checksum