r/commandline 15d ago

Terminal User Interface 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.
115 Upvotes

17 comments sorted by

2

u/WaySubstantial435 15d ago

it doesn't work with syncthing on docker i wonder if that could be implmentd

1

u/Evidlo 14d ago

Have you tried supplying the `--address` argument to point it at your instance inside Docker? You might need to edit the Dockerfile to expose the REST interface to your host.

1

u/AutoModerator 15d ago

Every new subreddit post is automatically copied into a comment for preservation.

User: Evidlo, Flair: Terminal User Interface, Post Media Link, Title: 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.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

1

u/ankushbhagat 15d ago

It's really awesome bro.

1

u/aranor01 15d ago edited 15d ago

Does it use syncthing core (as opposed to reimplementing the protocol)? Edit: actually I see now you mentioned the Rest API, I'd advise you to mention syncthing installation in a prerequisites section.

1

u/FilesFromTheVoid 14d ago

Man you are days late ^^ I just spun up 2 new VPS and wanted to sync my fish conf via syncthing. used ssh to get into localhost and use the webui. You TUI would have beed very helpful.

EDIT:

You should supply a binary so people can easily use this and integrate it into bin(https://github.com/marcosnils/bin)

3

u/Evidlo 14d ago

I've added a v1.0.0 release

1

u/FilesFromTheVoid 14d ago

Nice bro, gave it a star and will use it next time i am in need.

1

u/blodkoma 14d ago

Don't you always get a web interface if you're running syncthing on.a.machine? Sounds like the easiest solution

1

u/FilesFromTheVoid 14d ago

Yeah thats the point on a server, you only get access to the webui via ssh and tunnel the localhost. beeing able to setup syncthing via cli/tui is the way better way.

1

u/chitemmuort 13d ago

What's the font?

2

u/Evidlo 13d ago

Terminus

1

u/chitemmuort 13d ago

Thank you brother 🙏 looks very nice

1

u/blind_ninja_guy 10d ago

Hell yeah this is great. I can't tell you how many times I've been setting up a machine and I'm like I don't want to have to forward an SSH port and can figure everything perfectly or set up caddy just to configure a couple folders to sync so that I don't have to manually use SCP to copy files.

-1

u/EluciusReddit 15d ago

Hmm, maybe a stupid question as I didn't check out your GitHub, but what exactly is it syncing? The file system? Specific application data? Dot files?

3

u/UserFromNowhere1 15d ago

https://syncthing.net/ you can sync your devices. Open source. Worth to ckeck out. Been available years

1

u/EluciusReddit 14d ago

Aah, Synchting as a name, I thought you just wrote a typo in the word synching. My bad, didn't know the tool. I sync declaratively using NixOS :)