Now in Public Beta

In an async world.

GoSync

Write your sync logic once in Go. Deploy to server and browser.
Offline-first. Automatic conflict resolution. Zero vendor lock-in.

Open Source (MIT)
100% Go + WASM
Self-Hosted
The Problem

You're Writing Everything Twice.

Every sync solution forces you to duplicate business logic. Validation in JavaScript for the frontend. The same validation again in Python, Node, or Go for the backend. When they inevitably drift apart? Bugs. Data corruption. Angry users.

❌ THE OLD WAY
📄Frontend (JavaScript)
function validateTask(task) {
  if (!task.title) {
    throw "Title required";
  }
  // 50 more lines...
}
⚠️Duplicated!
📄Backend (Python)
def validate_task(task):
  if not task.title:
    raise "Title required"
  # 50 more lines...
✓ THE GOSYNC WAY
🧠Shared Brain (Go)
func ValidateTask(t *Task) error {
  if t.Title == "" {
    return errors.New("required")
  }
  // Write once, run everywhere
}
🌐
Browser (WASM)
🖥️
Server (Native)
How It Works

Three Steps. Infinite Possibilities.

01

Define Your Logic

Write your business rules, validation, and conflict resolution in pure Go. No special syntax. No framework lock-in.

02

Compile Once

GoSync builds both a WASM module for browsers and a native binary for servers. One command, two targets, zero config.

03

Deploy Everywhere

Run the same logic on your server and in every client browser. Changes sync automatically via Merkle Tree deltas.

🐕 Dogfooding Demo

Real-Time Sync Inspector

Watch data flow from Browser → Server in real-time.
Toggle offline to see the queue build up.

(Loads real WASM binary ~1.2MB. Runs locally in your browser.)

Features

Everything You Need. Nothing You Don't.

True Offline-First

Apps continue to work perfectly—read and write—without internet. Data syncs automatically when you're back online.

Bandwidth Efficient

Compare Merkle roots first. If they match, zero data sent. If not, drill down to only the changed items.

Deadlock-Free

Custom non-blocking I/O prevents the WASM runtime from freezing your browser during heavy sync operations.

Type-Safe

End-to-end type safety from database to browser. No more 'any' casting. Go structs define the contract everywhere.

Massive Storage

Bypasses LocalStorage's 5MB limit. Uses IndexedDB to store gigabytes of offline data in the browser.

Zero Dependencies

The server compiles to a single, static binary. No JVM, no Python runtime, no complex environment setup required.

Developer Experience

It's Just Go. That's It.

No DSLs. No config files. No magic syntax. Define your models, register them, and you're syncing.

sync.go
1package main
2
3import "github.com/harshalpatel2868/gosync"
4
5type Task struct {
6 ID string `gosync:"pk"`
7 Title string
8 Completed bool
9 UpdatedAt time.Time `gosync:"lww"`
10}
11
12func main() {
13 engine := gosync.New()
14 engine.Register(&Task{})
15 engine.Listen(":8080") // That's it!
16}
Use Cases

Built for the Real World.

Don't just build apps. Build resilient systems that survive the chaos of the real world.

Field Operations

Logistics, Delivery, Inspection Apps
The Problem

Signal drops in basements and rural areas. The app spins. Data is lost.

The GoSync Fix
  • True Offline: The driver's app writes to local storage instantly. No spinners.
  • Queueing: GoSync holds the "Delivered" status in a persistent queue.
  • Auto-Reconcile: The second they hit 4G, the Merkle Tree syncs just that one record.

Point of Sale

Retail, Kiosks, Inventory
The Problem

Internet goes down during the morning rush. The POS stops. Revenue stops.

The GoSync Fix
  • Business as Usual: The POS continues to accept orders and modify inventory locally.
  • Unified Validation: The WASM 'Brain' ensures no invalid orders, even offline.
  • Batch Sync: When online, 500 orders sync in one optimized binary packet.

Collaborative SaaS

Kanban Boards, Note Taking, CRMs
The Problem

Two users edit the same ticket. "Last write wins" overwrites everything.

The GoSync Fix
  • Shared Logic: Both clients run the exact same Go conflict resolution code.
  • Delta Updates: GoSync detects individual field changes and merges them intelligently.

The Evolution

v1.0The FoundationLive

Core Engine

The immutable Merkle Tree foundation. Ensuring efficient delta-sync and zero data loss.

Merkle Tree Status
RootA1A2B1B2C1C2D1D2
All nodes synced
Scroll to explore