Ei kuvausta

Ivan Baidakou 5762129d36 Add conanfile.py 19 tuntia sitten
docs 56946e18c0 refactor 1 viikko sitten
lib b0e6100ea8 add missing test file 3 viikkoa sitten
misc cb9bea6dd1 upgrade deps gathering scripts 1 kuukausi sitten
src 76e4d5d2ad core: win32 file sink path 2 päivää sitten
tests fabab2a50a Use conanfile.py instead of conanfile.txt 1 päivä sitten
.clang-format 1567b52fe9 initial commit 5 vuotta sitten
.gitmodules 3525a15e0b Use conan's fltk 9 kuukautta sitten
CMakeLists.txt fabab2a50a Use conanfile.py instead of conanfile.txt 1 päivä sitten
LICENSE 3c8a39423f Add copyright & license 2 vuotta sitten
README.md d9a49d788f add fltk-ui docs 2 viikkoa sitten
conanfile.py 5762129d36 Add conanfile.py 19 tuntia sitten
mdbx-xp-patch.diff a92d027088 update build docs 2 viikkoa sitten
syncspirit.toml c723cc150d win32 improvements 10 kuukautta sitten
todo.txt 975e2cc6f3 core, fix folder_infos removal 6 kuukautta sitten

README.md

syncspirit

Sites: github, notabug gitflic

syncspirit is a continuous file synchronization program, which synchronizes files between devices. It is built using the C++ rotor actor framework. It implements the BEP-protocol for files synchronization, or, simplistically speaking, it is a syncthing-compatible synchronization program at protocol level, which uses the syncthing infrastructure (for global discovery and relaying).

Despite being functional, syncspirit is much less feature-rich than syncthing and is still in heavy development

front-ends (aka UIs)

different UIs

All front-ends share the same configuration and database when running on same host.

status

missing features

This list is probably incomplete. Here are the most important changes:

  • [ ] inotify support (aka realtime files watching)

  • [ ] ignoring pattern files

  • [ ] QUIC transport

  • [ ] introducer support

  • [ ] outgoing messages compression

  • [ ] untrusted devices encryption

  • [ ] send only/receive only dirs

  • [ ] ...

run

(headless ui-daemon only, atm)

syncspirit-daemon --log_level debug \
    --config_dir=/tmp/my_dir \
    --command add_peer:peer_label:KUEQE66-JJ7P6AD-BEHD4ZW-GPBNW6Q-Y4C3K4Y-X44WJWZ-DVPIDXS-UDRJMA7 \
    --command add_folder:label=my_label:id=nagkw-srrjz:path=/tmp/my_dir/data \
    --command share:folder=my_label:device=KUEQE66 \
    --command inactivate:120

the output should be like

asciicast

i.e. it records some peer, adds a folder, then shares the folder with the peer device, connects to the peer and downloads all files into /tmp/my_dir/data . The peer device currently can only be syncthing. Then syncspirit either exits after 2 minutes of inactivity or when you press ctrl+c. The output is successful, because I previously authorized this device with the syncthing web interface, and shared the folder with this device (syncspirit).

I also assume some familiarity with syncthing, so you should understand what's going on here.

For more details see ui-daemon docs and configuration docs.

design and ideas

syncthing is implemented using go programming language, which is a good fit for services. As a result, syncthing itself is written as a web-service, which exposes a REST-API for clients. So, yes, the end-user software should also have a front-end, which is usually web-browser (or embeds web-browser), which is written in different programming language (e.g. javascript or java).

I feel myself a bit uneasy with that design; maybe it's my personal nostalgia, but I like the good old programs, where everything is "in memory" of one program. They are fast, ecological, secure, manageable, have lower CPU and memory pressures.

The actor model, blurs the boundaries between classical desktop and client-server application models. I think, rotor makes it possible to have (and embed) some "core" into multiple different user interfaces (GUIs).

Currently, syncspirit has only a "daemon-ui", i.e. a simple non-interactive application, which shows a synchronization log, and the only possibility is just to stop it. However, as soon as the "core" is complete, there are plans to develop multiple syncspirit UIs: wx-widgets, qt, gtk, maybe native, maybe even native mobile UIs...

Another major idea is scripting support: it should be possible to expose the "core" to lua scripts, and have some user-defined actions like synchronizing files with external folders including flash-sticks, user-defined files ordering and filtering for synchronization, maybe even selective sync, like in resilio. This, however, still needs to be researched, after the core completion.

platforms

  • linux
  • windows
  • mac os x (it is know that it can be build and run on that platform, but I don't know to make distributions on it)

changes

0.4.0 (xx-xxx-2025)

  • major app refactoring

0.3.3 (12-May-2024)

  • [bugfix, win32] governor actor, fix parsing folder path

0.3.2 (11-May-2024)

  • [bugfix] folder scan isn't triggered on startup

0.3.1 (23-Apr-2024)

  • [feature] added syncspirit binary fow windows xp
  • [build, docs] improved build documentation

0.3.0 (14-Apr-2024)

  • [feature] implemented complete files synchronization
  • [feature] added local files watcher and updates streamer
  • [build] switched from git submodules to conan2
  • [win32] better platform support

0.2.0 (22-May-2022)

  • [feature] implement relay transport, the relay is randomly chosen from the public relays pool
  • [feature] output binary is compressed via upx
  • [feature] small optimization, use thread less in overall program
  • [bugfix] sometimes fs::scan_actor request timeout occurs, which is fatal
  • [bugfix] global discovery sometimes skipped announcements

0.1.0 (18-Arp-2022)

  • initial release

building from source

see

license

This software is licensed under the GPLv3 license.

Copyright (C) 2019-2022 Ivan Baidakou (aka basiliscos)

This file is part of syncspirit.

syncspirit is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

syncspirit is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with syncspirit.  If not, see <http://www.gnu.org/licenses/>.

GPL3 Logo