@remirror/core

The extension and manager system that powers Remirror, a ProseMirror-based toolkit for building rich text editors.

Library
npm
v3.0.2
3,035stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
60/100Good
Development Activity28
Maintenance52
Community60
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
73/100Good
Architecture85
Code Quality82
Innovation68
Learning Curve55

@remirror/core is the foundation package of Remirror, a React toolkit for building cross-platform rich text editors on top of ProseMirror. It defines the Extension, RemirrorManager, and Framework abstractions that every other Remirror package (bold, italic, mentions, markdown, and dozens more) is built from, along with the built-in presets that wire ProseMirror plugins, keymaps, input rules, and node views into a coherent editor instance.

Rather than exposing ProseMirror’s low-level schema and plugin APIs directly, @remirror/core wraps them in a declarative extension model: each editor feature is authored as a self-contained PlainExtension, NodeExtension, or MarkExtension class with its own options, commands, helpers, and lifecycle hooks, and the RemirrorManager composes an arbitrary set of these extensions into a single ProseMirror EditorState and EditorView. This package is framework-agnostic at its core (the Framework base class is subclassed separately for React and DOM bindings), making it the layer application developers extend when they need editor behavior beyond what a pre-built extension already covers.

What You Get

  • Extension, PlainExtension, NodeExtension, and MarkExtension base classes for declaring editor behavior as self-contained, composable units
  • RemirrorManager for composing an arbitrary set of extensions into a single ProseMirror schema, state, and view
  • A built-in preset (builtinPreset) that wires up commands, keymaps, input rules, paste rules, decorations, node views, and plugin registration automatically
  • A framework-agnostic Framework base class that React, DOM, and other UI bindings subclass to connect the manager to a rendering layer
  • Typed extension lifecycle hooks (onCreate, onView, onStateUpdate, onDestroy) for hooking into the ProseMirror state lifecycle
  • Re-exported helpers, constants, and type utilities from @remirror/core-helpers, @remirror/core-types, @remirror/core-utils, and @remirror/core-constants

Common Use Cases

  • Authoring a brand-new Remirror extension for a formatting mark, node type, or editor behavior not covered by an existing package
  • Composing a custom editor by assembling only the specific set of Remirror extensions an application needs, rather than pulling in the full remirror preset package
  • Building a new framework binding (beyond the existing React/DOM support) by subclassing Framework and driving it from the manager’s public API
  • Reading or writing editor commands and helpers programmatically, e.g. toggling a mark or querying whether a command is currently enabled

Under The Hood

Architecture The package is organized around three cooperating abstractions: extension/ defines the Extension class hierarchy (extension.ts, base-class.ts) where each extension declares static and dynamic options, commands, helpers, and lifecycle hooks; manager/remirror-manager.ts implements RemirrorManager, which takes a list of extension instances, resolves their declared schema contributions (nodes, marks, plugins) via remirror-manager-helpers.ts, and produces a single ProseMirror EditorState; and framework/framework.ts provides an abstract Framework base class that UI bindings extend to keep the manager in sync with a rendered EditorView. The builtins/ directory supplies a default preset (commands, keymap, input-rules, paste-rules, decorations, node-views, suggest, tags, plugins extensions) that every manager includes unless explicitly excluded, so most editors only need to add feature-specific extensions on top. Changing the core Extension or RemirrorManager contracts would ripple into essentially every other package in the monorepo, since they all subclass these base types.

Tech Stack Written entirely in TypeScript with nanoevents for a minimal internal event emitter and tiny-warning for dev-mode warnings, with @remirror/pm (a re-packaged ProseMirror) as the underlying editing engine. The package builds via the monorepo’s preconstruct/remirror-cli pipeline (Turborepo-orchestrated) into dual ESM/CJS output with generated .d.ts types, and depends on sibling workspace packages (@remirror/core-constants, -helpers, -types, -utils, @remirror/icons, @remirror/messages) for shared primitives rather than duplicating them.

Code Quality The package has an extensive __tests__/ directory with dedicated spec files for nearly every built-in extension (commands, keymap, input-rules, paste-rules, node-views, decorations, tags, plugins, and more), run through the monorepo’s Jest configuration with jest-prosemirror/jest-remirror helper packages built specifically for testing ProseMirror-based editors. The codebase is fully typed with extensive use of TypeScript generics to make extension options and command signatures type-safe across the manager composition, uses invariant calls for explicit runtime error handling instead of silent failures, and is enforced by a repo-wide ESLint + Prettier configuration and a CI workflow (ci.yml) that runs lint, typecheck, and test on every change.

What Makes It Unique Unlike editor toolkits that expose ProseMirror’s schema and plugin system directly, @remirror/core’s extension model lets each editor feature declare its schema contributions, commands, and lifecycle behavior together as one class, and lets the manager resolve priority-ordered composition automatically — including a documented ExtensionPriority system for resolving conflicts when multiple extensions touch the same schema area. This declarative composition, combined with a framework-agnostic core that multiple UI bindings share, is a distinguishing design choice compared to editors that couple their extension API directly to a single rendering framework.

Used by 9 apps in this directory

Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday
Rust
46%
MIT

Meetily

Productivity · AI Assistants

30,423

Privacy-first AI meeting assistant that transcribes and summarizes your meetings entirely on your local machine — no cloud, no data leakage.

View details
61
Repo Health
72
Technical
71
Dependency
Built with
Rust46%
TypeScript30%
Updated yesterday

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search