--- applyTo: '**' --- # Tiptap This document explains how to work on the Tiptap monorepo in VS Code. It covers repo layout, local dev, linting and formatting, tests, docs, and release workflow. It is written to be friendly for both humans and AI coding assistants. --- ## What is Tiptap Tiptap is a headless rich text editor toolkit built on ProseMirror. It ships a small Core and many opt-in Extensions so you can compose exactly the editor you need for React, Vue, or vanilla apps. The project is optimized for user experience and developer experience. APIs are predictable, behavior is testable, and everything should be documented with JSDoc and runnable examples so we can generate API docs automatically. Key points for AI assistants: - Treat Tiptap as a collection of focused packages that together form an editor system. - Do not assume a single framework. Many packages are framework agnostic, with separate bindings for React and Vue. - Favor small pure utilities and deterministic code. Side effects should be explicit. --- ## Repository layout ``` . ├─ packages/ # Core and all first-party extensions │ ├─ core/ # Editor core (@tiptap/core) │ ├─ extension-*/ # Individual extensions │ ├─ pm/ # ProseMirror related internals and helpers │ └─ ... # Shared utilities, framework bindings, etc. ├─ demos/ # Vite app for live examples and colocated e2e specs │ ├─ src/ │ │ ├─ react/ # React demos │ │ └─ vue/ # Vue demos │ └─ test/ # Playwright helpers (getEditor, setEditorContent, ...) ├─ .changeset/ # Changesets for versioning and changelogs └─ .github/ # Workflows and docs like this file ``` Notes: - All packages we publish or use live under `packages/*`. - The `demos/` folder contains a Vite app. It automatically discovers and parses React and Vue demos so they appear in the UI without manual wiring. - Playwright e2e specs live alongside their demos as `demos/src/**/index.spec.ts`. `playwright.config.ts` auto-starts the Vite dev server on `http://127.0.0.1:4080` — no need to launch it manually. ## NPM scripts Scripts defined at the repo root. Run them with `vp run