epicenter-so

epicenter: Build Local-First Apps With Synchronized Data

Epicenter is a TypeScript project for building local-first apps around a store users own. It keeps app data on-device in a Yjs document and synchronizes it across signed-in devices, with Honeycrisp as its current example.

TypeScriptOther licenseLocal FirstDatabaseSelf Hosted
Stars
4.8k
Forks
385
Stars, last 10 days
+3

Our take

Health score

59/100

How it is scored
Activity
77
Community
34
Issues
53
Pull requests
73

+3 stars in the last 10 days

  • Slower to close issues than 89% of the projects we track

Overview

Epicenter is a platform and collection of apps built around local-first data: each app's data lives in a Yjs document on the user's device, so it remains available offline. When a user signs in on another device, the documents synchronize rather than relying on a server as the only copy.

It is aimed at developers building apps where offline access and user control of data matter. Its store exposes synchronous reads and writes after an asynchronous open step. Honeycrisp, a notes app, is the current app running on the store. Other apps in the repository use separate storage approaches, so Epicenter is not a single uniform app suite.

Key Features

  • Stores an application's data in one Yjs document, with tables, key-value data, and rich content.
  • Provides a synchronous data API after the database is opened.
  • Supports offline use, then syncs document updates across signed-in devices.
  • Uses a Cloudflare Durable Object per account and application as the sync authority.
  • Includes Honeycrisp as a working local-first notes app built on the store.
  • Includes shared packages for data, SQLite adapters, sync, UI, and server functionality.
  • Offers hosted and self-hosted server paths, with different infrastructure trust boundaries.

Use Cases

  • Build a notes or similar personal app that must remain usable without a network connection.
  • Prototype a local-first application with structured rows and collaborative rich text stored together.
  • Develop applications where users should retain a local copy rather than depend on a server-held dataset.
  • Run the sync authority on infrastructure you control when the hosted service is outside your trust boundary.

Getting Started

Clone the repository and install dependencies with Bun:

git clone https://github.com/EpicenterHQ/epicenter.git
cd epicenter
bun install

See the README for app-specific development commands and setup requirements.

Considerations

  • The README describes a desktop SPA in a WebView as the supported runtime. A hosted web runtime with a host-owned data replica and third-party installed apps are not supported.
  • Signed-in sync sends opaque update bytes to a server that can read the data in plaintext. Self-hosting lets operators control that infrastructure boundary.
  • The repository contains apps at different stages: Honeycrisp runs on the store, some apps compile against it, and others use separate storage systems.
  • The API development setup requires local Postgres and Infisical. Tauri apps require Rust.
  • The supplied license field is NOASSERTION, while the README describes AGPL-3.0 licensing. Check the repository's license files before using or distributing it.

Found this useful?

Share it with someone who would like epicenter.