RVRite — Package Upgrade & Technology Report

Branch tiptap-v3-upgrade · two workstreams: TipTap v2→v3 migration + dependency cleanup

✓ Vite build passes — 3575 modules, ~46s ✓ Single deduped ProseMirror copy TipTap 3.27.0

1Executive summary

Two pieces of work landed on this branch. (A) The editor core was migrated from a fragile mixed TipTap v2 install (betas + v1 dead weight) to a clean, consistent TipTap 3.27.0. (B) The frontend and collab-server package.json files were then pruned of confirmed-unused dependencies.

v2→v3
TipTap core upgrade (3.27.0)
+6
New core packages added
33
UI packages pruned (unused)
3
Server packages pruned
118
Files touching TipTap / ProseMirror
102
prosemirror-* imports rewritten (73 files)

2Major Changes

High-level summary of the most significant architectural, dependency, and API changes completed during the TipTap v3 migration.

Area Before After Impact
TipTap Version Mixed v2 versions (2.0.0-beta.199, 2.0.3, 2.1.x, 2.4.0) Unified v3.27.0 High
ProseMirror Imports prosemirror-* imports @tiptap/pm/* imports Critical
Yjs Integration y-prosemirror @tiptap/y-tiptap Critical
Table Extensions Separate table packages @tiptap/extension-table Medium
List Extensions Multiple list packages @tiptap/extension-list Medium
History @tiptap/extension-history UndoRedo from @tiptap/extensions High
Collaboration Cursor Old cursor package v3-compatible caret architecture Medium
TextStyle Default export Named export Low
setContent / clearContent No update emission control emitUpdate: false Medium
Unused Packages Present Removed Low
Build Process Standard build Memory-optimized build Medium
React Cleanup Potential teardown crashes Safe destroy guards High
Result: The migration standardizes the editor stack on TipTap v3.27.0, removes legacy dependencies, eliminates ProseMirror duplication risks, modernizes Yjs collaboration, and improves overall stability, maintainability, and build reliability.

3TipTap core upgrade (v2-mixed → v3.27.0)

The baseline was not clean v2 — it mixed 2.0.0-beta.199, 2.0.3, 2.1.x, 2.4.0 and a dead tiptap@1.32.2. Every @tiptap/* package is now pinned to one consistent minor (^3.27.0).

PackageBeforeAfterChange
@tiptap/core(transitive 2.0.3)^3.27.0now explicit
@tiptap/pm(transitive 2.26.2)^3.27.0now explicit
@tiptap/react2.0.0-beta.113^3.27.0upgrade
@tiptap/starter-kit2.0.0-beta.189^3.27.0upgrade
@tiptap/suggestion2.1.12^3.27.0upgrade
@tiptap/extension-blockquote2.0.0-beta.199^3.27.0upgrade
@tiptap/extension-collaboration2.0.0-beta.199^3.27.0upgrade
@tiptap/extension-color2.0.0-beta.199^3.27.0upgrade
@tiptap/extension-highlight2.0.0-beta.199^3.27.0upgrade
@tiptap/extension-image2.0.0-beta.209^3.27.0upgrade
@tiptap/extension-link2.4.0^3.27.0upgrade
@tiptap/extension-mention2.1.12^3.27.0upgrade
@tiptap/extension-paragraph2.0.0-beta.199^3.27.0upgrade
@tiptap/extension-subscript2.0.0-beta.204^3.27.0upgrade
@tiptap/extension-superscript2.0.0-beta.204^3.27.0upgrade
@tiptap/extension-table2.0.0-beta.199^3.27.0upgrade + absorbs cell/row/header
@tiptap/extension-text-align2.0.0-beta.199^3.27.0upgrade
@tiptap/extension-text-style2.0.0-beta.199^3.27.0upgrade (default→named export)
@tiptap/extension-underline2.0.0-beta.220^3.27.0upgrade

4New packages introduced by the migration

PackageVersionWhy it was added
@tiptap/core^3.27.0Promoted to an explicit dependency (pin the v3 base).
@tiptap/pm^3.27.0Single source of ProseMirror — eliminates the duplicate-PM instanceof class of bugs.
@tiptap/extension-list^3.27.0Consolidates BulletList / OrderedList / ListItem / TaskList / TaskItem / ListKeymap.
@tiptap/extensions^3.27.0Provides UndoRedo (replaces @tiptap/extension-history) and other bundled utils.
@tiptap/y-tiptap^3.0.5v3's Yjs ⇄ ProseMirror binding — replaces y-prosemirror. Keeps track-changes ↔ collab undo in sync.
y-protocols^1.0.7Yjs awareness peer required by the v3 collaboration tree.

The migration also briefly added @tiptap/extension-collaboration-caret (the v3 rename of collaboration-cursor), but the cleanup later removed it — the main editor uses a vendored caret extension (§5).

5Packages removed or folded in by v3

Removed package (v2)Replacement in v3
@tiptap/extension-table-cell / -table-row / -table-headerNamed exports of @tiptap/extension-table
@tiptap/extension-task-list / -task-itemNamed exports of @tiptap/extension-list
@tiptap/extension-historyUndoRedo from @tiptap/extensions
@tiptap/extension-collaboration-cursorVendored collaboration/collaboration-cursor.ts (v3-compatible)
@tiptap/extension-character-countDropped — no getCharacterCount() usage in the app
@tiptap/extension-code-block-lowlightDropped — StarterKit's plain codeBlock is used
@tiptap/htmlDropped — no generateHTML/JSON usage
tiptap (v1.32.2)Dropped — dead v1 meta-package, never imported

6Code & technology migration details

ProseMirror normalization make-or-break for track changes

Yjs collaboration glue

StarterKit & API call-site changes

Build & toolchain

7Dependency cleanup (unused-package prune)

After the migration, every declared dependency was checked against real imports (JS/TS/JSX/SCSS/CSS/HTML, dynamic imports, CSS imports, peer-dep roles). Confirmed-unused packages were removed. Only the production build moved to Vite (build/prodbuildvite build); the dev server still runs react-scripts start, so react-scripts and its CRA tooling are kept. The dead eslintConfig block was removed.

RVRite_ui — 34 removed

29 dependencies:

@createnextapp/async-local-storage · @date-io/date-fns · @hocuspocus/extension-sqlite · @hocuspocus/server · @hocuspocus/transformer · @hookform/resolvers · @react-keycloak/web · @testing-library/user-event · @tinymce/tinymce-react · @tiptap/extension-collaboration-caret · @types/google.accounts · @typescript-eslint/parser · @vitejs/plugin-legacy · chart.js · devextreme-react · diff · groq-sdk · jstoxml · jwt-decode · jwt-encode · katex · keycloak-js · lowlight · randomcolor · raw-loader · react-katex · remixicon · tinymce · zod

4 devDependencies:

@originjs/vite-plugin-commonjs · @prettier/plugin-php · prettier · vite-tsconfig-paths

RVRite_server — 3 removed

@hocuspocus/extension-webhook · @tiptap/html · js-base64

Kept (look unused, but needed)

react-scripts (CRA dev server — npm start) · @tiptap/suggestion (mention peer) · y-protocols (collab peer) · pdfjs-dist (via react-pdf) · web-vitals (dynamic import) · sass (SCSS compiler) · bootstrap / devextreme (CSS imports)

Note: package-lock.json is intentionally not yet regenerated — run npm install in both projects to sync lockfiles and prune node_modules.

8Current technology stack

LayerTechnologyVersionRole
EditorTipTap (core/react/starter-kit/extensions)^3.27.0Rich-text editor framework
Editor@tiptap/pm (ProseMirror)^3.27.0Document model / view / transforms
Collab (CRDT)Yjs + @tiptap/y-tiptap + y-protocols13.5.x / 3.0.5 / 1.0.7Conflict-free real-time sync
FrontendReact + React DOM^18.2.0UI framework
FrontendVite^5.0.12Production build (build/prodbuild)
Frontendreact-scripts (CRA)^5.0.1Dev server (npm start)
StylingSass (Dart Sass)^1.55.0Global stylesheet compilation
Collab serverHocuspocus (server)^1.1.3WebSocket collaboration (RethinkDB-backed)
Collab serverHocuspocus (API sync)^2.0.6Node ⇄ MySQL session bridge
BackendPHP / Laravel^8.2 / ^10REST persistence, queues, export
BackendLaravel Horizon / Reverb^5.27 / ^1.1Queue workers / WebSocket broadcast
DatabasesMySQL / RethinkDB8.0 / latestRelational storage / live collab state

Sources: git diff of RVRite_ui/package.json & RVRite_server/package.json (committed → working tree) · RVRite_ui/TIPTAP_V3_MIGRATION_PLAN.md
Branch tiptap-v3-upgrade · report generated 2026-06-19

Created by : Naveen T M |  Software Engineer  | River Valley Technologies