This page contains the documented errors that occur while using remirror. Currently the descriptions are very short and if you'd like to contribute to make them more comprehensive, then that would be very much appreciated. Edit this page to get started.



Production Error

An error occurred in production and details are intentionally being hidden.


Unknown Error

Sooo, this is embarassing. Something happened and we're not quite sure why. Your best course of action is to open an issue explaining what you're seeing.


Invalid Command Arguments

The arguments passed to the command method were invalid. Check how you're calling all commands made available by the editor and make sure arguments are correct.


Custom Error

This is a custom error possibly thrown by an external library. It's almost as hard to diagnose as the Unknown Error.


Core Helpers

An error occurred in a function called from the @remirror/core-helpers library.



You have attempted to change a value that shouldn't be changed.



This is an error which should not occur and is internal to the remirror codebase.


Missing Required Extension

You're editor is missing a required extension.


Manager Phase Error

Called a method event at the wrong time. Please make sure getter functions are only called with within the scope of the returned functions. They should not be called in the outer scope of your method.


New Editor Manager

No directly invoking the editor manager with new. Instead use one of the static methods to create your instance.


Invalid Preset Extension

The user requested an invalid extension from the preset. Please check the createExtensions return method is returning an extension with the defined constructor.


Invalid Manager Arguments

Invalid value passed into Manager constructor. Only Presets and Extensions are supported.



There is a problem with the schema or you are trying to access a node / mark that doesn't exists.


Helpers Called In Outer Scope

The helpers method which is passed into the `create\* method should only be called within returned method since it relies on an active view (not present in the outer scope).


Invalid Manager Extension

The user requested an invalid extension from the manager.


Invalid Manager Preset

The user requested an invalid preset from the manager.


Duplicate Command Names

Command method names must be unique within the editor.


Duplicate Helper Names

Helper method names must be unique within the editor.


Non Chainable Command

Attempted to chain a non chainable command.


Invalid Extension

The provided extension is invalid.


Invalid Preset

The provided preset is invalid.


Invalid Name

An invalid name was used for the extension.



An error occurred within an extension.


Extension Spec

The spec was defined without calling the defaults, parse or dom methods.


Extension Extra Attributes

Extra attributes must either be a string or an object.


Invalid Set Extension Options

A call to extension.setOptions() was made with invalid keys.



React Provider Context

useRemirror was called outside of the remirror context. It can only be used within an active remirror context created by the <RemirrorProvider />.


React Get Root Props

getRootProps has been attached to the DOM more than once. It should only be attached to the DOM once per editor.

This error happens because the getRootProps method is being used in a component that is rendered multiple times without updates from the react provider. The getRootProps method is responsible for collecting obtaining the HTMLElement via the ref prop and appending the prosemirror text editor to it. If that's done multiple times per render then it has problems.

To fix this you should move the component calling getRootProps to a part of the tree that is only rerendered when the RemirrorProvider is updated.

For example the following would trigger this error.

import React from 'react';
import { BoldExtension } from 'remirror/extension/bold';
import { CorePreset } from 'remirror/preset/core';
import { RemirrorProvider, useManager } from 'remirror/react';
const Editor = () => {
const [boldActive] = useState(false);
const { getRootProps, commands } = useRemirror({ autoUpdate: true });
return (
onClick={() => commands.toggleBold()}
style={{ fontWeight: activeCommands.bold ? 'bold' : undefined }}
<div {...getRootProps()} />
const EditorWrapper = () => {
const manager = useManager([new CorePreset(), new BoldExtension()]);
return (
<RemirrorProvider manager={manager}>
<Editor />

The onChange handler being passed into the useRemirror hook means that every time the editor content changes there will be a setBoldActive called which re-renders the Internal component. As a result getRootProps is called multiple times.

To fix this issue you need to move the getRootProps to a part of the tree that only updates when the RemirrorProvider updates. There are several ways to do this and one of them is to split up the Internal component into two seperate components.

The fixed code could look something like this.

import React from 'react';
import { RemirrorProvider } from 'remirror/react';
const Menu = () => {
const { commands, active } = useRemirror({ autoUpdate: true });
return (
onClick={() => commands.toggleBold()}
style={{ fontWeight: active.bold() ? 'bold' : undefined }}
const TextEditor = () => {
const { getRootProps } = useRemirror();
return <div {...getRootProps()} />;
const EditorWrapper = () => {
const manager = useManager([new CorePreset(), new BoldExtension()]);
return (
<RemirrorProvider manager={manager}>
<Menu />
<TextEditor />

Now the TextEditor component is only updated when the RemirrorProvider is updated.


React Editor View

A problem occurred adding the editor view to the dom.


React Controlled

There is a problem with your controlled editor setup.


React Node View

Something went wrong with your custom ReactNodeView Component.



I18N Context

There is something wrong with your i18n setup.

Build Errors


Attempted import error: 'en' is not exported from 'make-plural/plurals'.

There is a problem related to Webpack (4 & 5) build configuration. Make sure:

  • file-loader does not process .mjs files, e.g.:

    // "file" loader makes sure assets end up in the `build` folder.
    // When you `import` an asset, you get its filename.
    // This loader doesn't use a "test" so it will catch all modules
    // that fall through the other loaders.
    loader: require.resolve('file-loader'),
    // Exclude `js` files to keep "css" loader working as it injects
    // it's runtime that would otherwise processed through "file" loader.
    // Also exclude `html` and `json` extensions so they get processed
    // by webpacks internal loaders.
    exclude: [/\.js$/, /\.mjs$/, /\.html$/, /\.json$/],
    options: {
    name: 'static/media/[name].[hash:8].[ext]'
  • instead these files must be processed for example with babel-loader, e.g.

    // Process JS with Babel.
    test: /\.(js|jsx|mjs)$/,
    include: paths.appSrc,
    exclude: /node_modules/,
    loader: require.resolve('babel-loader'),
    options: {
    compact: true