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.
SDK v3.0 — early, but real
The packages are published and usable today, but APIs may still shift before they settle. Pin exact versions and watch the changelog. The server protocol is stable; the SDK ergonomics are catching up.
@abraca/nuxt

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
@abraca/nuxt · composables

Seventy 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
@abraca/nuxt · aware

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 }
@abraca/nuxt · 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

@abraca/nuxt · renderers

Five page types. One tree.

Switch a document's type — Kanban, Table, Calendar, Gallery, Outline — 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
@abraca/nuxt · 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
@abraca/dabra · 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
@abraca/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.

Any package manager. Any Nuxt 4 app. Any framework — the core SDK has zero opinions.
pnpmpnpm add @abraca/nuxt
npmnpm i @abraca/nuxt
yarnyarn add @abraca/nuxt
bunbun add @abraca/nuxt

Nuxt 4

module

Vue 3

composition

TipTap 2

editor

Yjs 13+

CRDT

Your turn to build.

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