Skip to content

EpicenterHQ/epicenter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12,681 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Epicenter

Epicenter

Local-first, open-source apps

Own your data. Use any model you want. Free and open source ❤️

GitHub stars License Discord macOS Windows Linux

AppsFor DevelopersVisionContributingDiscord


What is Epicenter?

Epicenter is an ecosystem of open-source, local-first apps. Our goal is to store all of your data—notes, transcripts, chat histories—in a single folder of plain text and SQLite. Every tool we build shares this memory. It's open, tweakable, and yours. Grep it, open it in Obsidian, host it wherever you'd like.

The library that powers this, @epicenter/workspace, is something other developers can build on too. Define a schema, get CRDT-powered tables that materialize down to SQLite files and markdown, with multi-device sync handled for you.

Apps

Press shortcut, speak, get text. Desktop transcription that cuts out the middleman. Bring your own API key or run locally with Whisper C++.

Source · Install

Chrome extension for saving tabs as bookmarks and building a read-later list, all stored in the shared workspace.

Source

The hub server. Handles authentication, real-time sync via Durable Objects, and AI inference. Everything that needs a single authority across devices.

Source

More coming

The workspace library makes it straightforward to add new apps that share the same data. Notes, assistants, and other tools are in various stages of development.

For Developers

The hard problem with local-first apps is synchronization. If each device has its own SQLite file, how do you keep them in sync? If each device has its own markdown folder, same question. We ended up using Yjs CRDTs as the single source of truth, then materializing that data down to SQLite (for fast SQL reads) and markdown (for human-readable files). Yjs handles the sync; SQLite and markdown handle the reads.

The @epicenter/workspace package wraps this into a single API. Define a schema, get CRDT-backed tables, attach providers to materialize to SQLite or markdown, and add sync when you're ready.

import { defineWorkspace, createClient, id, text, boolean, select } from '@epicenter/workspace';

const workspace = defineWorkspace({
  id: 'blog',
  tables: {
    posts: {
      id: id(),
      title: text(),
      published: boolean({ default: false }),
      category: select({ options: ['tech', 'personal'] }),
    },
  },
  kv: {},
});

const client = createClient(workspace.id)
  .withDefinition(workspace)
  .withExtension('persistence', setupPersistence)
  .withExtension('sqlite', (c) => sqliteProvider(c));

// Write to the Y.Doc — SQLite updates automatically
client.tables.get('posts').upsert({ id: '1', title: 'Hello', published: false, category: 'tech' });

Each user gets their own database. Schema definitions are plain JSON, so they work with MCP and OpenAPI out of the box. Write to Yjs and SQLite updates; edit a markdown file and the CRDT merges it in.

Read the full workspace docs →

Where We're Headed

The goal is a personal workspace where every app you use shares the same memory, your data stays on your machine, and you choose your own models. Epicenter Cloud will provide hosted sync infrastructure for people who don't want to run their own server—the same model as Supabase selling hosted Postgres or Liveblocks selling hosted collaboration. Enterprise features (team management, SSO, admin dashboards) will live in a separate proprietary layer.

Self-hosting is and will remain a first-class option. The sync server is open source under AGPL, and when you run it on your own infrastructure, you control the encryption keys and trust boundary.

Quick Start

Install Whispering

brew install --cask whispering

Or download directly from GitHub Releases for macOS (.dmg), Windows (.msi), or Linux (.AppImage, .deb, .rpm).

Full installation guide →

Build from Source

# Prerequisites: Bun (https://bun.sh) and Rust (https://rustup.rs)
git clone https://github.com/EpicenterHQ/epicenter.git
cd epicenter
bun install
cd apps/whispering
bun dev

Troubleshooting

If things break after switching branches or pulling changes:

bun clean    # Clears caches and node_modules
bun install  # Reinstall dependencies

For a full reset including Rust build artifacts (~10GB, takes longer to rebuild):

bun nuke     # Clears everything including Rust target
bun install

You rarely need bun nuke—Cargo handles incremental builds well. Use bun clean first.

Contributing

We're looking for contributors who are passionate about open source, local-first software, or just want to build with Svelte and TypeScript.

Read the Contributing Guide →

Contributors coordinate in our Discord.

Tech Stack

Svelte 5 Tauri TypeScript Rust Yjs Cloudflare Workers Tailwind CSS

License

Most packages and all apps are MIT—use them however you want, no strings attached. The sync server (apps/api) and sync protocol (packages/sync) are AGPL-3.0, which means anyone hosting a modified version shares their changes. This follows the same pattern as Yjs (MIT core, AGPL y-redis), Liveblocks (Apache clients, AGPL server), and Bitwarden (GPL clients, AGPL server).

See FINANCIAL_SUSTAINABILITY.md for the full reasoning behind the split.


Contact: github@bradenwong.com | Discord | @braden_wong_

Own your data · Local-first · Open source