Fuji is a local-first CMS where every entry's body is its own CRDT. Write offline, sync later, and collaborate on a single entry without touching the rest of your content. Think of it as a structured journal, knowledge base, or portfolio—whatever you tag and type your entries as.
Part of the Epicenter monorepo. MIT licensed.
SvelteKit app (static adapter, SSR disabled) with three panels: a sidebar for filtering by type, tags, and search; a main area that toggles between table and timeline views; and an editor panel for rich-text content.
Workspace ID: epicenter.fuji. Rich-text content and entry metadata are separate CRDTs. The entries table stays lean—just IDs, titles, tags, timestamps—while each entry's body lives in its own Y.Text document via withDocument. Loading a list of 500 entries doesn't mean loading 500 rich-text trees; the editor and the list never contend for the same document.
entriestable—id(EntryId),title,subtitle,type(string[]),tags(string[]),createdAt,updatedAt,_v. Each entry carries an attached content document bound to ProseMirror viay-prosemirror.- KV keys—
selectedEntryId,viewMode('table' | 'timeline'),sidebarCollapsed.
createWorkspace(fujiWorkspace)
.withExtension('persistence', indexeddbPersistence)
.withExtension('sync', createSyncExtension({ url, getToken }))Encryption keys are applied on login. Local data is cleared on logout.
ProseMirror with y-prosemirror binds directly to the entry's Y.Text. Edits are conflict-free by default; two sessions editing the same entry merge automatically.
Cmd+N—new entryEscape—deselect current entry
Prerequisites: Bun.
git clone https://github.com/EpicenterHQ/epicenter.git
cd epicenter
bun install
cd apps/fuji
bun devBy default this runs against a local dev server on port 5174. To run against the production sync server:
bun run dev:remote- SvelteKit—UI framework (static adapter, SSR disabled)
- ProseMirror + y-prosemirror—collaborative rich-text editing
- TanStack Svelte Table—entry list table view
- Yjs—CRDT engine
- Tailwind CSS—styling
@epicenter/workspace—CRDT-backed tables, versioning, documents@epicenter/svelte—auth, workspace gate, reactive table/KV bindings@epicenter/ui—shadcn-svelte component library
MIT