Case study · Open source

EdgeSync

A NATS-native sync engine for Fossil SCM repositories. Every leaf is both client and server. Optional iroh tunneling for two leaves behind separate NATs. A bidirectional notify channel runs on the same mesh for human-in-the-loop messaging.

Mesh topology · no central server · iroh QUIC · zero port forwarding · One static binary per role

Project

Mesh sync engine for Fossil

Engagement

Original protocol and daemon design

Status

Alpha · wire protocol stable

Overview

A mesh, not a central server.

EdgeSync swaps Fossil's HTTP /xfer protocol for NATS messaging. The leaf agent reads and writes .fossil files via libfossil and exchanges blobs with peer agents over an embedded NATS mesh.

There is no central server in the default topology — each agent runs its own NATS in-process and gossip happens leaf-to-leaf. Add a peer with one CLI flag.

EdgeSync documentation, primary view

Problem shapes

When the topology is the problem.

EdgeSync is the right tool when the network shape — not the feature set — is what is hard.

  • Many small repos at the edge.

    Robotics fleets, retail kiosks, CDN nodes, on-prem appliances. New devices pair with one peer and converge from there.

  • Bidirectional messaging alongside sync.

    Most VC stacks bolt chat or notifications on as a separate service. EdgeSync ships notify on the same NATS mesh.

  • Zero infrastructure.

    Embedded NATS plus iroh transport means no broker, no central server, no relay. Two laptops on coffee-shop wifi sync directly.

Architecture

Leaf, hub, peer — pick any combination.

The leaf agent embeds libfossil, a full NATS server, and the notify pub-sub. Three transport options; pick any combination per agent.

EdgeSync architecture diagram

Compared to neighbors

Operating shape, not feature parity.

EdgeSync is not a Fossil replacement — it reuses the .fossil format and the /xfer wire protocol via libfossil. The comparison is about operating shape: what runs, where, and what it costs to operate.

EdgeSync comparison table

Specifications

Three binaries. One mesh.

Language

Go (no CGo)

Modules

EdgeSync/{leaf, bridge}

Built on

libfossil · NATS · iroh (optional)

Topology

Mesh — peer / hub / leaf

NAT traversal

iroh QUIC (built-in)

Bidir messaging

notify pub-sub channel

Storage

.fossil — readable by upstream

Status

v0.0.0-dev · alpha

Related

The mesh that ties it together.

EdgeSync distributes what libfossil stores and DagNats orchestrates — the substrate agents talk on, with humans on the same wire.

Reach out

Questions about the daemon, want to use it for something, or just want to compare notes — send me an email.

[email protected]