Show HN: Synchole is a native P2P data transfer protocol library in Rust

vednig1 pts0 comments

GitHub - doshareme/synchole: P2P Data Sync Protocol · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

doshareme

synchole

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>1 Commit<br>1 Commit

.github/workflows

.github/workflows

MyApplication

MyApplication

benches

benches

bindings

bindings

crates

crates

docs

docs

examples

examples

sample_tkinter_dll_app

sample_tkinter_dll_app

sample_todo_sync_tkinter_app

sample_todo_sync_tkinter_app

tests

tests

.gitignore

.gitignore

Cargo.toml

Cargo.toml

LICENSE

LICENSE

README.md

README.md

rust-toolchain.toml

rust-toolchain.toml

View all files

Repository files navigation

Synchole

Synchole is a Rust-first, multiplatform device-to-device synchronization framework.<br>It is designed for offline-first applications that need encrypted peer sync across<br>Android, iOS, Windows, macOS, Linux, and browser/Web Worker environments.

The network architecture is inspired by Tailscale-style private networking:<br>stable device identity, peer discovery, NAT traversal, encrypted peer tunnels,<br>direct transfer when possible, and relay fallback when direct paths fail.

Workspace

crates/synchole: public SDK facade.

crates/synchole-core: shared IDs, errors, clocks, config, and version vectors.

crates/synchole-identity: device identity, signatures, trust policy, and keyring traits.

crates/synchole-discovery: peer discovery traits and coordination metadata.

crates/synchole-transport: secure tunnel traits, path selection, and frame types.

crates/synchole-nat: STUN/TURN/ICE-style NAT traversal contracts.

crates/synchole-relay: DERP-like relay fallback contracts.

crates/synchole-storage: SQLite storage abstraction with binary, SQL, and document modes.

crates/synchole-sync: sync protocol, conflict resolution, and replication engine.

crates/synchole-bindings: Kotlin/Java, Swift, C ABI, and WASM binding surface.

Documentation

Architecture

Storage

Testing

Security

Example

synchole::Result {<br>let store = SQLiteStore::open("app-sync.db", StorageConfig::new(StorageMode::Binary)).await?;

let sdk = Synchole::builder()<br>.with_config(SyncholeConfig::default())<br>.with_storage(Arc::new(store))<br>.build()<br>.await?;

sdk.put_binary(<br>CollectionId::from("notes"),<br>ObjectId::from("note-1"),<br>b"encrypted application payload".to_vec(),<br>.await?;

let report = sdk.sync_once().await?;<br>println!("synced {} peers", report.peers_contacted);<br># Ok(())<br># }">use std::sync::Arc;

use synchole::{<br>CollectionId, ObjectId, SQLiteStore, StorageConfig, StorageMode, Synchole,<br>SyncholeConfig,<br>};

# async fn example() -> synchole::Result()> {<br>let store = SQLiteStore::open("app-sync.db", StorageConfig::new(StorageMode::Binary)).await?;

let sdk = Synchole::builder()<br>.with_config(SyncholeConfig::default())<br>.with_storage(Arc::new(store))<br>.build()<br>.await?;

sdk.put_binary(<br>CollectionId::from("notes"),<br>ObjectId::from("note-1"),<br>b"encrypted application payload".to_vec(),<br>.await?;

let report = sdk.sync_once().await?;<br>println!("synced {} peers", report.peers_contacted);<br># Ok(())<br># }

This repository is a production-oriented architecture scaffold. Network adapters,<br>platform keychains, and production relay services are intentionally behind traits so<br>applications can choose concrete backends without changing sync semantics.

About

P2P Data Sync Protocol

Resources

Readme

License

MIT license

Security policy

Security policy

Uh oh!

There was an error while loading. Please reload this page.

Activity

Custom properties

Stars

stars

Watchers

watching

Forks

forks

Report repository

Releases

No releases published

Packages

Uh oh!

There was an error while loading. Please reload this page.

Contributors

Uh oh!

There was an error while loading. Please reload this page.

Languages

Rust<br>57.3%

Python<br>38.5%

Kotlin<br>4.1%

Batchfile<br>0.1%

You can’t perform that action at this time.

synchole crates sync await reload rust

Related Articles