Developer toolkit

One tree. Every surface.

A framework-agnostic SDK, a batteries-included Nuxt module, an MCP server — plus the composables, page types, and plugin surface built on top. Your app, your framework, and your AI agent all live in the same document tree.
Zero config

Three lines. You're live.

Install. Add the module. Wrap your app. Every collaboration primitive auto-imports — components, composables, server runners.

  • Zero boilerplate — auto-imports light up on install.
  • Toggle features: editor, search, renderers, sync.
  • Nitro service account for server-side runners.
  • SSR-friendly with doc-tree cache on the edge.
1
~/app
$|
added 3 packages · 1.2 s
2
nuxt.config.tsts
export default defineNuxtConfig({
|
|
})
3
localhost:3000
ABY
<AProvider>
my-app
synced · 1 peers
Composables

A hundred composables, auto-imported.

Every collaboration primitive is one function call away — no manual imports, no plumbing. Editor, auth, sync, search, voice, files — all reactive.

  • Auto-imported via Nuxt's compiler magic.
  • All reactive — Y.Doc → ref in one line.
  • Scoped per-document, per-field, per-peer.
  • Tree-shakable — features you don't use compile away.
auto-imports44+
(useAbracadabra)(useYDoc)(useChildTree)(useDocTree)(useConnectionStatus)(useAbracadabraAuth)(usePasskeyAccounts)(useDevicePairing)(useIdentityDoc)(useDocumentPermissions)(useAwareness)(useAwarenessPeers)(useAAField)(useFollowUser)(useBroadcastSync)(useBackgroundSync)(useCrossWindowSync)(useEditor)(useEditorToolbar)(useEditorMentions)(useEditorEmojis)(useEditorSuggestions)(useChat)(useNotifications)(useCommandPalette)(useWindowManager)(useDashboard)(useTableView)(useCalendarView)(useTimelineView)(useSlidesNavigation)(useSpatialCamera)(useFavorites)(useTrash)(useFileBlobStore)(useFileIndex)(useFileTransfer)(useOfflineUploadQueue)(useDocExport)(useDocImport)(useSearchIndex)(useMediaPlayback)(useVoice)(useWebRTC)
Core Auth Sync Editor UI Files Voice
Aware components

Components that know who's touching them.

Drop-in aware primitives broadcast hover, focus, press, and typing to every connected peer. Field-level presence, zero config.

  • Hover halos show who's inspecting what.
  • Focus rings reveal who's editing which field.
  • Typing indicators travel with keystrokes.
  • Built on the server's awareness frame — no extra wire.
demo.ac.cou.sh/aware
ABY
<AButton>
<AInput>
your magic word…
<ATextarea>
useAAField('save-btn') → { hoveredBy, pressedBy, focusedBy }
Editor

TipTap with carets included.

Full rich-text editor with collaboration caret, awareness, drag handles, slash commands, and 30+ extensions — one composable.

  • Colored carets + name pills for every peer.
  • Selection highlights travel with each user.
  • Slash menu, mentions, emoji — plug-in extensible.
  • Conflict-free merge through Yjs CRDT.
demo.ac.cou.sh/doc/retro-notes
ABY
useEditor(ydoc)

AliceReal-time collaboration,

rendered by TipTap with

presence, carets, and comments.Yuki

Renderers

Fifteen page types. One tree.

Switch a document's type — Kanban, Table, Calendar, Gallery, Outline and ten more — and the same children render as cards, rows, events, tiles, or bullets.

  • Change meta.type, render flips instantly.
  • Same children — no data copy, no migration.
  • Register custom page types via plugins.
  • Every renderer is awareness-enabled.
demo.ac.cou.sh/doc/roadmap
type: "kanban"
Backlog
In Progress
Done
Plugins

Extend everything.

One plugin object can add TipTap extensions, toolbar groups, slash commands, page types, and server-side runners. All typed, all hot-reloadable.

  • One interface — `AbracadabraPlugin`.
  • Fully typed — auto-complete in your editor.
  • Hot-reload in dev; lazy-load in prod.
  • Server runners extend Nitro via the same plugin.
my-plugin.tsts
const myPlugin: AbracadabraPlugin = {
name: 'feature-x',
extensions: () => [...]
toolbarItems: () => [...]
suggestionItems: () => [...]
pageTypes: [{ type, component }]
clientSetup: async (state) => ...
}
hooks
Editor toolbartoolbar
Slash menuslash
Page registrypageTypes
Server runnersrunners
Provider

Yjs in, real-time out.

The provider wraps any Y.Doc, persists every update to IndexedDB, speaks Hocuspocus V2 to the server, and resolves your effective role — all from one constructor.

  • Framework-agnostic — React, Vue, Svelte, vanilla.
  • IndexedDB persistence — every update queued offline.
  • Subdocument tree — lazy or eager loading.
  • Effective role cached locally for offline gating.
AbracadabraProvider connecting
Y.Doc
{}Y.Map
[ ]Y.Array
TY.Text
update
WebSocketws://…/ws
IndexedDBoffline queue
MCP bridge

Your docs, now AI-native.

The MCP server exposes every doc, space, and chat channel to your AI coding agent, your terminal, and any MCP client. One command, and your AI agent is in the tree.

  • Works with any Model Context Protocol client.
  • 40+ tools — read, write, search, chat, upload.
  • Inherits your user role — no bypass.
  • Awareness-aware — the agent shows up as a peer.
mcp-agent
>
MCP
tools
list_spaces read_document write_document find_document send_chat_message upload_file list_connected_users update_metadata
doc tree
Hub
Projects
Roadmap 2026
Sprint Planning
Retro Notes
Team Chat
Install

Install anywhere.

One pnpm command per package — the framework-agnostic core, the Nuxt module, the MCP server, schema and converters. Mix what you need.

@abraca/dabra

The framework-agnostic core SDK — provider, client and CRDT sync for React, Vue, Svelte or vanilla JS.

@abraca/nuxt

First-class Nuxt 4 module: auto-imported composables, components and SSR-friendly doc rendering.

@abraca/mcp

MCP server that lets AI agents read and write your docs, spaces and chat as real users.

@abraca/schema

The universal document-metadata and page-type registry shared across every client.

@abraca/convert

Loss-free conversion between documents and Markdown, HTML and JSON fragments.

Your turn to build.

Clone the starter. Wrap in <AProvider>. Ship the magic.