Presets and features
| Preset | Features | Backend / Yjs | Bundle isolation (check:editor-entries) |
|---|---|---|---|
simple (SimpleEditor, simpleEditor()) | core | none | no feature, integration, AI SDK, Yjs, y-tiptap, Hocuspocus, Nuxt or server modules in the emitted chunks |
React SimpleEditor + EditorToolbar (./react/simple, ./react) | core | none | no vue, @vue, @tiptap/vue-3, Nuxt UI or Vue-layer module in the emitted chunks (react-simple fixture); the headless core (core-headless fixture) contains no Vue, React or layer module at all |
core + mediaFeature() | core, media | uploads only (a backend with assets) | no Typed block, AI, Yjs, Nuxt or sibling-feature modules |
core + mentionsFeature() | core, mentions | built-in @/# lists only (or host lists) | same |
core + transcriptFeature() | core, transcript | none | same |
core + authorsFeature() | core, authors | none | same |
core + themesFeature() | core, themes | /api/editor/themes[/:id] (adapter listThemes/loadTheme) | no Typed block, AI, media, mentions, transcript, authors, comments, collaboration, block-UI, integration, Yjs or Nuxt modules |
core + collabFeature() + commentsFeature() | core, collab, comments | /collab/:id websocket (comments live in the Y.Doc) | no Typed block, AI, media, mentions, transcript, authors, block-UI, integration or Nuxt modules; Yjs is bundled |
core + aiFeature() | core, ai | /api/ai/{models,generate,chat,complete} (see AI) | no Typed block, transcript, media, mentions, collaboration, integration, Yjs or Nuxt modules |
core + media + composites + aiFeature() + compositeAiFeature() | core, media, composites, ai, composite-ai | AI endpoints plus /api/ai/extract | no transcript, mentions, collaboration, other integration, Yjs or Nuxt modules |
core + transcriptFeature() + aiFeature() + transcriptAiFeature() | core, transcript, ai, transcript-ai | AI endpoints plus /api/ai/transcript-cleanup | no Typed blocks, media, mentions, collaboration, other integration, Yjs or Nuxt modules |
core + collabFeature() | core, collab | /collab/:id websocket (Nuxt module) or any Hocuspocus server on the advanced schema | no Typed block, AI, media, mentions, block-UI, integration or Nuxt modules; Yjs is bundled |
core + blockUiFeature() | core, block-ui | none | no Typed block, AI, media, mentions, collab-feature or Nuxt modules (the drag handle's upstream package bundles Yjs support code) |
core + compositeFeature() | core, composites | none | no AI, media, transcript, mentions, collaboration, block-UI, integration, Yjs or Nuxt modules |
core + composites + transferFeature() | core, composites, transfer | none (copy only; the AI transforms summary and bullets come from integrations/composite-ai, which composeEditor adds with ai on) | no AI, media, transcript, mentions, collaboration, integration, Yjs or Nuxt modules in the framework-free transfer entry; its bindings add their framework's layer only |
core + media + composites + compositeMediaFeature() | core, media, composites, composite-media | uploads only | no AI, transcript, mentions, collaboration, other integration, Yjs or Nuxt modules |
DocumentTree (./tree/vue or ./tree/react) beside core + media + composites | tree, core, media, composites | the host's DocumentStore | no AI, transcript, mentions, collaboration, block-UI, integration, Yjs or Nuxt modules; the simple bundle never contains the tree; the React tree contains no Vue module (tree-react fixture), the framework-free ./tree no Vue and no React (headless-tree fixture) |
advancedEditor() / AdvancedEditor (./vue/advanced) | every feature (including themes) and integration, Vue bindings | /collab/:id, AI endpoints, assets, users/tags, themes (Nuxt module plus a host adapter, or a host server) | requires all feature and integration modules; no React, sonner, Nuxt, nitropack, h3, vue-router or server code in the browser bundle (advanced fixture) |
advancedEditor() / AdvancedEditor (./react/advanced) | every feature (including themes) and integration, React bindings | the same endpoints, through the Nuxt host or a host server (examples/react-advanced proxies /api and /collab to the Nuxt app) | requires all feature and integration modules; no vue, @vue, @tiptap/vue-3, Nuxt UI, Vue-layer or .vue module, no Nuxt or server code (advanced-react fixture) |
Any feature on one layer (<x>/vue, <x>/react, <x> alone) | core + that feature | as listed above | <x>-react fixtures contain no Vue or Nuxt UI module; the Vue fixtures no React, react-dom or sonner; the framework-free headless-<x> fixtures neither framework |
Settings are stored as one inert, versioned JSON object shared by all editors of an app (EditorSettings); a simple editor installs no feature that reads the non-core parts.
core is configurable (CoreContentOptions: headings or heading levels, lists, blockquote, codeBlock, rule): coreContentFeature(options) and composeEditor({ coreContent }) take it, and the schema-extension list the server derives from the preset follows, so editor and server schema cannot drift. Bundle isolation is unaffected: the options only change which StarterKit extensions are configured.
Speech port
The SpeechProvider, SpeechEngineInfo and SpeechRequest types, the speech routes and events, the daily budget, and the createOpenAiSpeech and createMemorySpeech adapters.
Feature contract
The EditorFeature, FeatureContext and EditorPreset types, what defineEditor validates and how to contribute a custom feature.