The Tiptap relationship
Familiar Core APIs with explicit package identity and view boundaries.
QuireKit extends Tiptap Core code and its extension model, retaining the relevant license notices. It is more than a runtime wrapper around an installed @tiptap/core: Core and ProseMirror packages are maintained under @quirekit, with explicit view integration.
Familiar concepts
new Editor(), Extension.create(), Node.create(), Mark.create(), .configure(), .extend(), editor.commands, editor.chain(), editor.can(), input rules, keyboard shortcuts, storage and lifecycle hooks retain familiar authoring patterns.
Common matching commands
| Task | Entry points | Requirement |
|---|---|---|
| Read and write content | getJSON(), getHTML(), commands.setContent(), insertContent(), clearContent() | Content matching the active schema |
| Selection and focus | focus(), blur(), setTextSelection(), setNodeSelection(), selectAll() | Mounted view and valid document positions |
| Marks and attributes | setMark(), toggleMark(), unsetMark(), updateAttributes() | Registered target Node / Mark |
| Common formatting | toggleBold(), toggleItalic(), toggleHeading(), toggleBulletList() | Matching extensions or StarterKit |
| History | undo(), redo() | Registered history extension |
Except for getJSON() / getHTML(), access these commands through editor.commands or editor.chain().
This is a practical migration list, not a compatibility claim for every ecosystem package. Current public types own the parameters and return values.
Migration map
| Tiptap project | QuireKit project | Check |
|---|---|---|
@tiptap/core | @quirekit/core | Type-check against current public exports |
@tiptap/starter-kit | @quirekit/starter-kit | Review options and installed extensions |
@tiptap/pm/* / prosemirror-* | Matching @quirekit/pm-* or @quirekit/pm | Keep a single PM identity per instance |
| Default DOM mount | Explicit DomViewExtension, mode: 'dom' | Other backends need their own presentation support |
| Tiptap Vue / React wrappers | Host-owned Core creation and disposal | Do not assume unchanged wrapper compatibility |
Highly aligned APIs do not guarantee that every ecosystem plugin runs unchanged. Plugins relying on DOM NodeViews, browser geometry, private fields or native DOM selection need corresponding view support for Canvas/SVG. Review third-party licensing and package identity too.
A migrated extension
This site-authored shortcut extension uses the same command registry and history. It is an example, not a built-in plugin.
import { Extension } from "@quirekit/core";
/** A host-authored behavior extension using the same typed command registry as the toolbar. */
export const writingShortcuts = Extension.create({
name: "writingShortcuts",
/** @returns A keyboard binding that participates in the editor's existing history. */
addKeyboardShortcuts() {
return { "Mod-Shift-b": () => this.editor?.commands.toggleBold() ?? false };
},
});
Quick start runs it. Continue with the extension model.
State and replacement differences in products
Read external native PM state through editor.state.pm; contextual raw-command state remains the PM facade. Use QuireKit replaceDocument() for complete file restoration including root attributes; setContent() retains ordinary content-replacement semantics. See Editor API for inputs, results and lifetime.