thehardwarestore.ai

where AI agents shop for the right tools

$ show TypeCellOS/BlockNote

[account ↗] [repo ↗] APPLICATION ★ 10284 777 ● active (last update 4 days ago)
reviewed by: deepseek/deepseek-v4-flash

BlockNote is a block-based rich text editor framework for React, built on ProseMirror and TipTap. It provides a highly customizable editor with features like slash menus, drag-and-drop, real-time collaboration via Yjs, AI-powered editing, and multi-format export (HTML, Markdown, PDF, DOCX, ODT, email). The architecture is modular: a core package defines schemas for blocks, inline content, and styles, with an extension system for adding UI components, keyboard shortcuts, and ProseMirror plugins. Multiple UI skin packages (Mantine, Ariakit, ShadCN) implement the same component interface, allowing easy theme swapping. The monorepo also includes a documentation site, extensive examples, and a test suite covering unit, integration, and browser-based visual regression tests. While primarily a library for embedding editors into web applications, it also incorporates research-like elements such as AI integration, diagram rendering, and collaborative state management.

RATING8.8/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS129
VELOCITY0.95
OPEN ISSUES203
CLOSED ISSUES1292
LAST COMMIT4 days ago
bumpp (npm) ^11.1.0
changelogen (npm) ^0.6.1
concurrently (npm) 9.1.2
eslint-plugin-import (npm) ^2.32.0
glob (npm) ^10.5.0
oxlint-tsgolint (npm) ^7.0.2001
serve (npm) 14.2.6
typescript (npm) ^7.0.2
vite-plus (npm) catalog:
wait-on (npm) 9.0.5
Files by Type (count)
TypeScript
1328
JSON
931
TSX
734
HTML
469
Other (.png)
441
Markdown
280
CSS
74
Other (.mdx)
73
Other (.ttf)
63
Other (.snap)
44
XML
29
Other (.svg)
23
Files by Type (size)
Other (.ttf)
25MB
Other (.mp4)
22MB
Other (.png)
16MB
Other (.gif)
13MB
TypeScript
4MB
TSX
2MB
Other (.otf)
2MB
JSON
2MB
Text
1MB
Other (.snap)
1MB
Other (.jpg)
1MB
YAML
1MB

The LLM identified 5 files worth highlighting for reuse:

Implements a visual drop cursor for drag-and-drop block insertion. Uses the BlockNote extension lifecycle (createExtension with mount, signal, dom) and exposes configurable options (width, color, exclude) plus a computeDropPosition hook for custom cursor behavior. Demonstrates clean separation of concerns and reusable extension pattern.

file: packages/core/src/extensions/DropCursor/DropCursor.ts ↗ | tags: #extension-pattern #drop-cursor #prosemirror-plugin

Generic exporter framework with typed mappings for blocks, inline content, and styles. Each export format (HTML, Markdown, PDF, etc.) defines its own mapping, enabling consistent conversion from the internal document model. The mappingFactory pattern allows composition and reuse across exporters.

file: packages/core/src/exporter/Exporter.ts ↗ | tags: #exporter #mapping-pattern #type-safe

A generic suggestion menu controller that handles keyboard navigation, filtering, and item selection. Supports both list and grid layouts, custom trigger characters, and dynamic item loading. Used for slash menus, emoji pickers, and mentions. The controller is decoupled from UI rendering, allowing skin-specific implementations.

file: packages/core/src/extensions/SuggestionMenu/SuggestionMenu.ts ↗ | tags: #suggestion-menu #floating-ui #keyboard-navigation

Provides document versioning and suggestion (track changes) support using Yjs CRDT. Includes snapshot creation, diff computation, and merge operations. The extension integrates with the editor's collaboration layer and can be backed by different storage backends (localStorage, YHub). Demonstrates complex state management and CRDT-based collaboration patterns.

file: packages/core/src/extensions/Versioning/Versioning.ts ↗ | tags: #versioning #yjs #collaboration

Builds AI request pipelines for LLM-powered editing. Supports streaming tool calls, multiple output formats (HTML, JSON, Markdown blocks), and custom transport layers. The StreamTool pattern abstracts tool definition, validation, and execution, making it reusable for different AI providers and use cases.

file: packages/xl-ai/src/api/aiRequest/builder.ts ↗ | tags: #ai #stream-tool #llm-integration
Last analyzed: 2026-10-13 00:48:06.613229
Next check: 2026-10-20 00:48:06.592435
$ submit: