No Description

Ivan Baidakou f817f42cb4 Merge branch 'master' of github.com:basiliscos/syncspirit 1 year ago
docs 1f41e19ad1 Update building.md 1 year ago
lib 39033b289a initiator_actor, moar safe shutdonw 1 year ago
misc 0f2f5a2002 add toolchain file 1 year ago
src 812f6791d1 [bugfix] do not crash if upx is not found 1 year ago
tests 79f1fa94bb [bugfix] global-discovery-actor skipped announcements 1 year ago
.clang-format 1567b52fe9 initial commit 4 years ago
.gitmodules 5954b802de fix tests 1 year ago
CMakeLists.txt 7688ef9d32 update Changes, use upx 1 year ago
LICENSE 3c8a39423f Add copyright & license 2 years ago
README.md 7688ef9d32 update Changes, use upx 1 year ago
syncspirit.toml 0f2f5a2002 add toolchain file 1 year ago
todo.txt 0f2f5a2002 add toolchain file 1 year ago

README.md

syncspirit

sites: github, abf, gitflic

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

Despite of being functional syncspirit is much less feature-rich then syncthing and still is in heavy development.

status

missing features

This list is probably incomplete, here are the most important changes

  • [ ] full-powered files synchronization (aka send and receive)

  • [ ] conflict resolution

  • [ ] ignoring files

  • [ ] QUIC transport

  • [ ] introducer support

  • [ ] outgoing messages compression

  • [ ] untrusted devices encryption

  • [ ] ...

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 be only syncthing. Then syncspirit either exits after 2 minutes of inactivity or when you press ctrl+c. The output is successful, because I previousy authorized this device with syncthing web interface, and shared the folder with this device (syncspirit).

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

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

design and ideas

syncthing is implemented using go programming language, which good fits for services. As the result, syncthing itself is written as web-service, which exposes 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, there syncspirit has only "daemon-ui", i.e. a simple non-interactive application, which shows synchronization log, and the only possibility is just to stop it. However, as soon as the "core" will be complete, there are plans to develop multiple syncspirit UIs: wx-widgets, qt, gtk, may be native, may be even native mobile UIs...

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

UI

plaforms

  • linux
  • windows
  • (may be) *nix
  • (may be) mac os x

changes

0.2.0 (22-May-2022)

  • [feature] implement relay transport, the relay is randombly 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 ocurrs, 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