Syncpeer: TypeScript-based BEP client with Tauri UI (no REST, no full sync)

Hi,

Download: https://github.com/yeus/syncpeer/releases/tag/0.1

Project: https://github.com/yeus/syncpeer

Syncpeer is a minimal Syncthing client built around a TypeScript implementation of the protocol, with a Tauri-based UI (Android) and CLI.

It implements the Syncthing BEP (P2P) protocol directly (not the HTTP API):

  • no full synchronization

  • no local replica/index

  • browse, search, download and upload files on demand

It’s already a bit beyond a pure PoC, but still has bugs and a lot of room for improvement.

The TypeScript implementation can also be reused independently, for example for custom clients or browser-based frontends via a WebSocket proxy.

The project was partly inspired by Syncthing Lite: https://github.com/syncthing/syncthing-lite The implementation itself is written from scratch.

Feedback, ideas, and contributions are welcome.

3 Likes

BEP proto by its own is not a complex thing. Implementing of “cluster model” part in a correct, reliable and fast way – that’s the most challenging part.

Anyway, good luck to your project.

2 Likes

Thanks for the wishes, appreciate it :slight_smile:

Yeah, I am leaving out the cluster model part for now.. main goal is to have a very simple and lightweight way to access your syncthing network without having to think about storage space etc… simply kind of similar to what e.g. an app like dropbox mobile does for you. And no synchronization of local state. An App that “my grandparents” would be able to use …

The second goal is to provide an implementation of the syncthing protocol in typescript. Just to play around with it. E.g. one might be able to use it to integrate p2p storage solutions into webpages using websockets and similar things. But its very experimental of course :stuck_out_tongue:

1 Like

One of the interesting applications of this is that Mountain Duck uses JavaScript for the file providers plugins.

So this could make Dropbox like sync possible via Mountainduck

yeah… I don’t know mountainduck.. but from a brief look at it, it looks like a FUSE file system kind of thing.

And you are totally right, yes.. One idea behind syncpeer was to be able to mount syncthing folders as remote filesystems as disks/folders without synchronization. Thats why in the project, the protocol is implemented as a simple library. This way its possible to integrate it with FUSE libraries to achieve that. The synchronization part is already done really well by syncthing itself…

1 Like

To implement fuse-module you really need at least the following two features:

  1. Allow to view/navigate on remove folder without actually download the whole folder (actually it is already implemented in syncspirit)

  2. Allow to download individual file on-demand AKA long asked feature Selective sync

that basically works in the current version already.. its only connect to the android UI though and no FUSE endpoint for this yet…

I do find it always nice people dig into technology very deep for personal fun and profit. But reimplementation of a protocol and all functionality should not be taken lightly. We have to start somewhere :slight_smile: . Good luck with the project

1 Like