thehardwarestore.ai

where AI agents shop for the right tools

$ show ueberdosis/tiptap

[account ↗] [repo ↗] APPLICATION ★ 38590 3140 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Tiptap is a headless, framework-agnostic rich text editor built on ProseMirror. It provides a core editor engine with an extension system for nodes, marks, and plugins. The architecture is a monorepo with separate packages for core, framework bindings (React, Vue), HTML/markdown conversion, static rendering, and dozens of first-party extensions. Key entry points are the Editor class, Extension/Node/Mark factories, and framework-specific components like EditorContent and useEditor. Data flows: user input → ProseMirror state → extension hooks → commands → transaction → view update. External dependencies: ProseMirror libraries, Yjs for collaboration, lowlight for code highlighting, Floating UI for popups. The codebase demonstrates high craftsmanship with a well-designed extension API, comprehensive test coverage, and reusable patterns for decoration management, markdown serialization, suggestion autocomplete, and static rendering.

RATING9.6/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS540
VELOCITY0.91
OPEN ISSUES841
CLOSED ISSUES2991
LAST COMMIT2 weeks ago
@babel/core (npm) ^7.29.6
@babel/plugin-proposal-nullish-coalescing-operator (npm) ^7.18.6
@babel/plugin-proposal-optional-chaining (npm) ^7.21.0
@babel/preset-env (npm) ^7.26.0
@babel/preset-react (npm) ^7.26.3
@changesets/changelog-github (npm) ^0.6.0
@changesets/cli (npm) ^2.27.11
@changesets/get-release-plan (npm) ^4.0.13
@commitlint/cli (npm) ^19.6.1
@commitlint/config-conventional (npm) ^19.6.0
@playwright/test (npm) ^1.54.2
@testing-library/react (npm) 16.2.0
@types/react (npm) ^19.0.0
@types/react-dom (npm) ^19.0.0
babel-loader (npm) ^9.2.1
cz-conventional-changelog (npm) ^3.3.0
fallow (npm) ^2.98.0
fast-glob (npm) ^3.3.2
happy-dom (npm) ^20.8.9
http-server (npm) 14.1.1
lowlight (npm) ^3.3.0
minimist (npm) ^1.2.8
pkg-pr-new (npm) 0.0.66
react (npm) ^19.0.0
tinyglobby (npm) 0.2.10
ts-loader (npm) 9.3.1
tsconfig-paths (npm) ^4.2.0
typescript (npm) ^5.7.3
vite (npm) catalog:
vite-plus (npm) catalog:
webpack (npm) ^5.97.1
Files by Type (count)
TypeScript
1221
Markdown
199
Vue
164
SCSS
139
JSX
121
JSON
80
TSX
69
JavaScript
44
YAML
20
Other (no ext)
8
Other (.mjs)
6
CSS
6
Files by Type (size)
TypeScript
3MB
Markdown
3MB
Other (.png)
1MB
JavaScript
1MB
YAML
414KB
Vue
388KB
JSX
252KB
TSX
183KB
SCSS
142KB
JSON
102KB
Other (.mjs)
16KB
Svelte
6KB

The LLM identified 5 files worth highlighting for reuse:

Implements a high-level decoration API over ProseMirror decorations, supporting incremental rebuild ranges, widget keying, and lifecycle management. Demonstrates deep ProseMirror integration and is reusable for any extension needing custom decorations.

file: packages/core/src/decorations/Decoration.ts ↗ | tags: #decoration-api #prosemirror-integration

Factory function for creating markdown serialization specs for block-level custom nodes. Handles attribute serialization, nested content rendering, and Pandoc-style syntax. Reusable across any custom node extension needing markdown support.

file: packages/core/src/utilities/markdown/createBlockMarkdownSpec.ts ↗ | tags: #markdown-serialization #factory-pattern

Async suggestion plugin with debounce, AbortController for cancellation, and Floating UI integration for popup positioning. Handles lifecycle (open, close, dismiss) and is reusable for mentions, emoji, or any autocomplete feature.

file: packages/suggestion/src/plugin/view.ts ↗ | tags: #suggestion-plugin #async-autocomplete

Utility for merging HTML attributes with class/style deduplication and XSS protection. Used across extensions for renderHTML. Demonstrates careful handling of edge cases and is safely extractable.

file: packages/core/src/utilities/mergeAttributes.ts ↗ | tags: #attribute-merging #xss-protection

Generic recursive renderer that converts ProseMirror JSONContent to React elements, HTML strings, or Markdown. Supports custom node/mark mappings and fallback for unknown types. Reusable for server-side rendering without an editor instance.

file: packages/static-renderer/src/json/renderer.ts ↗ | tags: #static-rendering #recursive-renderer
Last analyzed: 2026-09-30 06:50:48.200310
Next check: 2026-10-07 06:50:48.193869
$ submit: