u/Evidlo

Image 1 — syncthingtui - TUI for syncthing
Image 2 — syncthingtui - TUI for syncthing
Image 3 — syncthingtui - TUI for syncthing
Image 4 — syncthingtui - TUI for syncthing

syncthingtui - TUI for syncthing

Hi all,

I've been wanting a TUI for Syncthing for a while now, and most of the existing TUIs are not really feature complete (1, 2). This TUI is written in Go using Charmbracelet libraries for building out the interface. I've been driving this for a few months and find it especially useful for administering Syncthing on remote headless machines.

Source code is here, and the final binary ships at about 12MB. Currently working to get this packaged in Debian.

Development:

I primarily used Opus/Fable to build this in my free time over the course of a few days and was a bit more directed than "build me a syncthing TUI, make no mistakes".

  1. I used Opus to create a hierarchal YAML description of every GUI element (page/form/label/button/input/etc) and its location within in the official web interface
  2. Categorized these elements into groups and mapped them to Charmbracelet TUI primitives, page by page. Lots of iterative mockups to build interfaces that were intuitive to use. Finalized look and feel in a mockup with all fields populated with fake data.
  3. Wired final mockup to Syncthing rest interface and built out integration tests.
u/Evidlo — 5 days ago

Feature-complete Syncthing TUI

Hi all,

I've finally finished a feature-complete Syncthing TUI for configuring syncthing in the terminal, something I've felt was needed for a long time. There are several TUI applications that have appeared over the years (1, 2), but they are either abandoned or lacking significant features.

This is built on Golang+Charmbracelet, so it should run anywhere syncthing runs. I scraped the syncthing sourcecode to build a textual description of all menus/elements of the web GUI (see GUI.yaml in the source code), and mapped each element to a Charmbracelet component. Then I used Claude Fable to build multiple mockups of each view and chose the versions I liked best. I took care to add extensive unit/integration tests so that upstream Syncthing API changes can be integrated by future agents and are less likely to break the application.

Next steps will be submitting the package to the Debian package index so that the application can be installed in Debian/Ubuntu with apt.

u/Evidlo — 1 month ago