# Error codes

CKEditor 5 Framework logs errors and warnings to the console. The following list contains more detailed descriptions of those issues.

<a id="error-accessibility-unknown-keystroke-info-category">

### `accessibility-unknown-keystroke-info-category`

Cannot add keystrokes in an unknown category. Use [`addKeystrokeInfoCategory`](../api/module_core_accessibility-Accessibility.md#function-addKeystrokeInfoCategory) to add a new category or make sure the specified category exists.

#### Parameters

* `categoryId: string`

  The id of the unknown keystroke category.

* `keystrokes: AddKeystrokeInfosData#keystrokes`

  Keystroke definitions about to be added.

<a id="error-accessibility-unknown-keystroke-info-group">

### `accessibility-unknown-keystroke-info-group`

Cannot add keystrokes to an unknown group.

Use [`addKeystrokeInfoGroup`](../api/module_core_accessibility-Accessibility.md#function-addKeystrokeInfoGroup) to add a new group or make sure the specified group exists.

#### Parameters

* `groupId: string`

  The id of the unknown keystroke group.

* `categoryId: string`

  The id of category the unknown group should belong to.

* `keystrokes: AddKeystrokeInfosData#keystrokes`

  Keystroke definitions about to be added.

<a id="error-addcommentthreadcommand-incorrect-ranges">

### `addcommentthreadcommand-incorrect-ranges`

Cannot add comment thread. Selection is empty and no valid ranges provided.

<a id="error-addcommentthreadcommand-user-not-found">

### `addcommentthreadcommand-user-not-found`

Cannot add comment thread. User is not defined.

<a id="error-ai-applying-suggestion-failed">

### `ai-applying-suggestion-failed`

An error thrown when applying an AI-generated suggestion to the document fails (e.g. an engine invariant violation while replaying operations).

<a id="error-ai-aws-adapter-not-supported">

### `ai-aws-adapter-not-supported`

The `AWSTextAdapter` is no longer supported. The Amazon Bedrock adapter has been removed. Please contact CKEditor support at https\://support.ckeditor.com for more information about available AI adapters.

<a id="error-ai-chat-content-too-large">

### `ai-chat-content-too-large`

The content is too large to be used as chat context.

<a id="error-ai-chat-context-file-too-large">

### `ai-chat-context-file-too-large`

The file is too large to be used as chat context.

<a id="error-ai-chat-context-file-too-many-pages">

### `ai-chat-context-file-too-many-pages`

The file has too many pages to be used as chat context.

<a id="error-ai-chat-context-form-data-size-limits-exceeded">

### `ai-chat-context-form-data-size-limits-exceeded`

The form data size limits have been exceeded for chat context.

<a id="error-ai-chat-context-invalid-data">

### `ai-chat-context-invalid-data`

An error thrown when a URL resource has invalid data type (not a string).

#### Parameters

* `resourceId: string`

  The ID of the resource.

* `sourceId: string`

  The ID of the source provider.

* `expectedType: string`

  The expected data type.

* `actualType: string`

  The actual data type.

<a id="error-ai-chat-context-unsupported-file-type">

### `ai-chat-context-unsupported-file-type`

The file type is not supported for chat context.

<a id="error-ai-chat-context-unsupported-type">

### `ai-chat-context-unsupported-type`

An error thrown when an unsupported resource type is used. Only URL and FILE types are supported.

#### Parameters

* `resourceId: string`

  The ID of the resource.

* `sourceId: string`

  The ID of the source provider.

* `resourceType: string`

  The unsupported resource type.

<a id="error-ai-chat-controller-no-active-conversation">

### `ai-chat-controller-no-active-conversation`

User message was sent before the conversation was started.

<a id="error-ai-chat-conversation-already-started">

### `ai-chat-conversation-already-started`

An error thrown when trying to start a conversation that is already started.

<a id="error-ai-chat-conversation-init-failed">

### `ai-chat-conversation-init-failed`

An error thrown when the conversation fails to initialize (e.g. due to a network error).

<a id="error-ai-chat-conversation-init-from-id-failed">

### `ai-chat-conversation-init-from-id-failed`

An error thrown when the conversation fails to initialize from ID (e.g. due to a network error).

<a id="error-ai-chat-conversation-not-found">

### `ai-chat-conversation-not-found`

An error thrown when the conversation conversation with given ID was not found.

<a id="error-ai-chat-conversation-set-model-not-available">

### `ai-chat-conversation-set-model-not-available`

An error thrown when trying to set model that is not available.

<a id="error-ai-chat-conversation-set-model-null">

### `ai-chat-conversation-set-model-null`

An error thrown when trying to set model to null.

<a id="error-ai-chat-conversation-start-failed">

### `ai-chat-conversation-start-failed`

An error thrown when the conversation fails to start (e.g. due to a network error).

<a id="error-ai-chat-conversation-start-no-model-selected">

### `ai-chat-conversation-start-no-model-selected`

An error thrown when trying to start a conversation but no model is selected.

<a id="error-ai-chat-default-model-id-unrecognized">

### `ai-chat-default-model-id-unrecognized`

Model with given ID configured via `ai.models.defaultModelId` is not available. Falling back to the first available model.

#### Parameters

* `defaultModelId: string`

  The ID of the model configured via `ai.models.defaultModelId` that was not found.

* `fallBackModelId: string`

  The ID of the fall back model

<a id="error-ai-chat-document-upload-failed">

### `ai-chat-document-upload-failed`

An error thrown when the documents fail to upload as AI chat context (e.g. due to a network error).

<a id="error-ai-chat-document-upload-reply-mismatch">

### `ai-chat-document-upload-reply-mismatch`

The document upload endpoint returned a reply that does not match the uploaded documents (different length or a missing `id`). This indicates a backend contract violation.

<a id="error-ai-chat-documents-missing-description">

### `ai-chat-documents-missing-description`

When a chat conversation uploads more than one document in a single message (multi-root or multi-editor), each root should declare a `description` in its [root configuration](../api/module_core_editor_editorconfig-RootConfig.md). Routing AI replies back to the source root works without it (it uses `channelId` and `rootName`), but the AI chat service uses descriptions to semantically distinguish roots — so when a user scopes a request to a specific area ("edit the title", "summarize the introduction"), the model can route the change to the intended root. Without descriptions, such area-scoped requests may target the wrong root.

<a id="error-ai-chat-feed-view-item-not-a-reply-item">

### `ai-chat-feed-view-item-not-a-reply-item`

Item with the given ID cannot be updated because it is not a reply item.

<a id="error-ai-chat-feed-view-item-not-a-suggestion-item">

### `ai-chat-feed-view-item-not-a-suggestion-item`

Item with the given ID cannot be updated because it is not a suggestion item.

<a id="error-ai-chat-feed-view-item-not-a-suggestion-or-reply-item">

### `ai-chat-feed-view-item-not-a-suggestion-or-reply-item`

Item with the given ID cannot be updated because it is not a suggestion or reply item.

<a id="error-ai-chat-feed-view-item-not-found">

### `ai-chat-feed-view-item-not-found`

Item with the given ID does not exist.

<a id="error-ai-chat-feed-view-scroll-to-suggestion-invalid-item">

### `ai-chat-feed-view-scroll-to-suggestion-invalid-item`

Item with the given ID cannot be scrolled to because it is not a suggestion item.

<a id="error-ai-chat-feed-view-scroll-to-suggestion-part-view-not-found">

### `ai-chat-feed-view-scroll-to-suggestion-part-view-not-found`

Part view with the given index does not exist.

<a id="error-ai-chat-file-upload-failed">

### `ai-chat-file-upload-failed`

An error thrown when the file fails to upload as AI chat context (e.g. due to a network error).

<a id="error-ai-chat-handle-user-conversation-not-initialized">

### `ai-chat-handle-user-conversation-not-initialized`

An error thrown when trying to handle user message but conversation is not initialized.

<a id="error-ai-chat-handle-user-interaction-already-in-progress">

### `ai-chat-handle-user-interaction-already-in-progress`

An error thrown when trying to handle user message but interaction is already in progress.

<a id="error-ai-chat-interaction-error">

### `ai-chat-interaction-error`

An error thrown when error is received from the AI endpoint.

<a id="error-ai-chat-invalid-request">

### `ai-chat-invalid-request`

The chat request data is invalid.

<a id="error-ai-chat-model-already-set">

### `ai-chat-model-already-set`

The model has already been set and cannot be changed.

<a id="error-ai-chat-model-id-unrecognized">

### `ai-chat-model-id-unrecognized`

Model with given ID is not available. Falling back to the default model.

#### Parameters

* `modelId: string`

  The ID of the model that was not found.

* `fallBackModelId: string`

  The ID of the fall back model.

<a id="error-ai-chat-model-not-found">

### `ai-chat-model-not-found`

The requested model was not found.

<a id="error-ai-chat-models-unable-to-retrieve">

### `ai-chat-models-unable-to-retrieve`

An error thrown when the list of available AI models cannot be retrieved while resolving the conversation's selected model (e.g. due to a network error).

<a id="error-ai-chat-resource-load-failed">

### `ai-chat-resource-load-failed`

An error thrown when a resource fails to load data (e.g. due to a network error).

#### Parameters

* `resourceId: string`

  The ID of the resource that failed to load.

* `sourceId: string`

  The ID of the source provider.

<a id="error-ai-chat-resource-no-data">

### `ai-chat-resource-no-data`

An error thrown when a resource has no data available.

#### Parameters

* `resourceId: string`

  The ID of the resource.

* `sourceId: string`

  The ID of the source provider.

<a id="error-ai-chat-shortcuts-ai-tabs-not-found">

### `ai-chat-shortcuts-ai-tabs-not-found`

The [AI Chat Shortcuts](../api/module_ai_aichatshortcuts_aichatshortcuts-AIChatShortcuts.md) feature was unable to switch the user interface because the [AI Tabs](../api/module_ai_aitabs_aitabs-AITabs.md) plugin was not found.

Please make sure the AI Tabs feature is enabled before running shortcuts that interact with it.

<a id="error-ai-chat-shortcuts-invalid-config">

### `ai-chat-shortcuts-invalid-config`

The [AI Chat Shortcuts](../api/module_ai_aichatshortcuts_aichatshortcuts-AIChatShortcuts.md) configuration is invalid. Please make sure the shortcut has all necessary properties.

See [`AIChatShortcutChatDefinition`](../api/module_ai_aichatshortcuts_aichatshortcuts-AIChatShortcutChatDefinition.md) to learn more about configuring chat shortcuts.

#### Parameters

* `shortcut: object`

  The chat shortcut configuration that is invalid.

<a id="error-ai-chat-shortcuts-review-mode-not-found">

### `ai-chat-shortcuts-review-mode-not-found`

The [AI Chat Shortcuts](../api/module_ai_aichatshortcuts_aichatshortcuts-AIChatShortcuts.md) feature was unable to run the shortcut because the [AI Review Mode](../api/module_ai_aireviewmode_aireviewmode-AIReviewMode.md) feature was not found.

Please make sure the AI Review mode feature is enabled before running shortcuts that interact with it.

<a id="error-ai-chat-shortcuts-translate-not-found">

### `ai-chat-shortcuts-translate-not-found`

The [AI Chat Shortcuts](../api/module_ai_aichatshortcuts_aichatshortcuts-AIChatShortcuts.md) feature was unable to run the shortcut because the [AI Translate](../api/module_ai_aitranslate_aitranslate-AITranslate.md) feature was not found.

Please make sure the AI Translate feature is enabled before running shortcuts that interact with it.

<a id="error-ai-chat-source-not-found">

### `ai-chat-source-not-found`

An error thrown when a source provider is not found.

#### Parameters

* `sourceId: string`

  The ID of the source provider.

<a id="error-ai-chat-source-resources-load-failed">

### `ai-chat-source-resources-load-failed`

An error thrown when resources fail to load from a source provider.

#### Parameters

* `sourceId: string`

  The ID of the source provider.

<a id="error-ai-chat-unsafe-content-detected">

### `ai-chat-unsafe-content-detected`

Unsafe content was detected in the chat request.

<a id="error-ai-chat-unsupported-content-type">

### `ai-chat-unsupported-content-type`

The content type is not supported for chat operations.

<a id="error-ai-chat-url-upload-failed">

### `ai-chat-url-upload-failed`

An error thrown when the URL fails to upload (e.g. due to a network error).

#### Parameters

* `url: string`

  The URL that failed to upload.

<a id="error-ai-commands-config-order-collision">

### `ai-commands-config-order-collision`

The same `order` value has been set for two (or more) definitions in the AI Assistant feature configuration.

Learn more about [command definitions](../api/module_ai_aiassistant_aiassistant-AICommandDefinition.md) and [group definitions](../api/module_ai_aiassistant_aiassistant-AIGroupDefinition.md) used in the [feature configuration](../api/module_ai_aiassistant_aiassistant-AIAssistantConfig.md#member-commands)

#### Parameters

* `conflictingDefinitions: Array<never>`

  Definitions that have the same `order` value.

<a id="error-ai-document-root-missing-title">

### `ai-document-root-missing-title`

Each editor root should declare a `title` (or, for backward compatibility, a `label`) in its [root configuration](../api/module_core_editor_editorconfig-RootConfig.md) (or in the options passed to [`MultiRootEditor#addRoot()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#function-addRoot:ROOT_CONFIG)). Routing AI replies back to the source root works without it (it uses `channelId` and `rootName`), but the AI chat service uses these names to semantically distinguish roots — so when a user scopes a request to a specific area ("edit the title", "summarize the introduction"), the model can route the change to the intended root. Without a name, such area-scoped requests may target the wrong root.

<a id="error-ai-documentposition-createfrompath-path-cannot-be-empty">

### `ai-documentposition-createfrompath-path-cannot-be-empty`

The path cannot be empty when creating document position from path.

<a id="error-ai-documentposition-index-out-of-bounds">

### `ai-documentposition-index-out-of-bounds`

The index is out of bounds for the document position.

<a id="error-ai-documentprocessinggateway-empty-reply">

### `ai-documentprocessinggateway-empty-reply`

The AI service's reply contained no documents at all. See `ai-documentprocessinggateway-empty-root-content` for the case where the reply has an entry for every processed root but one of them came back with empty content.

<a id="error-ai-documentprocessinggateway-empty-root-content">

### `ai-documentprocessinggateway-empty-root-content`

The AI service's reply included an entry with empty content for one of the processed roots. Verify that the AI service is configured correctly for the model and prompt used.

#### Parameters

* `channelId: string`

  The channel ID of the root whose reply content was empty.

* `rootName: string`

  The name of the root whose reply content was empty.

<a id="error-ai-documentprocessinggateway-empty-roots">

### `ai-documentprocessinggateway-empty-roots`

`AIDocumentProcessingGateway.processDocument()` was called with `roots: []`. Pass at least one `{ channelId, rootName }` entry, or omit the `roots` option entirely to process every root across every editor in the context.

<a id="error-ai-documentprocessinggateway-missing-document">

### `ai-documentprocessinggateway-missing-document`

Thrown when `AIDocumentProcessingGateway.processDocument()` encounters no document.

Empty string (`''`) is accepted.

<a id="error-ai-documentprocessinggateway-missing-prompt">

### `ai-documentprocessinggateway-missing-prompt`

Thrown when `AIDocumentProcessingGateway.processDocument()` is called without a prompt.

<a id="error-ai-documentprocessinggateway-reply-count-mismatch">

### `ai-documentprocessinggateway-reply-count-mismatch`

The AI service's reply contained a different number of documents than the number of document content parts sent in the request. Each request document part should produce exactly one reply entry, in the same order — a mismatch means the reply cannot be reliably mapped back to the roots that were processed.

#### Parameters

* `expected: number`

  The number of document content parts sent in the request.

* `received: number`

  The number of documents returned in the reply.

<a id="error-ai-documentprocessinggateway-root-not-found">

### `ai-documentprocessinggateway-root-not-found`

`AIDocumentProcessingGateway.processDocument()` was called with a `roots` entry that does not match any root in the current context. Verify that its `channelId` matches the `collaboration.channelId` of one of the editor instances and that its `rootName` matches an existing, non-`$graveyard` root within that editor.

#### Parameters

* `channelId: string`

  The channel ID that was provided.

* `rootName: string`

  The root name that was provided.

<a id="error-ai-documentprocessinggateway-run-failed">

### `ai-documentprocessinggateway-run-failed`

Thrown when `AIDocumentProcessingGateway.processDocument()` fails on the underlying request.

When the AI service rejected the request, the backend's structured response is exposed under `error.data.backendData` (for example, an `issues` list describing which fields failed validation).

#### Parameters

* `error: Error`

  The error that was thrown during the run.

* `backendData: object`

  The structured `data` returned by the AI service backend. Present only when

<a id="error-ai-gateway-apply-empty-roots">

### `ai-gateway-apply-empty-roots`

Thrown when `AIGateway.apply()` is called with an explicitly empty `options.roots` array.

<a id="error-ai-gateway-apply-invalid-status">

### `ai-gateway-apply-invalid-status`

Thrown when `AIGateway.apply()` is called with an `AIRunSingleRootResult` whose `status` is not `'completed'`. Inspect `result.status` (and `result.error`) before applying.

#### Parameters

* `status: string`

  The current status of the run result.

<a id="error-ai-gateway-apply-root-not-found">

### `ai-gateway-apply-root-not-found`

Thrown when an entry in `AIGateway.apply()`'s `options.roots` filter does not match any per-root sub-result in `result.results`.

#### Parameters

* `channelId: string`

  The `channelId` of the unmatched filter entry.

* `rootName: string`

  The `rootName` of the unmatched filter entry.

<a id="error-ai-gateway-merge-failed">

### `ai-gateway-merge-failed`

Thrown when [`mergeChangesIntoContent`](../api/module_ai_aicore_aigateway-AIGateway.md#function-mergeChangesIntoContent) fails to merge AI-produced changes into the document snapshot.

#### Parameters

* `id: string`

  The id of the change that failed to merge.

* `content: string`

  The content of the change that failed to merge.

* `error: Error`

  The error that was thrown during the merge.

<a id="error-ai-get-editor-from-context-no-editor">

### `ai-get-editor-from-context-no-editor`

No editor found in the context.

<a id="error-ai-interaction-invalid-event-type">

### `ai-interaction-invalid-event-type`

There was a problem processing the response chunk. The event type is invalid.

#### Parameters

* `chunk: object`

  The chunk that was received from the AI endpoint.

* `event: string`

  The event type that was received from the AI endpoint.

<a id="error-ai-invalid-content-type">

### `ai-invalid-content-type`

The content type provided is invalid.

<a id="error-ai-invalid-license-key">

### `ai-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-ai-missing-channel-id">

### `ai-missing-channel-id`

The collaboration `channelId` configuration is required to use AI features.

<a id="error-ai-missing-token">

### `ai-missing-token`

The authentication [`config.cloudServices.tokenUrl`](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-tokenUrl) configuration is required for handling AI connection.

<a id="error-ai-models-unable-to-retrieve">

### `ai-models-unable-to-retrieve`

The editor was unable to retrieve the list of available AI models. This can happen due to a network error.

<a id="error-ai-no-track-changes">

### `ai-no-track-changes`

Tried to insert AI-proposed changes as suggestions but track changes plugin is not loaded on the target editor.

#### Parameters

* `channelId: string`

  `collaboration.channelId` of the editor missing the `TrackChanges` plugin.

* `rootName: string`

  Name of the root the run entry targeted on that editor.

<a id="error-ai-quick-actions-models-unable-to-retrieve">

### `ai-quick-actions-models-unable-to-retrieve`

The editor was unable to retrieve the list of available AI models. This can happen due to a network error. Some quick actions may be unavailable or work improperly.

<a id="error-ai-quick-actions-plugin-not-found">

### `ai-quick-actions-plugin-not-found`

Thrown when trying to execute an AI Quick Action but the required plugin is not available. This error indicates that the required plugin is not installed or not loaded.

<a id="error-ai-quick-actions-unavailable-model">

### `ai-quick-actions-unavailable-model`

A quick action is using an outdated or unavailable model in its configuration. The quick action has been disabled. Please update the model to a supported version.

#### Parameters

* `actionId: string`

  The ID of the quick action with the outdated model.

* `modelId: string`

  The outdated model identifier.

<a id="error-ai-rate-limits-exceeded">

### `ai-rate-limits-exceeded`

Rate limits for the AI service have been exceeded.

<a id="error-ai-reply-get-content-parts-group-not-found">

### `ai-reply-get-content-parts-group-not-found`

The change group with the given index does not exist.

<a id="error-ai-request-aborted">

### `ai-request-aborted`

Request to the AI API was aborted.

<a id="error-ai-request-failed">

### `ai-request-failed`

Failed to fetch response from the AI API.

<a id="error-ai-response-parser-unable-to-set-up-parser">

### `ai-response-parser-unable-to-set-up-parser`

The Markdown to HTML converter was unable to set up the parser.

<a id="error-ai-review-mode-check-run-chunk-error">

### `ai-review-mode-check-run-chunk-error`

An error specific to one chunk occurred during the AI review mode check run.

<a id="error-ai-review-mode-check-run-failed">

### `ai-review-mode-check-run-failed`

The current check run has failed.

<a id="error-ai-review-mode-check-run-general-error">

### `ai-review-mode-check-run-general-error`

A general error occurred during the AI review mode check run.

<a id="error-ai-review-mode-command-unavailable-due-to-missing-model">

### `ai-review-mode-command-unavailable-due-to-missing-model`

A review command is unavailable because the required AI model is not available.

This can happen, for example, due to a network error that prevents fetching the list of available models or if the model is no longer available. The command will not be visible in the UI and cannot be executed.

See [`AIModelsConfig`](../api/module_ai_aicore_model_aimodels-AIModelsConfig.md) documentation for more details on AI models configuration.

<a id="error-ai-review-mode-models-unable-to-retrieve">

### `ai-review-mode-models-unable-to-retrieve`

The editor was unable to retrieve the list of available AI models for review mode for a custom command. This can happen, for example, due to a network error.

If this error occurs, review custom command will not be available.

<a id="error-ai-review-mode-no-current-check-run">

### `ai-review-mode-no-current-check-run`

The current check run was not started or has been removed.

<a id="error-ai-review-mode-non-existent-commands-used">

### `ai-review-mode-non-existent-commands-used`

Non-existent command IDs were used to configure AI Review commands list.

See [`availableCommands`](../api/module_ai_aireviewmode_aireviewmode-AIReviewModeConfig.md#member-availableCommands) documentation.

<a id="error-ai-review-mode-source-check-not-found">

### `ai-review-mode-source-check-not-found`

The source check with the given ID was not loaded or has been removed.

<a id="error-ai-reviewcoreediting-check-run-failed">

### `ai-reviewcoreediting-check-run-failed`

Thrown when a review-core check run (started via `AIReviewCoreEditing.runCheck()`) fails at runtime. This wraps transport, parsing, and merge failures that happen after the request has been dispatched. Callers can inspect `error.data.apiId` and `error.data.args` to identify which check was running.

When the AI service rejected the request, the backend's structured response is exposed under `error.data.backendData` (for example, an `issues` list describing which fields failed validation).

#### Parameters

* `apiId: string`

  The `apiId` of the check that failed (e.g. `translate`).

* `args: object`

  The `args` that were passed to the check run.

* `error: Error`

  The error that was thrown during the run.

* `backendData: object`

  The structured `data` returned by the AI service backend. Present only when

<a id="error-ai-reviewcoreediting-empty-roots">

### `ai-reviewcoreediting-empty-roots`

Thrown when `AIReviewCoreEditing.runCheck()` is called with `roots: []`. Pass at least one `{ channelId, rootName }` entry, or omit the `roots` option entirely to run against every root across every editor in the context.

<a id="error-ai-reviewcoreediting-root-not-found">

### `ai-reviewcoreediting-root-not-found`

Thrown when `AIReviewCoreEditing.runCheck()` is called with a `roots` option that contains an entry that does not match any root in the current context. Verify that each entry's `channelId` matches the `collaboration.channelId` of one of the editor instances and that its `rootName` matches an existing, non-`$graveyard` root within that editor.

#### Parameters

* `channelId: string`

  The channel ID that was provided.

* `rootName: string`

  The root name that was provided.

<a id="error-ai-reviewgateway-missing-custom-command-model">

### `ai-reviewgateway-missing-custom-command-model`

Thrown when `AIReviewGateway.runCustomReview()` is called and no model can be resolved — neither `options.model` nor the command's default model is available.

#### Parameters

* `checkId: string`

  The command ID that was passed.

<a id="error-ai-reviewgateway-missing-custom-command-prompt">

### `ai-reviewgateway-missing-custom-command-prompt`

Thrown when `AIReviewGateway.runCustomReview()` is called without a prompt.

#### Parameters

* `checkId: string`

  The command ID that was passed.

<a id="error-ai-reviewgateway-not-a-custom-command">

### `ai-reviewgateway-not-a-custom-command`

Thrown when `AIReviewGateway.runCustomReview()` resolves the built-in `custom` command and finds that the resolved command is not the built-in `custom` command. Extras configured via `ai.review.extraCommands` are not custom and must be invoked through `AIReviewGateway.runReview()`.

#### Parameters

* `checkId: string`

  The command ID that was resolved.

<a id="error-ai-reviewgateway-not-a-system-command">

### `ai-reviewgateway-not-a-system-command`

Thrown when `AIReviewGateway.runReview()` is called with a `commandId` that points at the built-in `custom` command. Use `AIReviewGateway.runCustomReview()` for it instead.

#### Parameters

* `checkId: string`

  The command ID that was passed.

<a id="error-ai-reviewgateway-review-command-run-failed">

### `ai-reviewgateway-review-command-run-failed`

Thrown in older versions when `AIReviewGateway` failed on running a review command. As of v48.4.0 runtime failures surface via `AIRunResult#error` with the shared `ai-reviewcoreediting-check-run-failed` code instead. Kept here so the console-log link from older editors still resolves against `latest` docs.

#### Parameters

* `checkId: string`

  The command ID for which the command run failed.

* `error: Error`

  The error that was thrown during the command run.

<a id="error-ai-reviewgateway-unknown-command">

### `ai-reviewgateway-unknown-command`

Thrown when `AIReviewGateway.runReview()` is called with a `commandId` that is not registered in the current editor configuration.

#### Parameters

* `checkId: string`

  The unknown command ID that was passed.

<a id="error-ai-reviewmode-missing-custom-command-model">

### `ai-reviewmode-missing-custom-command-model`

Thrown when `AIReviewMode.startCustomReview()` is called and no model can be resolved — neither `options.model` nor the built-in `custom` command's default model is available.

<a id="error-ai-reviewmode-missing-custom-command-prompt">

### `ai-reviewmode-missing-custom-command-prompt`

Thrown when `AIReviewMode.startCustomReview()` is called without a prompt.

<a id="error-ai-reviewmode-not-a-system-command">

### `ai-reviewmode-not-a-system-command`

Thrown when `AIReviewMode.startReview()` is called with a `commandId` that points at the built-in `custom` command. Use `AIReviewMode.startCustomReview()` for it instead.

#### Parameters

* `commandId: string`

  The command ID that was passed.

<a id="error-ai-reviewmode-review-already-running">

### `ai-reviewmode-review-already-running`

Thrown when `AIReviewMode.startReview()` or `AIReviewMode.startCustomReview()` is called while another review check run is already in progress. Wait for the current run to finish (or abort it) before starting a new one.

<a id="error-ai-reviewmode-review-tab-not-active">

### `ai-reviewmode-review-tab-not-active`

Thrown when `AIReviewMode.startReview()` is called while the review tab is not the active tab in `AITabs`. The integrator must activate the `'reviewMode'` tab (e.g. via `editor.plugins.get( 'AITabs' ).view.activateTab( 'reviewMode' )`) before calling `startReview()`.

<a id="error-ai-reviewmode-review-vetoed">

### `ai-reviewmode-review-vetoed`

Thrown when `AIReviewMode.startReview()` or `AIReviewMode.startCustomReview()` is called and activating the review tab is vetoed by a listener (for example another AI tab has an unresolved run and the user declines the confirmation dialog asking to leave it).

<a id="error-ai-reviewmode-unknown-command">

### `ai-reviewmode-unknown-command`

Thrown when `AIReviewMode.startReview()` is called with a `commandId` that is not registered in the current editor configuration.

#### Parameters

* `commandId: string`

  The unknown command ID that was passed.

<a id="error-ai-service-url-invalid-version">

### `ai-service-url-invalid-version`

The configured [`config.ai.serviceUrl`](../api/module_ai_aiconfig-AIConfig.md#member-serviceUrl) must end with `/v1` version.

#### Parameters

* `serviceUrl: string`

  The configured service URL that failed validation.

<a id="error-ai-tabs-configuration-not-found">

### `ai-tabs-configuration-not-found`

Configuration for the AI tabs container was not found.

Please make sure that `config.ai.container` is set.

<a id="error-ai-tabs-sidebar-container-element-not-found">

### `ai-tabs-sidebar-container-element-not-found`

AI tabs were configured in the `'sidebar'` mode but the `config.ai.container.element` was not set.

Please make sure that `config.ai.container.element` refers to an existing element in the DOM.

<a id="error-ai-tabs-unsupported-ui-side">

### `ai-tabs-unsupported-ui-side`

Target side is not supported.

<a id="error-ai-tabs-unsupported-ui-type">

### `ai-tabs-unsupported-ui-type`

Target UI type is not supported.

<a id="error-ai-translate-translation-already-running">

### `ai-translate-translation-already-running`

Thrown when `AITranslate.startTranslate()` is called while another translation run is already in progress. Wait for the current run to finish before starting a new one.

<a id="error-ai-translate-translation-vetoed">

### `ai-translate-translation-vetoed`

Thrown when `AITranslate.startTranslate()` is called and activating the translate tab is vetoed by a listener (for example another AI tab has an unresolved run and the user declines the confirmation dialog asking to leave it).

<a id="error-ai-translate-unknown-language">

### `ai-translate-unknown-language`

Thrown when `AITranslate.startTranslate()` is called with a `languageId` that is not present in the list of available languages. Use `AITranslate.getAvailableLanguages()` for valid language ids.

#### Parameters

* `languageId: string`

  The unknown language ID that was passed.

<a id="error-ai-trial-license-key-reached-limit-changes">

### `ai-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get full access at https\://ckeditor.com/contact/.

<a id="error-ai-usage-limits-exceeded">

### `ai-usage-limits-exceeded`

Usage limits for the AI service have been exceeded.

<a id="error-aiadapter-text-adapter-not-set">

### `aiadapter-text-adapter-not-set`

AI text adapter plugin has not been added to the editor. Use one of the provided adapter plugins (e.g. `OpenAITextAdapter` if you connect to OpenAI or Azure OpenAI service) or create a custom adapter.

<a id="error-aitextadapter-send-request-failed">

### `aitextadapter-send-request-failed`

Sending a request to the AI service API failed.

<a id="error-alignment-config-classname-already-defined">

### `alignment-config-classname-already-defined`

The same `className` in one of the `alignment.options` was already declared.

#### Parameters

* `option: object`

  First option that declares given `className`.

* `configuredOptions: object`

  * Contents of `alignment.options`.

<a id="error-alignment-config-classnames-are-missing">

### `alignment-config-classnames-are-missing`

The `className` property has to be defined for all options once at least one option declares `className`.

#### Parameters

* `configuredOptions: object`

  Contents of `alignment.options`.

<a id="error-alignment-config-name-already-defined">

### `alignment-config-name-already-defined`

The same `name` in one of the `alignment.options` was already declared. Each `name` representing one alignment option can be set exactly once.

#### Parameters

* `option: object`

  First option that declares given `name`.

* `configuredOptions: object`

  Contents of `alignment.options`.

<a id="error-alignment-config-name-not-recognized">

### `alignment-config-name-not-recognized`

The `name` in one of the `alignment.options` is not recognized. The available options are: `'left'`, `'right'`, `'center'` and `'justify'`.

#### Parameters

* `option: object`

  Options with unknown value of the `name` property.

<a id="error-annotation-invalid-target">

### `annotation-invalid-target`

An error thrown when the target type is invalid.

The target should be either:

* a DOM element or an array of DOM elements,
* or [a rect instance](../api/module_utils_dom_rect-Rect.md),
* or `null`,
* or a callback that returns one of the above.

<a id="error-annotationcollection-duplicated-item">

### `annotationcollection-duplicated-item`

The annotation already exists in the collection. It cannot be added more than once.

<a id="error-annotationcollection-not-existing-item">

### `annotationcollection-not-existing-item`

The annotation does not exist in the collection and cannot be removed.

<a id="error-annotationsuis-annotation-mismatch">

### `annotationsuis-annotation-mismatch`

An annotation should always belong only to one annotations UI instance. Check filters that were passed to [`activate` methods](../api/module_comments_annotations_annotationsuis-AnnotationsUIs.md#function-activate).

<a id="error-annotationsuis-missing-ui">

### `annotationsuis-missing-ui`

UI with a given name has been not registered.

<a id="error-annotationsuis-missing-ui">

### `annotationsuis-missing-ui`

UI with a given name has been not registered.

<a id="error-annotationsuis-missing-ui">

### `annotationsuis-missing-ui`

UI with a given name has been not registered.

<a id="error-annotationsuis-register-already-registered">

### `annotationsuis-register-already-registered`

UI with a given name already registered.

<a id="error-annotationsuis-register-invalid-interface">

### `annotationsuis-register-invalid-interface`

The annotations UI plugin should implement `AnnotationsUI` interface.

<a id="error-attachtoform-missing-elementapi-interface">

### `attachtoform-missing-elementapi-interface`

The editor passed to `attachToForm()` must implement the [`ElementApi`](../api/module_core_editor_utils_elementapimixin-ElementApi.md) interface.

<a id="error-attribute-element-get-elements-with-same-id-no-id">

### `attribute-element-get-elements-with-same-id-no-id`

Cannot get elements with the same id for an attribute element without id.

<a id="error-attribute-operation-attribute-exists">

### `attribute-operation-attribute-exists`

The attribute with given key already exists for the given node.

#### Parameters

* `root: ModelItem`

  The item element.

* `key: string`

  The key of the attribute.

<a id="error-attribute-operation-range-not-flat">

### `attribute-operation-range-not-flat`

The range to change is not flat.

<a id="error-attribute-operation-wrong-old-value">

### `attribute-operation-wrong-old-value`

Changed node has different attribute value than operation's old attribute value.

#### Parameters

* `root: ModelItem`

  The item element.

* `key: string`

  The key of the attribute.

* `value: never`

  The value.

<a id="error-batch-constructor-deprecated-string-type">

### `batch-constructor-deprecated-string-type`

The string value for a `type` property of the `Batch` constructor has been deprecated and will be removed in the near future. Please refer to the [`Batch` constructor API documentation](../api/module_engine_model_batch-Batch.md#function-constructor) for more information.

<a id="error-batch-type-deprecated">

### `batch-type-deprecated`

The `Batch#type` property has been deprecated and will be removed in the near future. Use `Batch#isLocal`, `Batch#isUndoable`, `Batch#isUndo` and `Batch#isTyping` instead.

<a id="error-cannot-change-view-tree">

### `cannot-change-view-tree`

Thrown when there is an attempt to make changes to the view tree when it is in incorrect state. This may cause some unexpected behaviour and inconsistency between the DOM and the view. This may be caused by:

* calling [`change`](../api/module_engine_view_view-EditingView.md#function-change) or [`forceRender`](../api/module_engine_view_view-EditingView.md#function-forceRender) during rendering process,
* calling [`change`](../api/module_engine_view_view-EditingView.md#function-change) or [`forceRender`](../api/module_engine_view_view-EditingView.md#function-forceRender) inside of [post-fixer function](../api/module_engine_view_document-ViewDocument.md#function-registerPostFixer).

<a id="error-case-change-invalid-license-key">

### `case-change-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-case-change-trial-license-key-reached-limit-changes">

### `case-change-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get full access at https\://ckeditor.com/contact/.

<a id="error-ckbox-access-default-workspace-error">

### `ckbox-access-default-workspace-error`

The user is not authorized to access the workspace defined in the`ckbox.defaultUploadWorkspaceId` configuration.

<a id="error-ckbox-fetch-category-http-error">

### `ckbox-fetch-category-http-error`

Fetching a list of available categories with which an uploaded file can be associated failed.

<a id="error-ckbox-image-edit-unavailable-with-trusted-types">

### `ckbox-image-edit-unavailable-with-trusted-types`

The CKBox image editor is not available, because the application enforces Trusted Types with the `require-trusted-types-for 'script'` CSP directive. The image editor writes HTML in a way that this directive rejects, and the editor cannot change how it does that. Choosing assets in CKBox still works.

The editor disables its own **Edit image** button. The **Edit** button in the CKBox dialog is part of CKBox, so it stays available, but the image editor that it opens cannot load the image either.

For a detailed overview, check the [Content Security Policy](../getting-started/setup/csp.md#known-limitations) guide.

<a id="error-ckbox-image-not-processed">

### `ckbox-image-not-processed`

Image has not been processed yet.

<a id="error-ckbox-image-processing-failed">

### `ckbox-image-processing-failed`

The image processing failed.

<a id="error-ckbox-plugin-image-feature-missing">

### `ckbox-plugin-image-feature-missing`

The CKBox feature requires one of the following plugins to be loaded to work correctly:

* [`ImageBlock`](../api/module_image_imageblock-ImageBlock.md),
* [`ImageInline`](../api/module_image_imageinline-ImageInline.md),
* [`Image`](../api/module_image_image-Image.md) (loads both `ImageBlock` and `ImageInline`)

Please make sure your editor configuration is correct.

#### Parameters

* `editor: Editor`

  The editor instance.

<a id="error-ckbox-plugin-missing-token-url">

### `ckbox-plugin-missing-token-url`

The [`config.ckbox.tokenUrl`](../api/module_ckbox_ckboxconfig-CKBoxConfig.md#member-tokenUrl) or the [`config.cloudServices.tokenUrl`](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-tokenUrl) configuration is required for the CKBox plugin.

```typescript
ClassicEditor.create( {
	attachTo: document.createElement( 'div' ),
	ckbox: {
		tokenUrl: "YOUR_TOKEN_URL"
		// ...
	}
	// ...
} );
```

<a id="error-ckeditor-duplicated-modules">

### `ckeditor-duplicated-modules`

This error is thrown when, due to a mistake in the way CKEditor 5 was installed, imported, or initialized, some of its modules were evaluated and executed twice. Duplicate modules inevitably lead to runtime errors and increased bundle size.

#### Check dependency versions

First, make sure that you use the latest version of all CKEditor 5 dependencies. Depending on the installation method, you should check the versions of the `ckeditor5`, `ckeditor5-premium-features`, or `@ckeditor/ckeditor5-<NAME>` packages. If you cannot update to the latest version, ensure that all the CKEditor 5 packages are in the same version.

If you use third-party plugins, make sure to update them, too. If they are incompatible with the version of CKEditor 5 you use, you may need to downgrade the CKEditor 5 packages (which we do not recommend). Ask the plugin's author to upgrade the dependencies, or fork their project and update it yourself.

#### Check imports

The next step is to look at how you import CKEditor 5 into your project.

**The [new installation methods](../updating/nim-migration/migration-to-new-installation-methods.md) are designed to prevent module duplication, so if you are not using them yet, you should consider updating your project**. However, several legacy installation methods are still supported for backward compatibility, and mixing them may result in module duplication.

These are the most common import methods of the CKEditor 5 packages.

* **New installation methods (NIM)** – Imports from the `ckeditor5` and `ckeditor5-premium-features` packages.
* **Optimized build** for the new installation methods – Imports from the `@ckeditor/ckeditor5-<NAME>/dist/index.js`.
* **Predefined builds** (no longer supported) – Imports from the `@ckeditor/ckeditor5-build-<NAME>` packages.
* **Default imports** (legacy) – Imports from the `@ckeditor/ckeditor5-<NAME>` packages (default export).
* **`src`** (legacy) – Imports from the `@ckeditor/ckeditor5-<NAME>/src/*`.
* **DLL builds** (legacy) – Imports from the `ckeditor5/build/<NAME>` and `@ckeditor/ckeditor5-<NAME>/build/*`.

The best way to avoid duplicate modules is to avoid mixing these installation methods. For example, if you use imports specific to the optimized build, you should use them for all CKEditor 5 packages. In addition, since the DLL builds already include the core of the editor, they cannot be used with other types of imports.

Here is a matrix showing which installation methods are compatible with each other:

|                  | NIM | Optimized build | Predefined builds | Default imports | `src` | DLL builds |
| ---------------- | --- | --------------- | ----------------- | --------------- | ----- | ---------- |
| NIM              | ✅   | ✅               | ❌                 | ❌               | ❌     | ❌          |
| Optimized builds | ✅   | ✅               | ❌                 | ❌               | ❌     | ❌          |
| Predefined build | ❌   | ❌               | ✅                 | ❌               | ❌     | ❌          |
| Default imports  | ❌   | ❌               | ❌                 | ✅               | ✅     | ❌          |
| `src`            | ❌   | ❌               | ❌                 | ✅               | ✅     | ❌          |
| DLL builds       | ❌   | ❌               | ❌                 | ❌               | ❌     | ✅          |

If you use any third-party plugins, make sure the way you import them is compatible with the way you import CKEditor 5.

New installation methods and optimized builds

If you use the [new installation methods](../updating/nim-migration/migration-to-new-installation-methods.md), you should only import { code } from the `ckeditor5` and `ckeditor5-premium-features` packages. Do not import { code } from the `@ckeditor/ckeditor5-<NAME>` packages unless you follow the [Optimizing build size](../getting-started/setup/optimizing-build-size.md) guide and the imports from the `@ckeditor/ckeditor5-<NAME>` packages end with `/dist/index.js`.

If you use a CDN, ensure that some files are not included twice in your project.

Examples of valid and invalid import paths:

```js
import { ClassicEditor, Highlight } from 'ckeditor5'; // ✅
import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ✅
import { Highlight } from '@ckeditor/ckeditor5-highlight/src/highlight.js'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ❌
import '@ckeditor/ckeditor5-highlight/build/highlight.js'; // ❌
```

(Deprecated) Predefined builds

**As of April, 2025 predefined build are no longer supported. Please refer to the [Quick Start](../getting-started/index.md) guide to choose one of the modern installation and integration methods available**.

If you use the predefined builds, you cannot import any additional plugins. These builds already include the editor's core and selected plugins and importing additional ones will cause some modules to be bundled and loaded twice.

Examples of valid and invalid import paths:

```js
import { ClassicEditor } from '@ckeditor/ckeditor5-build-classic'; // ✅
import { Highlight } from 'ckeditor5'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight/src/highlight'; // ❌
import '@ckeditor/ckeditor5-highlight/build/highlight'; // ❌
```

If you are missing some features from the list of plugins, you should switch to the [new installation methods](../updating/nim-migration/migration-to-new-installation-methods.md) which do not have this limitation.

(Legacy) Default imports and \`src\` imports

If you use the legacy customized installation method, you should only import code from the `@ckeditor/ckeditor5-<NAME>` packages. While you can import code from the `@ckeditor/ckeditor5-<NAME>/src/*` files, it is not recommended as it can make migration to the new installation methods more difficult.

If you use this installation method, you should not import { code } from the `ckeditor5` or `ckeditor5-premium-features` packages.

Examples of valid and invalid import paths:

```js
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic'; // ✅
import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ✅
import { Highlight } from '@ckeditor/ckeditor5-highlight/src/highlight.js'; // ✅ (not recommended)
import { Highlight } from 'ckeditor5'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ❌
import '@ckeditor/ckeditor5-highlight/build/highlight'; // ❌
```

(Legacy) DLL builds

If you are using the [legacy DLL builds](../updating/nim-migration/dll-builds.md), you should not import any non-DLL modules.

Examples of valid and invalid import paths:

```js
import 'ckeditor5/build/ckeditor5-dll.js';// ✅
import '@ckeditor/ckeditor5-editor-classic/build/editor-classic.js';// ✅
import '@ckeditor/ckeditor5-highlight/build/highlight.js';// ✅
import { Highlight } from 'ckeditor5'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight/dist/index.js'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight'; // ❌
import { Highlight } from '@ckeditor/ckeditor5-highlight/src/highlight.js'; // ❌
```

#### Reinstall `node_modules`

Usually, npm and other package managers deduplicate all packages - for example, `ckeditor5` is only installed once in `node_modules/`. However, it is known to fail to do so occasionally.

To rule out this possibility, you can try the following:

1. Remove the `node_modules` directory.
2. Remove the `package-lock.json`, `yarn.lock`, or `pnpm-lock.yaml` files (depending on the package manager used).
3. Run `npm install` to reinstall all packages.
4. Run `npm ls` to check how many times packages like `@ckeditor/ckeditor5-core` are installed. If they are installed more than once, verify which package causes that.

<a id="error-ckfinder-missing-image-plugin">

### `ckfinder-missing-image-plugin`

CKFinder requires at least one plugin providing support for images loaded in the editor. Please make sure either:

* [`Image`](../api/module_image_image-Image.md) (which loads both types of images),
* or [`ImageBlock`](../api/module_image_imageblock-ImageBlock.md),
* or [`ImageInline`](../api/module_image_imageinline-ImageInline.md).

is loaded in your editor configuration.

<a id="error-ckfinder-unknown-openermethod">

### `ckfinder-unknown-openermethod`

The `ckfinder.openerMethod` must be one of: "popup" or "modal".

<a id="error-cloudservices-init">

### `cloudservices-init`

An internal `WebSocketGateway` error.

This error might occur because of the incorrectly configured [`webSocketUrl`](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-webSocketUrl) \* `config.cloudServices.webSocketUrl`} or because of the service handling the WebSocket connections being unavailable.

The original error is passed in the `error.data.originalError` property.

<a id="error-cloudservices-reconnection-error">

### `cloudservices-reconnection-error`

An internal reconnection error.

<a id="error-cloudservices-token-not-registered">

### `cloudservices-token-not-registered`

The provided `tokenUrl` was not registered by [`registerTokenUrl`](../api/module_cloud-services_cloudservices-CloudServices.md#function-registerTokenUrl).

<a id="error-cloudservicescommentsadapter-connect-already-connected">

### `cloudservicescommentsadapter-connect-already-connected`

Cannot connect to the same channelId more than once.

<a id="error-cloudservicescommentsadapter-disconnect-not-exist">

### `cloudservicescommentsadapter-disconnect-not-exist`

Missing service with the given `channelId`.

<a id="error-cloudservicescommentsadapter-service-not-exist">

### `cloudservicescommentsadapter-service-not-exist`

Missing service of a given channelId.

<a id="error-collaboration-missing-channelid">

### `collaboration-missing-channelid`

Unique `collaboration.channelId` configuration is required for defining name for data stores. Note that application instances with the same channelId will share data each other.

<a id="error-collection-add-invalid-id">

### `collection-add-invalid-id`

This item's ID should be a string.

<a id="error-collection-add-item-already-exists">

### `collection-add-item-already-exists`

This item already exists in the collection.

<a id="error-collection-add-item-invalid-index">

### `collection-add-item-invalid-index`

The `index` passed to [`Collection#addMany()`](../api/module_utils_collection-Collection.md#function-addMany) is invalid. It must be a number between 0 and the collection's length.

<a id="error-collection-bind-to-rebind">

### `collection-bind-to-rebind`

The collection cannot be bound more than once.

<a id="error-collection-get-invalid-arg">

### `collection-get-invalid-arg`

An index or ID must be given.

<a id="error-collection-remove-404">

### `collection-remove-404`

Item not found.

<a id="error-color-picker-unavailable-with-trusted-types">

### `color-picker-unavailable-with-trusted-types`

The color picker is not available, because the application enforces Trusted Types with the `require-trusted-types-for 'script'` CSP directive. The color picker cannot be rendered under that directive, so the editor turns it off.

The color palettes and the document colors are not affected. To turn the color picker off yourself, and stop this warning, set the `colorPicker` option of the feature to `false`.

For a detailed overview, check the [Content Security Policy](../getting-started/setup/csp.md#known-limitations) guide.

<a id="error-commandcollection-command-not-found">

### `commandcollection-command-not-found`

Command does not exist.

#### Parameters

* `commandName: string`

  Name of the command.

<a id="error-commentsrepository-active-missing-comment-thread">

### `commentsrepository-active-missing-comment-thread`

Cannot set a non-existent comment thread as an active. Check if comment thread of the given id is added to the repository.

<a id="error-commentsrepository-active-not-attached">

### `commentsrepository-active-not-attached`

Cannot set a not attached comment thread as an active. Comment thread has to be attached to the target element to set it as active.

<a id="error-commentsrepository-adapter-already-set">

### `commentsrepository-adapter-already-set`

Cannot set adapter more than once.

<a id="error-commentsrepository-add-comment-internal-error">

### `commentsrepository-add-comment-internal-error`

Adding comment threw an error.

<a id="error-commentsrepository-add-comment-thread-internal-error">

### `commentsrepository-add-comment-thread-internal-error`

Adding comment thread threw an error.

<a id="error-commentsrepository-add-comment-to-missing-comment-thread">

### `commentsrepository-add-comment-to-missing-comment-thread`

Cannot add comment to a non-existent comment thread.

<a id="error-commentsrepository-add-comment-user-not-exists">

### `commentsrepository-add-comment-user-not-exists`

Comment author is not defined in Users plugin.

<a id="error-commentsrepository-attach-missing-comment-thread">

### `commentsrepository-attach-missing-comment-thread`

Cannot attach a non-existent comment thread.

<a id="error-commentsrepository-duplicated-comment-thread-id">

### `commentsrepository-duplicated-comment-thread-id`

Comment thread with a given id is already added to the repository.

<a id="error-commentsrepository-fetch-comment-thread">

### `commentsrepository-fetch-comment-thread`

Fetching a comment thread failed.

<a id="error-commentsrepository-get-comment-invalid-id">

### `commentsrepository-get-comment-invalid-id`

Comment id has to be a string.

<a id="error-commentsrepository-invalid-comment-authorid">

### `commentsrepository-invalid-comment-authorid`

Comment author id has to be a string.

<a id="error-commentsrepository-invalid-comment-content">

### `commentsrepository-invalid-comment-content`

Comment content has to be a string.

<a id="error-commentsrepository-invalid-comment-thread-id">

### `commentsrepository-invalid-comment-thread-id`

Comment thread id has to be a string.

<a id="error-commentsrepository-invalid-commentid">

### `commentsrepository-invalid-commentid`

Comment id has to be a string.

<a id="error-commentsrepository-missing-comment-thread">

### `commentsrepository-missing-comment-thread`

Comment thread with a given id is not existing.

<a id="error-commentsrepository-missing-target">

### `commentsrepository-missing-target`

Target is required to open new comment thread.

<a id="error-commentsrepository-missing-thread-and-adapter-method">

### `commentsrepository-missing-thread-and-adapter-method`

Comment thread with a given id is not added to the editor nor `adapter.getCommentThread()` is defined. See the [Comments integration](../features/collaboration/comments/comments-integration.md) guide.

<a id="error-commentsrepository-remove-comment-internal-error">

### `commentsrepository-remove-comment-internal-error`

Removing comment resulted in an error.

<a id="error-commentsrepository-remove-comment-missing-comment-thread">

### `commentsrepository-remove-comment-missing-comment-thread`

Cannot remove comment from a non-existent comment thread.

<a id="error-commentsrepository-remove-comment-thread-internal-error">

### `commentsrepository-remove-comment-thread-internal-error`

Removing comment resulted in an error.

<a id="error-commentsrepository-remove-missing-comment">

### `commentsrepository-remove-missing-comment`

Cannot remove a non-existent Comment.

<a id="error-commentsrepository-remove-missing-comment-thread">

### `commentsrepository-remove-missing-comment-thread`

Cannot remove a non-existent comment thread.

<a id="error-commentsrepository-reopen-comment-thread">

### `commentsrepository-reopen-comment-thread`

Comment thread with a given id is not resolved.

<a id="error-commentsrepository-reopen-comment-thread-internal-error">

### `commentsrepository-reopen-comment-thread-internal-error`

Reopening comment thread resulted in an error.

<a id="error-commentsrepository-resolve-comment-thread-internal-error">

### `commentsrepository-resolve-comment-thread-internal-error`

Resolving comment thread resulted in an error.

<a id="error-commentsrepository-resolved-comment-thread">

### `commentsrepository-resolved-comment-thread`

Comment thread with a given id has been already resolved.

<a id="error-commentsrepository-update-comment-internal-error">

### `commentsrepository-update-comment-internal-error`

Updating comment resulted in an error.

<a id="error-commentsrepository-update-comment-invalid-content">

### `commentsrepository-update-comment-invalid-content`

Comment content has to be a string.

<a id="error-commentsrepository-update-comment-missing-comment-thread">

### `commentsrepository-update-comment-missing-comment-thread`

Cannot update a comment of a non-existent comment thread.

<a id="error-commentsrepository-update-comment-thread-internal-error">

### `commentsrepository-update-comment-thread-internal-error`

Updating comment thread resulted in an error.

<a id="error-commentsrepository-update-missing-comment">

### `commentsrepository-update-missing-comment`

Cannot update a non-existent Comment.

<a id="error-componentfactory-item-missing">

### `componentfactory-item-missing`

The required component is not registered in the component factory. Please make sure the provided name is correct and the component has been correctly [added](../api/module_ui_componentfactory-ComponentFactory.md#function-add) to the factory.

#### Parameters

* `name: string`

  The name of the missing component.

<a id="error-context-addeditor-private-context">

### `context-addeditor-private-context`

Cannot add multiple editors to the context which is created by the editor.

<a id="error-context-initplugins-constructor-only">

### `context-initplugins-constructor-only`

Only a constructor function is allowed as a [context plugin](../api/module_core_contextplugin-ContextPlugin.md).

<a id="error-context-initplugins-invalid-plugin">

### `context-initplugins-invalid-plugin`

Only a plugin marked as a [context plugin](../api/module_core_contextplugin-ContextPlugin.md#static-member-isContextPlugin) is allowed to be used with a context.

<a id="error-contextualballoon-add-view-exist">

### `contextualballoon-add-view-exist`

Trying to add configuration of the same view more than once.

<a id="error-contextualballoon-remove-view-not-exist">

### `contextualballoon-remove-view-not-exist`

Trying to remove the configuration of the view not defined in the stack.

<a id="error-contextualballoon-showstack-stack-not-exist">

### `contextualballoon-showstack-stack-not-exist`

Trying to show a stack that does not exist.

<a id="error-conversion-add-alias-dispatcher-not-registered">

### `conversion-add-alias-dispatcher-not-registered`

Trying to register an alias for a dispatcher that nas not been registered.

<a id="error-conversion-attribute-to-attribute-on-text">

### `conversion-attribute-to-attribute-on-text`

This error occurs when a [text node's](../api/module_engine_model_textproxy-ModelTextProxy.md) attribute is to be downcasted by an [`Attribute to Attribute converter`](../api/module_engine_conversion_conversion-Conversion.md#function-attributeToAttribute). In most cases it is caused by converters misconfiguration when only "generic" converter is defined:

```typescript
editor.conversion.for( 'downcast' ).attributeToAttribute( {
	model: 'attribute-name',
	view: 'attribute-name'
} ) );
```

and given attribute is used on text node, for example:

```typescript
model.change( writer => {
	writer.insertText( 'Foo', { 'attribute-name': 'bar' }, parent, 0 );
} );
```

In such cases, to convert the same attribute for both [`ModelElement`](../api/module_engine_model_element-ModelElement.md) and [`Text`](../api/module_engine_model_textproxy-ModelTextProxy.md) nodes, text specific [`Attribute to Element converter`](../api/module_engine_conversion_conversion-Conversion.md#function-attributeToElement) with higher [priority](../api/module_utils_priorities-PriorityString.md) must also be defined:

```typescript
editor.conversion.for( 'downcast' ).attributeToElement( {
	model: {
		key: 'attribute-name',
		name: '$text'
	},
	view: ( value, { writer } ) => {
		return writer.createAttributeElement( 'span', { 'attribute-name': value } );
	},
	converterPriority: 'high'
} ) );
```

#### Parameters

* `data: object`

  The conversion data.

<a id="error-conversion-element-to-structure-disallowed-text">

### `conversion-element-to-structure-disallowed-text`

This error occurs when a [model element](../api/module_engine_model_element-ModelElement.md) is downcasted via [`elementToStructure`](../api/module_engine_conversion_downcasthelpers-DowncastHelpers.md#function-elementToStructure) helper but the element was allowed to host `$text` by the [model schema](../api/module_engine_model_schema-ModelSchema.md).

For instance, this may be the result of `myElement` allowing the content of [`$block`](../framework/deep-dive/schema.md#generic-items) in its schema definition:

```typescript
// Element definition in schema.
schema.register( 'myElement', {
	allowContentOf: '$block',

	// ...
} );

// ...

// Conversion of myElement with the use of elementToStructure().
editor.conversion.for( 'downcast' ).elementToStructure( {
	model: 'myElement',
	view: ( modelElement, { writer } ) => {
		// ...
	}
} );
```

In such case, [`elementToElement()`](../api/module_engine_conversion_downcasthelpers-DowncastHelpers.md#function-elementToElement) helper can be used instead to get around this problem:

```typescript
editor.conversion.for( 'downcast' ).elementToElement( {
	model: 'myElement',
	view: ( modelElement, { writer } ) => {
		// ...
	}
} );
```

#### Parameters

* `elementName: string`

  The name of the element the structure is to be created for.

<a id="error-conversion-for-unknown-group">

### `conversion-for-unknown-group`

Trying to add a converter to an unknown dispatchers group.

<a id="error-conversion-group-exists">

### `conversion-group-exists`

Trying to register a group name that has already been registered.

<a id="error-conversion-model-consumable-not-consumed">

### `conversion-model-consumable-not-consumed`

Some of the [model items](../api/module_engine_model_item-ModelItem.md) were not consumed while downcasting the model to view.

This might be the effect of:

* A missing converter for some model elements. Make sure that you registered downcast converters for all model elements.
* A custom converter that does not consume converted items. Make sure that you [consumed](../api/module_engine_conversion_modelconsumable-ModelConsumable.md#function-consume) all model elements that you converted from the model to the view.
* A custom converter that called `event.stop()`. When providing a custom converter, keep in mind that you should not stop the event. If you stop it then the default converter at the `lowest` priority will not trigger the conversion of this node's attributes and child nodes.

#### Parameters

* `items: Array<ModelItem>`

  Items that were not consumed.

<a id="error-conversion-slot-filter-incomplete">

### `conversion-slot-filter-incomplete`

Filters provided to `writer.createSlot()` are incomplete and exclude at least one children element (one of the children elements would not be assigned to any of the slots).

#### Parameters

* `element: ModelElement`

  The element of which children would not be properly

<a id="error-conversion-slot-filter-overlap">

### `conversion-slot-filter-overlap`

Filters provided to `writer.createSlot()` overlap (at least two filters accept the same child element).

#### Parameters

* `element: ModelElement`

  The element of which children would not be properly

<a id="error-conversion-slot-mode-unknown">

### `conversion-slot-mode-unknown`

Unknown slot mode was provided to `writer.createSlot()` in the downcast converter.

#### Parameters

* `modeOrFilter: never`

  The specified mode or filter.

<a id="error-css-full-page-provide-sanitize-function">

### `css-full-page-provide-sanitize-function`

When using the Full page with the `config.htmlSupport.fullPage.allowRenderStylesFromHead` set to `true`, it is strongly recommended to define a sanitize function that will clean up the CSS which is present in the `<head>` in editors content in order to avoid XSS vulnerability.

For a detailed overview, check the [Full page HTML feature](../features/html/full-page-html.md) documentation.

<a id="error-data-filter-invalid-definition">

### `data-filter-invalid-definition`

The definition cannot be handled by the data filter.

Make sure that the registered definition is correct.

<a id="error-datacontroller-get-detached-root">

### `datacontroller-get-detached-root`

Retrieving document data for a detached root.

This usually indicates an error as a detached root should be considered "removed" and should not be included in the document data.

<a id="error-datacontroller-get-non-existent-root">

### `datacontroller-get-non-existent-root`

Cannot get data from a non-existing root. This error is thrown when [`DataController#get()` method](../api/module_engine_controller_datacontroller-DataController.md#function-get) is called with a non-existent root name. For example, if there is an editor instance with only `main` root, calling [`get`](../api/module_engine_controller_datacontroller-DataController.md#function-get) like:

```typescript
data.get( { rootName: 'root2' } );
```

will throw this error.

<a id="error-datacontroller-init-document-not-empty">

### `datacontroller-init-document-not-empty`

Cannot set initial data to a non-empty [`ModelDocument`](../api/module_engine_model_document-ModelDocument.md). Initial data should be set once, during the [`Editor`](../api/module_core_editor_editor-Editor.md) initialization, when the [`version`](../api/module_engine_model_document-ModelDocument.md#member-version) is equal 0.

<a id="error-datacontroller-init-non-existent-root">

### `datacontroller-init-non-existent-root`

Cannot init data on a non-existent root. This error is thrown when [DataController#init() method](../api/module_engine_controller_datacontroller-DataController.md#function-init) is called with non-existent root name. For example, if there is an editor instance with only `main` root, calling [`init`](../api/module_engine_controller_datacontroller-DataController.md#function-init) like:

```typescript
data.init( { main: '<p>Foo</p>', root2: '<p>Bar</p>' } );
```

will throw this error.

<a id="error-datacontroller-set-non-existent-root">

### `datacontroller-set-non-existent-root`

Cannot set data on a non-existent root. This error is thrown when the [DataController#set() method](../api/module_engine_controller_datacontroller-DataController.md#function-set) is called with non-existent root name. For example, if there is an editor instance with only the default `main` root, calling [`set`](../api/module_engine_controller_datacontroller-DataController.md#function-set) like:

```typescript
data.set( { main: '<p>Foo</p>', root2: '<p>Bar</p>' } );
```

will throw this error.

<a id="error-decompress-compressor-not-found">

### `decompress-compressor-not-found`

The compressor could not decompress the data as the compressor for one of entries in the `types` array has not been found.

<a id="error-detach-operation-on-document-node">

### `detach-operation-on-document-node`

Cannot detach document node.

<a id="error-document-outline-container-not-provided">

### `document-outline-container-not-provided`

A DOM element to inject the document outline is not provided. Please set the [`config.documentOutline.container`](../api/module_document-outline_documentoutline-DocumentOutlineConfig.md#member-container) configuration option.

#### Parameters

* `editor: Editor`

  Editor instance related to error.

<a id="error-document-outline-invalid-license-key">

### `document-outline-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-document-outline-trial-license-key-reached-limit-changes">

### `document-outline-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-document-selection-gravity-wrong-restore">

### `document-selection-gravity-wrong-restore`

Restoring gravity for an unknown UID is not possible. Make sure you are using a correct UID obtained from the [`overrideSelectionGravity`](../api/module_engine_model_writer-ModelWriter.md#function-overrideSelectionGravity) to restore.

#### Parameters

* `uid: string`

  The unique identifier returned by

<a id="error-document-selection-wrong-position">

### `document-selection-wrong-position`

Range from [document selection](../api/module_engine_model_documentselection-ModelDocumentSelection.md) starts or ends at incorrect position.

#### Parameters

* `range: ModelRange`

  The invalid range.

<a id="error-documentcompare-apply-failed">

### `documentcompare-apply-failed`

Applying the patch operations to the document failed. The patch might be applied partially and the document may be in a broken state.

<a id="error-documentcompare-apply-session-mismatch">

### `documentcompare-apply-session-mismatch`

The patch is applied for a different document or editing session than the one it was captured in. The snapshot it was produced from is stale (for example the collaboration session was flushed, or the editor was re-initialized), so the patch changes cannot be merged with the current document.

<a id="error-documentcompare-applypatch-invalid-patch">

### `documentcompare-applypatch-invalid-patch`

The patch failed validation and cannot be applied. The patch operations were trial-applied to a copy of the current document which failed. The patch operations are incorrect and structurally invalid against the current document. The patch cannot be applied on the document.

<a id="error-documentcompare-applypatch-unsupported-operation">

### `documentcompare-applypatch-unsupported-operation`

The patch contains a root operation, which is not produced and is not supported by `DocumentCompare`.

<a id="error-documentcompare-no-track-changes">

### `documentcompare-no-track-changes`

Track changes feature is required to apply operations as suggestions.

<a id="error-domconverter-invalid-attribute-detected">

### `domconverter-invalid-attribute-detected`

Invalid attribute name was ignored during rendering.

<a id="error-domconverter-transparent-rendering-unsupported-in-editing-pipeline">

### `domconverter-transparent-rendering-unsupported-in-editing-pipeline`

The `dataPipeline:transparentRendering` flag is supported only in the data pipeline.

<a id="error-domconverter-unsafe-attribute-detected">

### `domconverter-unsafe-attribute-detected`

The [`ViewDomConverter`](../api/module_engine_view_domconverter-ViewDomConverter.md) detected an interactive attribute in the [editing pipeline](../framework/architecture/editing-engine.md#editing-pipeline). For the best editing experience, the attribute was renamed to `data-ck-unsafe-attribute-[original attribute name]`.

If you are the author of the plugin that generated this attribute and you want it to be preserved in the editing pipeline, you can configure this when creating the element using [`ViewDowncastWriter`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md) during the [model–view conversion](../framework/architecture/editing-engine.md#conversion). Methods such as [`createContainerElement`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-createContainerElement:WITHOUT_CHILDREN), [`createAttributeElement`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-createAttributeElement), or [`createEmptyElement`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-createEmptyElement) accept an option that will disable filtering of specific attributes:

```typescript
const paragraph = writer.createContainerElement( 'p',
	{
		class: 'clickable-paragraph',
		onclick: 'alert( "Paragraph clicked!" )'
	},
	{
		// Make sure the "onclick" attribute will pass through.
		renderUnsafeAttributes: [ 'onclick' ]
	}
);
```

#### Parameters

* `domElement: HTMLElement`

  The DOM element the attribute was set on.

* `key: string`

  The original name of the attribute

* `value: string`

  The value of the original attribute

<a id="error-domconverter-unsafe-script-element-detected">

### `domconverter-unsafe-script-element-detected`

While rendering the editor content, the [`ViewDomConverter`](../api/module_engine_view_domconverter-ViewDomConverter.md) detected a `<script>` element that may disrupt the editing experience. To avoid this, the `<script>` element was replaced with `<span data-ck-unsafe-element="script"></span>`.

<a id="error-domconverter-unsafe-style-element-detected">

### `domconverter-unsafe-style-element-detected`

While rendering the editor content, the [`ViewDomConverter`](../api/module_engine_view_domconverter-ViewDomConverter.md) detected a `<style>` element that may affect the editing experience. To avoid this, the `<style>` element was replaced with `<span data-ck-unsafe-element="style"></span>`.

<a id="error-easy-image-image-feature-missing">

### `easy-image-image-feature-missing`

The Easy Image feature requires one of the following plugins to be loaded to work correctly:

* [`ImageBlock`](../api/module_image_imageblock-ImageBlock.md),
* [`ImageInline`](../api/module_image_imageinline-ImageInline.md),
* [`Image`](../api/module_image_image-Image.md) (loads both `ImageBlock` and `ImageInline`)

Please make sure your editor configuration is correct.

#### Parameters

* `editor: Editor`

  The editor instance.

<a id="error-editingcontroller-reconvertmarker-marker-not-exist">

### `editingcontroller-reconvertmarker-marker-not-exist`

The marker with the provided name does not exist and cannot be reconverted.

#### Parameters

* `markerName: string`

  The name of the reconverted marker.

<a id="error-editor-config-invalid-type">

### `editor-config-invalid-type`

Editor configuration must be an object.

A common cause of this error is passing an Editor class (for example `ClassicEditor`) in the `config.plugins` array. In such case, the editor constructor is called with an Editor or Context instance instead of the configuration object.

<a id="error-editor-config-sanitizehtml-not-supported">

### `editor-config-sanitizehtml-not-supported`

Configuration property `config.sanitizeHtml` was removed in CKEditor version 43.1.0 and is no longer supported.

Please use `config.htmlEmbed.sanitizeHtml` and/or `config.mergeFields.sanitizeHtml` instead.

<a id="error-editor-create-attachto-ignored">

### `editor-create-attachto-ignored`

The [`config.attachTo`](../api/module_core_editor_editorconfig-EditorConfig.md#member-attachTo) option is only available for the [`ClassicEditor`](../api/module_editor-classic_classiceditor-ClassicEditor.md) because it replaces the given DOM element with its own UI. Other editor types (e.g. inline, balloon, decoupled) render inside the root element directly, so `config.attachTo` is not applicable.

Remove the `attachTo` option from the editor configuration and use [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element) (or `config.roots.<rootName>.element` for the multi-root editor) to specify the DOM element instead.

<a id="error-editor-create-attachto-overspecified">

### `editor-create-attachto-overspecified`

The element to attach the editor to is specified both as the first argument of [`ClassicEditor.create()`](../api/module_editor-classic_classiceditor-ClassicEditor.md#static-function-create) and in [`config.attachTo`](../api/module_core_editor_editorconfig-EditorConfig.md#member-attachTo).

Passing the element as the first argument is deprecated. Remove it and use [`config.attachTo`](../api/module_core_editor_editorconfig-EditorConfig.md#member-attachTo) instead.

<a id="error-editor-create-initial-data">

### `editor-create-initial-data`

The `config.initialData` option cannot be used together with the initial data passed as the first parameter of [`Editor.create()`](../api/module_core_editor_editor-Editor.md#static-function-create).

<a id="error-editor-create-initial-data-overspecified">

### `editor-create-initial-data-overspecified`

The initial data is specified both as the first argument of the editor `create()` method (e.g. [`InlineEditor.create()`](../api/module_editor-inline_inlineeditor-InlineEditor.md#static-function-create) or [`MultiRootEditor.create()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#static-function-create)) and in the deprecated [`config.initialData`](../api/module_core_editor_editorconfig-EditorConfig.md#member-initialData).

Passing initial data as the first argument is deprecated. Remove it and use [`config.root.initialData`](../api/module_core_editor_editorconfig-RootConfig.md#member-initialData) (or `config.roots.<rootName>.initialData` for the multi-root editor) instead.

<a id="error-editor-create-legacy-initial-data-overspecified">

### `editor-create-legacy-initial-data-overspecified`

The initial data is specified both in [`config.root.initialData`](../api/module_core_editor_editorconfig-RootConfig.md#member-initialData) (or `config.roots.<rootName>.initialData` for the multi-root editor) and in the deprecated [`config.initialData`](../api/module_core_editor_editorconfig-EditorConfig.md#member-initialData).

The `config.initialData` option is deprecated. Remove it and use [`config.root.initialData`](../api/module_core_editor_editorconfig-RootConfig.md#member-initialData) (or `config.roots.<rootName>.initialData` for the multi-root editor) instead.

<a id="error-editor-create-multi-root-with-main">

### `editor-create-multi-root-with-main`

The [`config.root`](../api/module_core_editor_editorconfig-EditorConfig.md#member-root) option is designed for single-root editors and cannot be used with the [multi-root editor](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md).

To configure a multi-root editor, define each root individually using [`config.roots`](../api/module_core_editor_editorconfig-EditorConfig.md#member-roots):

```typescript
MultiRootEditor.create( {
	roots: {
		header: { initialData: '<p>Header</p>' },
		content: { initialData: '<p>Content</p>' }
	}
} );
```

<a id="error-editor-create-root-element-not-supported">

### `editor-create-root-element-not-supported`

The [`ClassicEditor`](../api/module_editor-classic_classiceditor-ClassicEditor.md) cannot use an existing DOM element as [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element) because the classic editor replaces the source element with its own UI rather than editing inline within it. The passed element is ignored along with its content, so any markup inside it will not be used as the editor's initial data. Use [`config.attachTo`](../api/module_core_editor_editorconfig-EditorConfig.md#member-attachTo) to specify the DOM element the editor should replace, or pass the initial data via [`config.root.initialData`](../api/module_core_editor_editorconfig-RootConfig.md#member-initialData).

A tag name string (e.g. `'h1'`) or a [view root element definition](../api/module_core_editor_editorconfig-ViewRootElementDefinition.md) are still accepted - they describe the editable root element the classic editor creates inside its UI box.

<a id="error-editor-create-root-element-overspecified">

### `editor-create-root-element-overspecified`

The root element is specified both as the first argument of the editor `create()` method (e.g. [`InlineEditor.create()`](../api/module_editor-inline_inlineeditor-InlineEditor.md#static-function-create) or [`MultiRootEditor.create()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#static-function-create)) and in [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element) (or `config.roots.<rootName>.element` for the [multi-root editor](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md)).

Passing the element as the first argument is deprecated. Remove it and use [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element) (or `config.roots.<rootName>.element` for the multi-root editor) instead.

<a id="error-editor-create-root-initial-data-overspecified">

### `editor-create-root-initial-data-overspecified`

The initial data is specified both as the first argument of the editor `create()` method (e.g. [`InlineEditor.create()`](../api/module_editor-inline_inlineeditor-InlineEditor.md#static-function-create) or [`MultiRootEditor.create()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#static-function-create)) and in [`config.root.initialData`](../api/module_core_editor_editorconfig-RootConfig.md#member-initialData) (or `config.roots.<rootName>.initialData` for the multi-root editor).

Passing initial data as the first argument is deprecated. Remove it and use [`config.root.initialData`](../api/module_core_editor_editorconfig-RootConfig.md#member-initialData) (or `config.roots.<rootName>.initialData` for the multi-root editor) instead.

<a id="error-editor-create-roots-not-plain-object">

### `editor-create-roots-not-plain-object`

The [`config.roots`](../api/module_core_editor_editorconfig-EditorConfig.md#member-roots) option must be a plain object (an object literal or `Object.create( null )`). Objects with a custom prototype (e.g. created via `Object.create( someProto )`) or class instances are not accepted, because internal configuration processing relies on a known prototype chain to detect nested configuration objects.

Replace the value with a plain object before passing it to the editor:

```typescript
// Wrong
MultiRootEditor.create( {
	roots: Object.assign( Object.create( {} ), { intro: { ... } } )
} );

// Right
MultiRootEditor.create( {
	roots: { intro: { ... } }
} );
```

<a id="error-editor-create-roots-with-main">

### `editor-create-roots-with-main`

Both [`config.root`](../api/module_core_editor_editorconfig-EditorConfig.md#member-root) and `config.roots.main` are set, but they both configure the same default editing root, which creates an ambiguity. Use one or the other:

* [`config.root`](../api/module_core_editor_editorconfig-EditorConfig.md#member-root) for a single-root editor.
* [`config.roots`](../api/module_core_editor_editorconfig-EditorConfig.md#member-roots) when defining multiple roots.

<a id="error-editor-initial-data-replaced-with-revision-data">

### `editor-initial-data-replaced-with-revision-data`

The editor initial data and initial roots attributes were replaced with the most recent revision data, as the editor data was different from revision data.

This means that the editor data was either outdated (possible due to an error, e.g. the document data has not been saved after last changes during the previous editing session) or the data was post-processed after it was obtained from the editor.

Note, that changes in whitespaces are also considered a difference. The same applies to a mismatch in the root's `modelElement` between the editor configuration and the revision data.

<a id="error-editor-isreadonly-has-no-setter">

### `editor-isreadonly-has-no-setter`

The [Editor#isReadOnly](../api/module_core_editor_editor-Editor.md#member-isReadOnly) property is read-only since version `34.0.0` and can be set only using [`Editor#enableReadOnlyMode( lockId )`](../api/module_core_editor_editor-Editor.md#function-enableReadOnlyMode) and [`Editor#disableReadOnlyMode( lockId )`](../api/module_core_editor_editor-Editor.md#function-disableReadOnlyMode).

Usage before version `34.0.0`:

```typescript
editor.isReadOnly = true;
editor.isReadOnly = false;
```

Usage since version `34.0.0`:

```typescript
editor.enableReadOnlyMode( 'my-feature-id' );
editor.disableReadOnlyMode( 'my-feature-id' );
```

<a id="error-editor-missing-sourceelement">

### `editor-missing-sourceelement`

Cannot update the source element of a detached editor.

The [`updateSourceElement()`](../api/module_core_editor_utils_elementapimixin-ElementApi.md#function-updateSourceElement) method cannot be called if you did not pass an element to `Editor.create()`.

<a id="error-editor-read-only-lock-id-invalid">

### `editor-read-only-lock-id-invalid`

The lock ID is missing or it is not a string or symbol.

#### Parameters

* `lockId: never`

  Lock ID.

<a id="error-editor-root-element-is-not-limit">

### `editor-root-element-is-not-limit`

The model root element must be a [limit element](../api/module_engine_model_schema-ModelSchemaItemDefinition.md#member-isLimit). The element name specified in [`config.root.modelElement`](../api/module_core_editor_editorconfig-RootConfig.md#member-modelElement) (or `config.roots.<rootName>.modelElement`) must be registered in the schema with `isLimit` set to `true`.

#### Parameters

* `rootName: any`

  The name of the root that uses a non-limit element.

* `elementName: any`

  The name of the model element used for the root.

<a id="error-editor-root-element-styles-overspecified">

### `editor-root-element-styles-overspecified`

Both the [`styles`](../api/module_core_editor_editorconfig-ViewRootElementDefinition.md#member-styles) object and the [`attributes.style`](../api/module_core_editor_editorconfig-ViewRootElementDefinition.md#member-attributes) string were provided in [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element). Provide one or the other - the object form takes precedence.

<a id="error-editor-source-element-already-used">

### `editor-source-element-already-used`

A DOM element used to create the editor (e.g. [`InlineEditor.create()`](../api/module_editor-inline_inlineeditor-InlineEditor.md#static-function-create)) has already been used to create another editor instance. Make sure each editor is created with a unique DOM element.

#### Parameters

* `element: HTMLElement`

  DOM element that caused the collision.

<a id="error-editor-source-element-not-attached">

### `editor-source-element-not-attached`

Cannot initialize the editor because the provided source element is not attached to the DOM and cannot be replaced.

<a id="error-editor-ui-deprecated-editable-elements">

### `editor-ui-deprecated-editable-elements`

The `EditorUI#_editableElements` property has been deprecated and will be removed in the near future. Please use [`setEditableElement()`](../api/module_ui_editorui_editorui-EditorUI.md#function-setEditableElement) and [`getEditableElement()`](../api/module_ui_editorui_editorui-EditorUI.md#function-getEditableElement) methods instead.

#### Parameters

* `editorUI: EditorUI`

  Editor UI instance the deprecated property belongs to.

<a id="error-editor-ui-deprecated-viewport-offset-config">

### `editor-ui-deprecated-viewport-offset-config`

The [`EditorConfig#toolbar.viewportTopOffset`](../api/module_core_editor_editorconfig-EditorConfig.md#member-toolbar) property has been deprecated and will be removed in the near future. Please use [`EditorConfig#ui.viewportOffset`](../api/module_core_editor_editorconfig-EditorConfig.md#member-ui) instead.

<a id="error-editor-usage-data-path-already-set">

### `editor-usage-data-path-already-set`

The error thrown when trying to set the usage data path that was already set. Make sure that you are not setting the same path multiple times.

#### Parameters

* `path: string`

  The path that was already set.

<a id="error-editor-wrong-element">

### `editor-wrong-element`

This error is thrown when trying to pass a `<textarea>` element to a `create()` function of an editor class.

The only editor type which can be initialized on `<textarea>` elements is the [classic editor](../getting-started/setup/editor-types.md#classic-editor). This editor hides the passed element and inserts its own UI next to it. Other types of editors reuse the passed element as their root editable element and therefore `<textarea>` is not appropriate for them. Use a `<div>` or another text container instead:

```html
<div id="editor">
	<p>Initial content.</p>
</div>
```

<a id="error-editor-wrong-element">

### `editor-wrong-element`

The DOM tag name specified in [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element) cannot be used as an editor's editable root. The `<textarea>` and `<input>` elements are form fields and cannot contain other HTML elements, so the editor cannot render rich-text content inside them.

To fix the error, use a tag that can contain other elements - for example `'div'`, `'section'`, `'article'`, or a heading like `'h1'`. You can also omit the `name` field to use the default `'div'`.

<a id="error-editor-wrong-element-name">

### `editor-wrong-element-name`

The value supplied as the editable root tag name in [`config.root.element`](../api/module_core_editor_editorconfig-RootConfig.md#member-element) or `config.roots.<rootName>.element` is not a valid HTML tag name.

Valid HTML tag names start with a letter and contain only letters, digits, hyphens, or underscores (e.g. `'div'`, `'h1'`, `'my-element'`; uppercase variants such as `'DIV'` and `'H1'` are also accepted). Whitespace, angle brackets, slashes, empty strings, and non-string values are not allowed.

<a id="error-editorannotations-invalid-source-callback">

### `editorannotations-invalid-source-callback`

Function required.

<a id="error-email-configuration-missing-export-inline-styles-plugin">

### `email-configuration-missing-export-inline-styles-plugin`

Warning shown when the [`ExportInlineStyles`](../features/export-with-inline-styles.md) plugin is missing. While it is not required for the email integration to work, it is recommended to enable it to ensure that exported content has inlined styles. This is important as email clients do not work with external stylesheets, and most styling may be lost.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-missing-plain-table-output-plugin">

### `email-configuration-missing-plain-table-output-plugin`

The [`PlainTableOutput`](../api/module_table_plaintableoutput-PlainTableOutput.md) plugin is required to use tables in the email integration. Without it, tables will not be rendered correctly and may not be displayed correctly in some email clients as the `<figure>` elements is not supported by most email clients.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-missing-source-editing-plugin">

### `email-configuration-missing-source-editing-plugin`

The [`SourceEditing`](../features/source-editing/source-editing.md) or [`SourceEditingEnhanced`](../features/source-editing/source-editing-enhanced.md) plugin is missing in the email integration. While it is not required for the email integration to work, it is recommended to enable it to ensure that the source code view is available for users. This is important for email developers who need to work with the source code directly.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-missing-table-layout-plugin">

### `email-configuration-missing-table-layout-plugin`

The [`TableLayout`](../features/tables/layout-tables.md) plugin is required to use tables in the email integration. Tables in the editor may look and act than in email clients. This is why we have two separate plugins to handle different implementations of this feature.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-unsupported-color-format">

### `email-configuration-unsupported-color-format`

The color format specified in the editor configuration (such as for color pickers or other UI components) is not supported in email clients. Please [use `rgb` or `hex` format](../features/font.md#color-picker) instead.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-unsupported-color-value">

### `email-configuration-unsupported-color-value`

The specified color value uses a format not supported in email clients. This affects various color settings like fonts, backgrounds, borders, etc. Please [use `rgb()` or `#RRGGBB` format](../features/font.md#color-picker) instead.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-unsupported-list-item-marker-formatting">

### `email-configuration-unsupported-list-item-marker-formatting`

It is recommended to avoid using list item marker formatting as it will not work in email clients. It is possible to [disable this feature](../features/lists/lists-properties.md#disabling-marker-formatting) with the `enableListItemMarkerFormatting: false` switch in the list settings.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md) While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-unsupported-plugin">

### `email-configuration-unsupported-plugin`

The plugin is not supported in email editing mode as it may not work correctly in email clients. The HTML output the plugin creates may not be recognized by email clients, rendering the elements incorrectly or not at all. It is encouraged to remove the plugin from the editor configuration to maintain compatibility.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-email-configuration-unsupported-reversed-list">

### `email-configuration-unsupported-reversed-list`

It is recommended to avoid using reversed lists as they may not work correctly in some email clients. It is possible to [disable this feature with the `reversed: true`](../features/lists/lists.md#list-properties) switch in the list properties settings.

This warning is emitted by the [email configuration helper](../features/email-editing/email-configuration-helper.md). While it is possible to [disable these warnings](../features/email-editing/email-configuration-helper.md#logs-and-warnings) using the `email.warnings.suppress` option, it is strongly discouraged.

<a id="error-emoji-config-marker-already-used">

### `emoji-config-marker-already-used`

The `marker` in the `emoji` config is already used by other plugin configuration.

#### Parameters

* `marker: string`

  Used marker.

<a id="error-emoji-repository-cdn-use">

### `emoji-repository-cdn-use`

It was detected that your installation uses a commercial license key, and the default [CKEditor CDN for Emoji plugin data](../features/emoji.md#emoji-source).

To avoid this, you can use the [`emoji.definitionsUrl`](../api/module_emoji_emojiconfig-EmojiConfig.md#member-definitionsUrl) configuration option to provide a URL to your own emoji repository.

If you want to suppress this warning, while using the default CDN, set this configuration option to `cdn`.

<a id="error-emoji-repository-empty">

### `emoji-repository-empty`

Unable to identify the available emoji to display.

See the [troubleshooting](../features/emoji.md#troubleshooting) section in the [Emoji feature](../features/emoji.md) guide for more details.

<a id="error-emoji-repository-load-failed">

### `emoji-repository-load-failed`

Unable to load the emoji repository from the URL.

If the URL works properly and there is no disruption of communication, please check your [Content Security Policy (CSP)](../getting-started/setup/csp.md) setting and make sure the URL connection is allowed by the editor.

<a id="error-emoji-repository-redundant-version">

### `emoji-repository-redundant-version`

Both [`emoji.definitionsUrl`](../api/module_emoji_emojiconfig-EmojiConfig.md#member-definitionsUrl) and [`emoji.version`](../api/module_emoji_emojiconfig-EmojiConfig.md#member-version) configuration options are set. Only the `emoji.definitionsUrl` option will be used.

The `emoji.version` option will be ignored and should be removed from the configuration.

<a id="error-enableViewPlaceholder-deprecated-text-option">

### `enableViewPlaceholder-deprecated-text-option`

The "text" option in the [`enableViewPlaceholder()`](../api/module_engine_view_placeholder.md#function-enableViewPlaceholder) function is deprecated and will be removed soon.

See the `#view-element-placeholder` section in the `Update to v39.x` section in the [updating from older versions](../updating/guides/updating-from-older-versions.md) guide for more information on how to apply this change.

<a id="error-error-saving-suggestion-data-suggestion-discarded">

### `error-saving-suggestion-data-suggestion-discarded`

An unexpected error happened when the suggestion data was being saved in the database. In order to avoid mismatch between document data and the suggestions database, the suggestion in the document has been automatically discarded.

<a id="error-export-word-v1-api-is-deprecated">

### `export-word-v1-api-is-deprecated`

You are using v1 API interface in the `exportWord.converterOptions`. Please update your config with a new version of Export Word API. See migration guide: https\://docx-converter.cke-cs.com/v2/convert/docs#section/Export-to-Word/Migrating-from-v1

<a id="error-filerepository-no-upload-adapter">

### `filerepository-no-upload-adapter`

You need to enable an upload adapter in order to be able to upload files.

This warning shows up when [`FileRepository`](../api/module_upload_filerepository-FileRepository.md) is being used without [defining an upload adapter](../api/module_upload_filerepository-FileRepository.md#member-createUploadAdapter).

**If you see this warning when using one of the now deprecated CKEditor 5 builds** it means that you did not configure any of the upload adapters available by default in those builds.

Predefined builds are a deprecated solution and we strongly advise [migrating to new installation methods](../updating/nim-migration/migration-to-new-installation-methods.md).

See the [comprehensive "Image upload overview"](../features/images/image-upload/image-upload.md) to learn which upload adapters are available in the builds and how to configure them.

Otherwise, if you see this warning, there is a chance that you enabled a feature like [`ImageUpload`](../api/module_image_imageupload-ImageUpload.md), or [`ImageUploadUI`](../api/module_image_imageupload_imageuploadui-ImageUploadUI.md) but you did not enable any upload adapter. You can choose one of the existing upload adapters listed in the ["Image upload overview"](../features/images/image-upload/image-upload.md).

You can also implement your [own image upload adapter](../framework/deep-dive/upload-adapter.md).

<a id="error-filerepository-read-wrong-status">

### `filerepository-read-wrong-status`

You cannot call read if the status is different than idle.

<a id="error-filerepository-upload-wrong-status">

### `filerepository-upload-wrong-status`

You cannot call upload if the status is different than idle.

<a id="error-fileuploader-decoding-image-data-error">

### `fileuploader-decoding-image-data-error`

Problem with decoding Base64 image data.

<a id="error-fileuploader-missing-api-address">

### `fileuploader-missing-api-address`

Api address must be provided as the third argument.

<a id="error-fileuploader-missing-file">

### `fileuploader-missing-file`

File must be provided as the first argument.

<a id="error-fileuploader-missing-token">

### `fileuploader-missing-token`

Token must be provided as the second argument.

<a id="error-fileuploader-uploading-data-failed">

### `fileuploader-uploading-data-failed`

Uploading file failed.

<a id="error-focustracker-add-element-already-exist">

### `focustracker-add-element-already-exist`

This element is already tracked by [`FocusTracker`](../api/module_utils_focustracker-FocusTracker.md).

<a id="error-focustracker-add-view-missing-element">

### `focustracker-add-view-missing-element`

The [`View`](../api/module_ui_view-View.md) added to the [`FocusTracker`](../api/module_utils_focustracker-FocusTracker.md) does not have an [`element`](../api/module_ui_view-View.md#member-element). Make sure the view is [`render`](../api/module_ui_view-View.md#function-render) before adding it to the focus tracker.

<a id="error-font-size-invalid-definition">

### `font-size-invalid-definition`

Provided value as an option for [`FontSize`](../api/module_font_fontsize-FontSize.md) seems to invalid.

See valid examples described in the [plugin configuration](../api/module_font_fontconfig-FontSizeConfig.md#member-options).

<a id="error-font-size-invalid-use-of-named-presets">

### `font-size-invalid-use-of-named-presets`

If [`config.fontSize.supportAllValues`](../api/module_font_fontconfig-FontSizeConfig.md#member-supportAllValues) is `true`, you need to use numerical values as font size options.

See valid examples described in the [plugin configuration](../api/module_font_fontconfig-FontSizeConfig.md#member-options).

#### Parameters

* `presets: Array<string>`

  Invalid values.

<a id="error-footnotes-insertfootnotecommand-invalid-footnote-id">

### `footnotes-insertfootnotecommand-invalid-footnote-id`

Insert footnote command executed with invalid footnote id.

A valid footnote id is a non-empty string without spaces, that does not start with a digit.

<a id="error-format-painter-invalid-license-key">

### `format-painter-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-format-painter-trial-license-key-reached-limit-changes">

### `format-painter-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-get-root-attributes-missing-root">

### `get-root-attributes-missing-root`

The requested root does not exist. Please ensure that the provided root name is correct and that the root has been properly initialized in the document.

<a id="error-html-embed-provide-sanitize-function">

### `html-embed-provide-sanitize-function`

When using the HTML embed feature with the `config.htmlEmbed.showPreviews` set to `true`, it is strongly recommended to define a sanitize function that will clean up the input HTML in order to avoid XSS vulnerability.

For a detailed overview, check the [HTML embed feature](../features/html/html-embed.md) documentation.

<a id="error-image-block-plugin-required">

### `image-block-plugin-required`

The [`ImageBlock`](../api/module_image_imageblock-ImageBlock.md) plugin must be enabled to allow inserting block images. See [`type`](../api/module_image_imageconfig-ImageInsertConfig.md#member-type) to learn more.

<a id="error-image-inline-plugin-required">

### `image-inline-plugin-required`

The [`ImageInline`](../api/module_image_imageinline-ImageInline.md) plugin must be enabled to allow inserting inline images. See [`type`](../api/module_image_imageconfig-ImageInsertConfig.md#member-type) to learn more.

<a id="error-image-insert-integration-exists">

### `image-insert-integration-exists`

There are two insert-image integrations registered with the same name.

Make sure that you do not load multiple asset manager plugins.

<a id="error-image-insert-integrations-not-registered">

### `image-insert-integrations-not-registered`

The image insert feature requires integrations to be registered by separate features.

The `insertImage` toolbar button requires integrations to be registered by other features. For example [ImageUpload](../api/module_image_imageupload-ImageUpload.md), [ImageInsert](../api/module_image_imageinsert-ImageInsert.md), [ImageInsertViaUrl](../api/module_image_imageinsertviaurl-ImageInsertViaUrl.md), [CKBox](../api/module_ckbox_ckbox-CKBox.md)

<a id="error-image-insert-integrations-not-specified">

### `image-insert-integrations-not-specified`

The insert image feature requires a list of integrations to be provided in the editor configuration.

The default list of integrations is `upload`, `assetManager`, `url`. Those integrations are included in the insert image dropdown if the given feature plugin is loaded. You should omit the `integrations` configuration key to use the default set or provide a selected list of integrations that should be used.

<a id="error-image-insert-unknown-integration">

### `image-insert-unknown-integration`

The specified insert image integration name is unknown or the providing plugin is not loaded in the editor.

<a id="error-image-style-configuration-definition-invalid">

### `image-style-configuration-definition-invalid`

The image style definition provided in the configuration is invalid.

Please make sure the definition implements properly one of the following:

* [image style option definition](../api/module_image_imageconfig-ImageStyleOptionDefinition.md),
* [image style dropdown definition](../api/module_image_imageconfig-ImageStyleDropdownDefinition.md)

#### Parameters

* `info: object`

  The information about the invalid definition.

<a id="error-image-style-missing-dependency">

### `image-style-missing-dependency`

In order to work correctly, each image style [option](../api/module_image_imageconfig-ImageStyleOptionDefinition.md) requires specific model elements (also: types of images) to be supported by the editor.

Model element names to which the image style option can be applied are defined in the [`modelElements`](../api/module_image_imageconfig-ImageStyleOptionDefinition.md#member-modelElements) property of the style option definition.

Explore the warning in the console to find out precisely which option is not supported and which editor plugins are missing. Make sure these plugins are loaded in your editor to get this image style option working.

#### Parameters

* `style: string`

  The name of the unsupported option.

* `missingPlugins: Array<string>`

  The names of the plugins one of which has to be loaded for the particular option.

<a id="error-imageresizebuttons-missing-icon">

### `imageresizebuttons-missing-icon`

When configuring [`config.image.resizeOptions`](../api/module_image_imageconfig-ImageConfig.md#member-resizeOptions) for standalone buttons, a valid `icon` token must be set for each option.

See all valid options described in the [plugin configuration](../api/module_image_imageconfig-ImageResizeOption.md).

#### Parameters

* `option: ImageResizeOption`

  Invalid image resize option.

<a id="error-import-word-plugin-conversion-failed">

### `import-word-plugin-conversion-failed`

An error occurred while importing the Word file. Check the response from the Cloud Services in the browser's network tab in the developer tools to find out the reason.

<a id="error-import-word-plugin-import-cancelled">

### `import-word-plugin-import-cancelled`

The import procedure has been cancelled. The position, where the content of the Word file should be inserted, no longer exists, because the document structure has changed. Choose the position again and try to import the Word file again.

<a id="error-inlineannotations-attach-already-attached">

### `inlineannotations-attach-already-attached`

Cannot attach the same annotation twice.

<a id="error-inlineannotations-detach-not-attached">

### `inlineannotations-detach-not-attached`

Cannot detach a UI if it is not attached.

<a id="error-inlineannotations-not-allowed-with-context">

### `inlineannotations-not-allowed-with-context`

The `InlineAnnotations` plugin is not allowed as a `Context` plugin. It can be used as an editor plugin only.

<a id="error-insert-bookmark-command-executed-with-invalid-name">

### `insert-bookmark-command-executed-with-invalid-name`

Insert bookmark command can be executed only with a valid name.

A valid bookmark name must be a non-empty string and must not contain any spaces.

<a id="error-insert-operation-position-invalid">

### `insert-operation-position-invalid`

Insertion position is invalid.

<a id="error-insertcontent-invalid-insertion-position">

### `insertcontent-invalid-insertion-position`

An internal error occurred when merging inserted content with its siblings. The insertion position should equal the merge position.

If you encountered this error, report it back to the CKEditor 5 team with as many details as possible regarding the content being inserted and the insertion position.

<a id="error-insertcontent-wrong-position">

### `insertcontent-wrong-position`

Given node cannot be inserted on the given position.

#### Parameters

* `node: ModelNode`

  Node to insert.

* `position: ModelPosition`

  Position to insert the node at.

<a id="error-insertobject-element-not-an-object">

### `insertobject-element-not-an-object`

Tried to insert an element with [insertObject()](../api/module_engine_model_utils_insertobject.md) function that is not defined as an object in schema. See [`SchemaItemDefinition`](../api/module_engine_model_schema-ModelSchemaItemDefinition.md#member-isObject). If you want to insert content that is not an object you might want to use [insertContent()](../api/module_engine_model_utils_insertcontent.md) function.

<a id="error-insertobject-invalid-place-parameter-value">

### `insertobject-invalid-place-parameter-value`

The unsupported `options.setSelection` parameter was passed to the [insertObject()](../api/module_engine_model_utils_insertobject.md) function. Check the [insertObject()](../api/module_engine_model_utils_insertobject.md) API documentation for allowed `options.setSelection` parameter values.

<a id="error-invalid-date-time-format">

### `invalid-date-time-format`

Date format must be a function.

<a id="error-invalid-license-key">

### `invalid-license-key`

The license key provided is invalid. Please ensure that it is copied correctly from the [Customer Portal](http://portal.ckeditor.com). If the issue persists, please [contact our customer support](https://ckeditor.com/contact/).

<a id="error-keyboard-unknown-key">

### `keyboard-unknown-key`

Unknown key name. Only key names included in the [`keyCodes`](../api/module_utils_keyboard.md#constant-keyCodes) can be used.

#### Parameters

* `key: string`

  Ths specified key name.

<a id="error-license-key-development-limit">

### `license-key-development-limit`

You have exceeded the operation limit for your development license key within the editor. Please restart the editor to continue using it. [Read more about license key types](../getting-started/licensing/license-key-and-activation.md#license-key-types).

<a id="error-license-key-domain-limit">

### `license-key-domain-limit`

The provided license does not allow the editor to run on this domain. Some license keys are restricted to local test environments only. For more details, please refer to the [license key type documentation](../getting-started/licensing/license-key-and-activation.md#license-key-types).

<a id="error-license-key-evaluation-limit">

### `license-key-evaluation-limit`

You have exceeded the editor operation limit available for your evaluation license key. Please restart the editor to continue using it. [Read more about license key types](../getting-started/licensing/license-key-and-activation.md#license-key-types).

<a id="error-license-key-expired">

### `license-key-expired`

Your license key has expired.

If you used our free trial, you either need to switch to [open-source license](../getting-started/licensing/license-and-legal.md), or in case of a commercial plan, change the trial key to production key or development key. Switching from trial, you also need to align the editor configuration to the features available in your plan.

If you already had one of our Cloud or Custom plans, please renew your license in the [Customer Portal](https://portal.ckeditor.com).

<a id="error-license-key-feature-not-allowed">

### `license-key-feature-not-allowed`

The feature you are trying to use is not permitted under your current license. Please check the available features on the [Customer Portal](https://portal.ckeditor.com) or [contact support](https://ckeditor.com/contact/) for more information.

#### Parameters

* `featureName: String`

  The feature you tried to use.

<a id="error-license-key-invalid-distribution-channel">

### `license-key-invalid-distribution-channel`

Your license does not allow the current distribution channel.

These are the available distribution channels:

* Self-hosted - the editor is installed via npm or from a ZIP package
* Cloud - the editor is run from CDN

The licenses available include:

* GPL license for open-source users.
* Commercial plans (Cloud or sales-assisted).

The relation between distribution channels and licenses works as follows:

* With the 'GPL' license key, you may use the editor installed via npm or a ZIP package (self-hosted).
* With the CKEditor Cloud plans, you may use the editor via our CDN.
* With the CKEditor Custom plans, depending on your plan details, you can use the editor via npm or a ZIP package (self-hosted) or Cloud (CDN).

[Read more about distributions in the documentation](../getting-started/licensing/usage-based-billing.md#key-terms). Please verify your installation or [contact support](https://ckeditor.com/contact/) for assistance. Should you need to migrate your installation from npm to CDN, please refer to our [dedicated migration guides](../updating/migrations/vanilla-js.md).

<a id="error-license-key-lts-not-allowed">

### `license-key-lts-not-allowed`

You are running [CKEditor 5 Long-term Support Edition (LTS)](https://ckeditor.com/ckeditor-5-lts/), but the provided license key does not include access to the LTS version, or the key is invalid.

Please ensure that it is copied correctly from the [Customer Portal](http://portal.ckeditor.com/), and if the issue persists, please [contact our customer support](https://ckeditor.com/contact/).

In case you intended to use the [LTS Edition](https://ckeditor.com/ckeditor-5-lts/), but have not yet made a purchase, please [contact our sales team](https://ckeditor.com/contact-sales/)

If you did not intend to use LTS, please note that all releases in the v47.7 line are for LTS subscribers only. To use a non-LTS edition, either upgrade to v48 or newer, which is our standard [latest](../updating/guides/changelog.md) release line, or stay on a version 47.6.2 or earlier.

<a id="error-license-key-missing">

### `license-key-missing`

The `licenseKey` property is missing in the editor configuration.

* If you are using the editor in a commercial setup, please provide your license key.
* If you still need to acquire a key, please [contact us](https://ckeditor.com/contact/) or [create a free account with a 14 day premium features trial](https://portal.ckeditor.com/checkout?plan=free).
* If you are using the editor under a GPL license or another license from our Open Source Initiative, use the 'GPL' license key instead.

```js
ClassicEditor.create( {
	attachTo: document.querySelector( '#editor' ),
	licenseKey: '<YOUR_LICENSE_KEY>', // Or 'GPL'.
	// ... Other configuration options ...
} ) ;
```

<a id="error-license-key-plugin-not-allowed">

### `license-key-plugin-not-allowed`

The plugin you are trying to use is not permitted under your current license. Please check the available features on the [Customer Portal](https://portal.ckeditor.com) or [contact support](https://ckeditor.com/contact/) for more information.

#### Parameters

* `pluginName: String`

  The plugin you tried to load.

<a id="error-license-key-trial-limit">

### `license-key-trial-limit`

You have exceeded the editor operation limit for your trial license key. Please restart the editor to continue using it. [Read more about license key types](../getting-started/licensing/license-key-and-activation.md#license-key-types).

<a id="error-license-key-usage-limit">

### `license-key-usage-limit`

You have reached the usage limit of your license key. This can occur in the following situations:

* You are on a free subscription without a connected payment method and have exceeded the allowed usage threshold.
* Your account has overdue invoices and the grace period has ended.

To extend the limit and restore access, please update the required details in the [Customer Portal](https://portal.ckeditor.com) or [contact our customer support](https://ckeditor.com/contact).

<a id="error-license-key-validation-endpoint-not-reachable">

### `license-key-validation-endpoint-not-reachable`

Your license key cannot be validated due to a network issue. Please ensure that your setup does not block requests to the validation endpoint.

#### Parameters

* `url: string`

  The URL that was attempted to be reached for validation.

<a id="error-list-feature-conflict">

### `list-feature-conflict`

The `List` feature cannot be loaded together with the `LegacyList` plugin.

#### Parameters

* `conflictPlugin: string`

  Name of the plugin.

<a id="error-locale-deprecated-language-property">

### `locale-deprecated-language-property`

The `Locale#language` property was deprecated and will be removed in the near future. Please use the [`Locale#uiLanguage`](../api/module_utils_locale-Locale.md#member-uiLanguage) and [`Locale#contentLanguage`](../api/module_utils_locale-Locale.md#member-contentLanguage) properties instead.

<a id="error-mapping-model-offset-not-found">

### `mapping-model-offset-not-found`

A model position could not be mapped to the view because specified model offset was too big and could not be found inside the mapped view element or view document fragment.

<a id="error-mapping-model-position-view-parent-not-found">

### `mapping-model-position-view-parent-not-found`

A model position could not be mapped to the view because the parent of the model position does not have a mapped view element (might have not been converted yet or it has no converter).

Make sure that the model element is correctly converted to the view.

<a id="error-marker-destroyed">

### `marker-destroyed`

Cannot use a [destroyed marker](../api/module_engine_model_markercollection-MarkerCollection.md#function-destroy) instance.

<a id="error-markercollection-incorrect-marker-name">

### `markercollection-incorrect-marker-name`

Marker name cannot contain the "," character.

<a id="error-markercollection-refresh-marker-not-exists">

### `markercollection-refresh-marker-not-exists`

Marker with provided name does not exists.

<a id="error-matcher-pattern-deprecated-attributes-class-key">

### `matcher-pattern-deprecated-attributes-class-key`

The key-value matcher pattern for `attributes` option is using deprecated `class` key.

Use `classes` matcher pattern option instead:

```typescript
// Instead of:
const pattern = {
	attributes: {
		key1: 'value1',
		key2: 'value2',
		class: 'foobar'
	}
}

// Use:
const pattern = {
	attributes: {
		key1: 'value1',
		key2: 'value2'
	},
	classes: 'foobar'
}
```

Refer to the `#update-to-ckeditor-5-v2910` paragraph in the Update to v29.x guide in the [updating from older versions](../updating/guides/updating-from-older-versions.md) guide and the [`MatcherPattern`](../api/module_engine_view_matcher-MatcherPattern.md) documentation.

#### Parameters

* `pattern: any`

  Pattern with missing properties.

<a id="error-matcher-pattern-deprecated-attributes-style-key">

### `matcher-pattern-deprecated-attributes-style-key`

The key-value matcher pattern for `attributes` option is using deprecated `style` key.

Use `styles` matcher pattern option instead:

```typescript
// Instead of:
const pattern = {
	attributes: {
		key1: 'value1',
		key2: 'value2',
		style: /^border.*$/
	}
}

// Use:
const pattern = {
	attributes: {
		key1: 'value1',
		key2: 'value2'
	},
	styles: /^border.*$/
}
```

Refer to the `#update-to-ckeditor-5-v2910` section in the `Update to v29.x` section in the [updating from older versions](../updating/guides/updating-from-older-versions.md) guide and [`MatcherPattern`](../api/module_engine_view_matcher-MatcherPattern.md) documentation.

#### Parameters

* `pattern: any`

  Pattern with missing properties.

<a id="error-matcher-pattern-missing-key-or-value">

### `matcher-pattern-missing-key-or-value`

The key-value matcher pattern is missing key or value. Both must be present. Refer the documentation: [`MatcherPattern`](../api/module_engine_view_matcher-MatcherPattern.md).

#### Parameters

* `pattern: any`

  Pattern with missing properties.

<a id="error-media-embed-no-provider-name">

### `media-embed-no-provider-name`

One of the providers (or extra providers) specified in the media embed configuration has no name and will not be used by the editor. In order to get this media provider working, double check your editor configuration.

<a id="error-media-style-configuration-definition-invalid">

### `media-style-configuration-definition-invalid`

The media style configuration provided in the editor config is invalid. The warning is emitted in two situations:

* An entry in [`config.mediaEmbed.styles.options`](../api/module_media-embed_mediaembedconfig-MediaEmbedConfig.md#member-styles) does not reference a built-in style by name (`'alignLeft'`, `'alignBlockLeft'`, `'alignCenter'`, `'alignBlockRight'`, `'alignRight'`) and does not follow the [`MediaStyleOptionDefinition`](../api/module_media-embed_mediaembedconfig-MediaStyleOptionDefinition.md) shape — `name`, `title`, `icon`, and (unless `isDefault: true`) `className` are required. The offending entry is reported under the `style` parameter.
* A dropdown entry placed inline in [`config.mediaEmbed.toolbar`](../api/module_media-embed_mediaembedconfig-MediaEmbedConfig.md#member-toolbar) does not follow the [`MediaStyleDropdownDefinition`](../api/module_media-embed_mediaembedconfig-MediaStyleDropdownDefinition.md) shape (`name` and every `items[]` entry must use the full `mediaEmbed:` prefix, `defaultItem` must be one of the `items`, `title` must be a non-empty string), or its `items[]` reference styles that are not in the resolved [`config.mediaEmbed.styles`](../api/module_media-embed_mediaembedconfig-MediaEmbedConfig.md#member-styles) list. The offending entry is reported under the `dropdown` parameter.

<a id="error-mediaembedresizebuttons-missing-icon">

### `mediaembedresizebuttons-missing-icon`

When configuring [`resizeOptions`](../api/module_media-embed_mediaembedconfig-MediaEmbedConfig.md#member-resizeOptions) \* `config.mediaEmbed.resizeOptions`} for standalone buttons, a valid `icon` token must be set for each option.

See all valid options described in the [plugin configuration](../api/module_media-embed_mediaembedconfig-MediaEmbedResizeOption.md).

#### Parameters

* `option: MediaEmbedResizeOption`

  Invalid media embed resize option.

<a id="error-mention-feed-callback-error">

### `mention-feed-callback-error`

The callback used for obtaining mention autocomplete feed thrown and error and the mention UI was hidden or not displayed at all.

<a id="error-mentioncommand-incorrect-id">

### `mentioncommand-incorrect-id`

The feed item ID must start with the marker character(s).

Correct mention feed setting:

```typescript
mentions: [
	{
		marker: '@',
		feed: [ '@Ann', '@Barney', ... ]
	}
]
```

Incorrect mention feed setting:

```typescript
mentions: [
	{
		marker: '@',
		feed: [ 'Ann', 'Barney', ... ]
	}
]
```

See [`MentionConfig`](../api/module_mention_mentionconfig-MentionConfig.md).

<a id="error-mentionconfig-incorrect-marker">

### `mentionconfig-incorrect-marker`

The marker must be a single character.

Correct markers: `'@'`, `'#'`.

Incorrect markers: `'$$'`, `'[@'`.

See [`MentionConfig`](../api/module_mention_mentionconfig-MentionConfig.md).

#### Parameters

* `marker: string`

  Configured marker

<a id="error-menu-bar-component-unsupported">

### `menu-bar-component-unsupported`

Adding unsupported components to the [`MenuBarView`](../api/module_ui_menubar_menubarview-MenuBarView.md) is not possible.

A component should be either a [`MenuBarMenuView`](../api/module_ui_menubar_menubarmenuview-MenuBarMenuView.md) (sub-menu) or a [`MenuBarMenuListItemButtonView`](../api/module_ui_menubar_menubarmenulistitembuttonview-MenuBarMenuListItemButtonView.md) (button).

#### Parameters

* `componentName: string`

  A name of the unsupported component used in the configuration.

* `componentView: View`

  An unsupported component view.

<a id="error-menu-bar-item-could-not-be-removed">

### `menu-bar-item-could-not-be-removed`

There was a problem processing the configuration of the menu bar. The item with the given name does could not be removed from the menu bar configuration.

This warning usually shows up when the [`Plugin`](../api/module_core_plugin-Plugin.md) which is supposed to provide a menu bar item has not been loaded or there is a typo in the [menu bar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-menuBar).

#### Parameters

* `menuBarConfig: any`

  The full configuration of the menu bar.

* `itemName: any`

  The name of the item that was not removed from the menu bar.

<a id="error-menu-bar-item-could-not-be-removed">

### `menu-bar-item-could-not-be-removed`

There was a problem processing the configuration of the menu bar. The configured item could not be added because the position it was supposed to be added to does not exist.

This warning usually shows up when the [`Plugin`](../api/module_core_plugin-Plugin.md) which is supposed to provide a menu bar item has not been loaded or there is a typo in the [menu bar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-menuBar).

#### Parameters

* `menuBarConfig: object`

  The full configuration of the menu bar.

* `addedItemConfig: object`

  The name of the item that was not removed from the menu bar.

<a id="error-menu-bar-item-unavailable">

### `menu-bar-item-unavailable`

There was a problem processing the configuration of the menu bar. The item with the given name does not exist so it was omitted when rendering the menu bar.

This warning usually shows up when the [`Plugin`](../api/module_core_plugin-Plugin.md) which is supposed to provide a menu bar item has not been loaded or there is a typo in the [menu bar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-menuBar).

Make sure the plugin responsible for this menu bar item is loaded and the menu bar configuration is correct, e.g. [`BoldUI`](../api/module_basic-styles_bold_boldui-BoldUI.md) is loaded for the `'menuBar:bold'` menu bar item.

#### Parameters

* `menuBarConfig: object`

  The full configuration of the menu bar.

* `parentMenuConfig: object`

  The config of the menu the unavailable component was defined in.

* `componentName: string`

  The name of the unavailable component.

<a id="error-menu-bar-menu-empty">

### `menu-bar-menu-empty`

There was a problem processing the configuration of the menu bar. One of the menus is empty so it was omitted when rendering the menu bar.

This warning usually shows up when some [plugins](../api/module_core_plugin-Plugin.md) responsible for providing menu bar items have not been loaded and the [menu bar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-menuBar) was not updated.

Make sure all necessary editor plugins are loaded and/or update the menu bar configuration to account for the missing menu items.

#### Parameters

* `menuBarConfig: object`

  The full configuration of the menu bar.

* `emptyMenuConfig: object`

  The definition of the menu that has no child items.

<a id="error-merge-fields-data-set-not-found">

### `merge-fields-data-set-not-found`

The requested data set was not found.

<a id="error-merge-fields-duplicate-data-set-id">

### `merge-fields-duplicate-data-set-id`

Data set ids must be unique.

<a id="error-merge-fields-duplicate-group-id">

### `merge-fields-duplicate-group-id`

Merge field group ids must be unique.

<a id="error-merge-fields-duplicate-merge-field-id">

### `merge-fields-duplicate-merge-field-id`

Merge field ids must be unique.

<a id="error-merge-fields-invalid-id">

### `merge-fields-invalid-id`

Merge field ids can contain only alphanumeric characters, dots, underscores, and hyphens.

<a id="error-merge-fields-invalid-prefix-or-suffix">

### `merge-fields-invalid-prefix-or-suffix`

The merge field prefix and suffix can only contain the following characters: ``'"`!#%:;=@{}~$()*+/?[\]^|``.

<a id="error-merge-fields-invalid-preview-mode-set">

### `merge-fields-invalid-preview-mode-set`

The preview mode that was tried to be set was not available. See the [preview modes configuration](../api/module_merge-fields_mergefieldsconfig-MergeFieldsConfig.md#member-previewModes) for more information.

<a id="error-merge-fields-invalid-preview-modes-configuration">

### `merge-fields-invalid-preview-modes-configuration`

Invalid preview modes definition. It should be a non-empty array, with one or more of the following values: '$labels', '$defaultValues' and '$dataSets'.

<a id="error-merge-fields-prefix-and-suffix-must-differ">

### `merge-fields-prefix-and-suffix-must-differ`

Merge field prefix and suffix must be different.

<a id="error-merge-fields-prefix-or-suffix-too-long">

### `merge-fields-prefix-or-suffix-too-long`

The merge field prefix and suffix cannot be longer than 8 characters.

<a id="error-merge-fields-provide-sanitize-function">

### `merge-fields-provide-sanitize-function`

When using the merge fields feature with the `config.mergeFields.previewHtmlValues` set to `true`, it is strongly recommended to define a sanitize function that will clean up the input HTML in order to avoid XSS vulnerability.

For a detailed overview, check the [Merge fields feature](../features/merge-fields.md#using-html-tags-in-merge-fields-values) documentation.

<a id="error-merge-operation-how-many-invalid">

### `merge-operation-how-many-invalid`

Merge operation specifies wrong number of nodes to move.

<a id="error-merge-operation-source-position-invalid">

### `merge-operation-source-position-invalid`

Merge source position is invalid. The element to be merged must have a parent node.

<a id="error-merge-operation-target-position-invalid">

### `merge-operation-target-position-invalid`

Merge target position is invalid. The element to be merged must have a parent node.

<a id="error-model-createpositionat-offset-required">

### `model-createpositionat-offset-required`

[`Model#createPositionAt()`](../api/module_engine_model_model-Model.md#function-createPositionAt) requires the offset to be specified when the first parameter is a model item.

<a id="error-model-document-createroot-name-exists">

### `model-document-createroot-name-exists`

A root with the specified name already exists.

<a id="error-model-document-history-addoperation-incorrect-version">

### `model-document-history-addoperation-incorrect-version`

Only operations with matching versions can be added to the history.

#### Parameters

* `operation: Operation`

  The current operation.

* `historyVersion: number`

  The current document history version.

<a id="error-model-liveposition-no-model-reference">

### `model-liveposition-no-model-reference`

LivePosition's root has to be an instance of ModelRootElement or have a reference to a model instance.

<a id="error-model-liverange-no-model-reference">

### `model-liverange-no-model-reference`

LiveRange's root has to be an instance of ModelRootElement or have a reference to a model instance.

<a id="error-model-nodelist-index-out-of-bounds">

### `model-nodelist-index-out-of-bounds`

Given index cannot be found in the node list.

<a id="error-model-nodelist-insertnodes-not-node">

### `model-nodelist-insertnodes-not-node`

Trying to insert an object which is not a Node instance.

<a id="error-model-nodelist-offset-out-of-bounds">

### `model-nodelist-offset-out-of-bounds`

Given offset cannot be found in the node list.

#### Parameters

* `offset: number`

  The offset value.

* `nodeList: ModelNodeList`

  Stringified node list.

<a id="error-model-position-after-root">

### `model-position-after-root`

You cannot make a position after a root element.

#### Parameters

* `root: ModelRootElement`

  The root element..

<a id="error-model-position-before-root">

### `model-position-before-root`

You cannot make a position before a root element.

#### Parameters

* `root: ModelRootElement`

  The root element..

<a id="error-model-position-fromjson-no-root">

### `model-position-fromjson-no-root`

Cannot create position for document. Root with specified name does not exist.

#### Parameters

* `rootName: string`

  The root name.

<a id="error-model-position-parent-incorrect">

### `model-position-parent-incorrect`

Position parent have to be a model element or model document fragment.

<a id="error-model-position-path-incorrect">

### `model-position-path-incorrect`

The position's path is incorrect. This means that a position does not point to a correct place in the tree and hence, some of its methods and getters cannot work correctly.

**Note**: Unlike DOM and view positions, in the model, the [position's parent](../api/module_engine_model_position-ModelPosition.md#member-parent) is always an element or a document fragment. The last offset in the [position's path](../api/module_engine_model_position-ModelPosition.md#member-path) is the point in this element where this position points.

Read more about model positions and offsets in the [Editing engine architecture](../framework/architecture/editing-engine.md#indexes-and-offsets) guide.

#### Parameters

* `position: ModelPosition`

  The incorrect position.

<a id="error-model-position-path-incorrect-format">

### `model-position-path-incorrect-format`

Position path must be an array with at least one item.

#### Parameters

* `path: Array<number>`

  A path to the position.

<a id="error-model-position-root-invalid">

### `model-position-root-invalid`

Position root is invalid.

Positions can only be anchored in elements or document fragments.

<a id="error-model-selection-range-intersects">

### `model-selection-range-intersects`

Trying to add a range that intersects with another range in the selection.

#### Parameters

* `addedRange: ModelRange`

  Range that was added to the selection.

* `intersectingRange: ModelRange`

  Range in the selection that intersects with `addedRange`.

<a id="error-model-selection-set-ranges-not-range">

### `model-selection-set-ranges-not-range`

Selection range set to an object that is not an instance of [`ModelRange`](../api/module_engine_model_range-ModelRange.md).

Only [`ModelRange`](../api/module_engine_model_range-ModelRange.md) instances can be used to set a selection. Common mistakes leading to this error are:

* using DOM `Range` object,
* incorrect CKEditor 5 installation with multiple `ckeditor5-engine` packages having different versions.

<a id="error-model-selection-setfocus-no-ranges">

### `model-selection-setfocus-no-ranges`

Cannot set selection focus if there are no ranges in selection.

<a id="error-model-selection-setto-not-selectable">

### `model-selection-setto-not-selectable`

Cannot set the selection to the given place.

Invalid parameters were specified when setting the selection. Common issues:

* A [`ModelTextProxy`](../api/module_engine_model_textproxy-ModelTextProxy.md) instance was passed instead of a real [`ModelText`](../api/module_engine_model_text-ModelText.md).
* View nodes were passed instead of model nodes.
* `null`/`undefined` was passed.

<a id="error-model-selection-setto-required-second-parameter">

### `model-selection-setto-required-second-parameter`

selection.setTo requires the second parameter when the first parameter is a node.

<a id="error-model-textproxy-wrong-length">

### `model-textproxy-wrong-length`

Given `length` value is incorrect.

<a id="error-model-textproxy-wrong-offsetintext">

### `model-textproxy-wrong-offsetintext`

Given `offsetInText` value is incorrect.

<a id="error-model-tree-walker-no-start-position">

### `model-tree-walker-no-start-position`

Neither boundaries nor starting position of a `TreeWalker` have been defined.

<a id="error-model-tree-walker-unknown-direction">

### `model-tree-walker-unknown-direction`

Only `backward` and `forward` direction allowed.

<a id="error-model-writer-insert-forbidden-move">

### `model-writer-insert-forbidden-move`

Cannot move a node from a document to a different tree. It is forbidden to move a node that was already in a document outside of it.

<a id="error-move-operation-node-into-itself">

### `move-operation-node-into-itself`

Trying to move a range of nodes into one of nodes from that range.

<a id="error-move-operation-nodes-do-not-exist">

### `move-operation-nodes-do-not-exist`

The nodes which should be moved do not exist.

<a id="error-move-operation-range-into-itself">

### `move-operation-range-into-itself`

Trying to move a range of nodes into the middle of that range.

<a id="error-multi-level-list-invalid-license-key">

### `multi-level-list-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-multi-level-list-trial-license-key-reached-limit-changes">

### `multi-level-list-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-multi-root-editor-add-root-element-is-not-limit">

### `multi-root-editor-add-root-element-is-not-limit`

The model root element must be a [limit element](../api/module_engine_model_schema-ModelSchemaItemDefinition.md#member-isLimit). The element name specified in [`addRoot()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#function-addRoot:ROOT_CONFIG) options must be registered in the schema with `isLimit` set to `true`.

#### Parameters

* `rootName: any`

  The name of the root that uses a non-limit element.

* `elementName: any`

  The name of the model element used for the root.

<a id="error-multi-root-editor-add-root-element-option-ignored">

### `multi-root-editor-add-root-element-option-ignored`

Passing an existing DOM element as the `element` option of [`addRoot()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#function-addRoot:ROOT_CONFIG) is not supported and will be ignored. The `addRoot()` method only registers the model root; the DOM editable is created later by [`createEditable()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#function-createEditable:OPTIONS).

Pass a tag name string (e.g. `'h1'`) or a [view element definition](../api/module_engine_view_elementdefinition-ViewElementDefinition.md) instead, or omit the option to create a default `<div>`.

<a id="error-multi-root-editor-cannot-disable-graveyard-root">

### `multi-root-editor-cannot-disable-graveyard-root`

You cannot disable the `$graveyard` root.

<a id="error-multi-root-editor-load-root-already-loaded">

### `multi-root-editor-load-root-already-loaded`

The root to load was already loaded before. The `loadRoot()` call has no effect.

<a id="error-multi-root-editor-load-root-no-root">

### `multi-root-editor-load-root-no-root`

The root to load does not exist.

<a id="error-multi-root-editor-root-attributes-conflict">

### `multi-root-editor-root-attributes-conflict`

Trying to set attributes using deprecated `config.rootsAttributes` on a root that has already defined attributes using `config.roots.<rootName>.modelAttributes`.

<a id="error-multi-root-editor-root-attributes-no-root">

### `multi-root-editor-root-attributes-no-root`

Trying to set attributes on a non-existing root.

Roots specified in legacy `config.rootsAttributes` do not match initial editor roots. Use `config.roots.<rootName>.modelAttributes` instead.

<a id="error-multi-root-editor-root-attributes-no-root">

### `multi-root-editor-root-attributes-no-root`

Trying to set attributes on a non-existing root.

Roots specified in `config.rootsAttributes` do not match initial editor roots.

<a id="error-multi-root-editor-root-deprecated-config-lazy-roots">

### `multi-root-editor-root-deprecated-config-lazy-roots`

Using deprecated `config.lazyRoots` configuration option. Use `config.roots.<rootName>.lazyLoad` instead.

<a id="error-multi-root-editor-root-initial-data-mismatch">

### `multi-root-editor-root-initial-data-mismatch`

Editor roots do not match the [`initialData` configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-initialData).

This may happen for one of the two reasons:

* Configuration error. The `sourceElementsOrData` parameter in [`MultiRootEditor.create()`](../api/module_editor-multi-root_multirooteditor-MultiRootEditor.md#static-function-create) contains different roots than [`initialData` configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-initialData).
* As the editor was initialized, the [`initialData`](../api/module_core_editor_editorconfig-EditorConfig.md#member-initialData) configuration value or the state of the editor roots has been changed.

<a id="error-narrowsidebar-attach-already-attached">

### `narrowsidebar-attach-already-attached`

Cannot attach narrow sidebar twice.

<a id="error-narrowsidebar-detach-not-attached">

### `narrowsidebar-detach-not-attached`

Cannot detach not attached sidebar.

<a id="error-no-operations-provided">

### `no-operations-provided`

The compressor cannot compress operations because no operation was provided.

<a id="error-observable-bind-duplicate-properties">

### `observable-bind-duplicate-properties`

Properties must be unique.

<a id="error-observable-bind-rebind">

### `observable-bind-rebind`

Cannot bind the same property more than once.

<a id="error-observable-bind-to-extra-callback">

### `observable-bind-to-extra-callback`

Cannot bind multiple properties and use a callback in one binding.

<a id="error-observable-bind-to-many-not-one-binding">

### `observable-bind-to-many-not-one-binding`

Binding one attribute to many observables only possible with one attribute.

<a id="error-observable-bind-to-no-callback">

### `observable-bind-to-no-callback`

Binding multiple observables only possible with callback.

<a id="error-observable-bind-to-parse-error">

### `observable-bind-to-parse-error`

Invalid argument syntax in `to()`.

<a id="error-observable-bind-to-properties-length">

### `observable-bind-to-properties-length`

The number of properties must match.

<a id="error-observable-bind-wrong-properties">

### `observable-bind-wrong-properties`

All properties must be strings.

<a id="error-observable-set-cannot-override">

### `observable-set-cannot-override`

Cannot override an existing property.

This error is thrown when trying to [set](../api/module_utils_observablemixin-Observable.md#function-set:KEY_VALUE) a property with a name of an already existing property. For example:

```typescript
let observable = new Model();
observable.property = 1;
observable.set( 'property', 2 );			// throws

observable.set( 'property', 1 );
observable.set( 'property', 2 );			// ok, because this is an existing property.
```

<a id="error-observable-unbind-wrong-properties">

### `observable-unbind-wrong-properties`

Properties must be strings.

<a id="error-observablemixin-cannot-decorate-undefined">

### `observablemixin-cannot-decorate-undefined`

Cannot decorate an undefined method.

#### Parameters

* `object: object`

  The object which method should be decorated.

* `methodName: string`

  Name of the method which does not exist.

<a id="error-operation-utils-move-range-not-flat">

### `operation-utils-move-range-not-flat`

Trying to move a range which starts and ends in different element.

<a id="error-operation-utils-remove-range-not-flat">

### `operation-utils-remove-range-not-flat`

Trying to remove a range which starts and ends in different element.

<a id="error-pagination-config-not-found">

### `pagination-config-not-found`

The configuration required by the pagination plugin is missing. Follow the instructions provided in [Pagination feature documentation](../features/pagination/pagination.md#configuration) to initialize the plugin properly.

#### Parameters

* `config: EditorConfig`

  Configuration of the editor.

<a id="error-pagination-invalid-license-key">

### `pagination-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-pagination-trial-license-key-reached-limit-changes">

### `pagination-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-paste-from-office-enhanced-invalid-license-key">

### `paste-from-office-enhanced-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-paste-from-office-enhanced-trial-license-key-reached-limit-changes">

### `paste-from-office-enhanced-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-pendingactions-add-invalid-message">

### `pendingactions-add-invalid-message`

The message must be a string.

<a id="error-permissions-set-permissions-invalid-channel-id">

### `permissions-set-permissions-invalid-channel-id`

Trying to set permissions for a `channelId` that does not exist.

<a id="error-plugin-load
*">

### `plugin-load *`

The CKEditor error class.

You should throw `CKEditorError` when:

* An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be reported to the callbacks registered with [`onEditorError()`](../api/module_core_errorreporter.md#function-onEditorError),
* If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use [`logWarning()`](../api/module_utils_ckeditorerror.md#function-logWarning) and [`logError()`](../api/module_utils_ckeditorerror.md#function-logError) to improve developers experience and let them see the a working editor as soon as possible.

```typescript
/**
 * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc.
 *
 *
```

#### Parameters

* `pluginName: any`

  The name of the plugin that could not be loaded. \*

* `moduleName: any`

  The name of the module which tried to load this plugin. \*/ throw new CKEditorError( 'plugin-load', { pluginName: 'foo', moduleName: 'bar' } );

<a id="error-plugin-obsolete-documentlist">

### `plugin-obsolete-documentlist`

The `DocumentList` plugin is obsolete. Use `List` instead.

<a id="error-plugin-obsolete-documentlistproperties">

### `plugin-obsolete-documentlistproperties`

The `DocumentListProperties` plugin is obsolete. Use `ListProperties` instead.

<a id="error-plugin-obsolete-tododocumentlist">

### `plugin-obsolete-tododocumentlist`

The `TodoDocumentList` plugin is obsolete. Use `TodoList` instead.

<a id="error-plugincollection-context-required">

### `plugincollection-context-required`

If a plugin is a context plugin, all plugins it requires should also be context plugins instead of plugins. In other words, if one plugin can be used in the context, all its requirements should also be ready to be used in the context. Note that the context provides only a part of the API provided by the editor. If one plugin needs a full editor API, all plugins which require it are considered as plugins that need a full editor API.

#### Parameters

* `plugin: string`

  The name of the required plugin.

* `requiredBy: string`

  The name of the parent plugin.

<a id="error-plugincollection-plugin-for-replacing-cannot-have-dependencies">

### `plugincollection-plugin-for-replacing-cannot-have-dependencies`

The plugin replacing an existing plugin cannot depend on other plugins.

#### Parameters

* `pluginName: string`

  The name of the plugin.

<a id="error-plugincollection-plugin-for-replacing-not-exist">

### `plugincollection-plugin-for-replacing-not-exist`

The replaced plugin does not exist in the [available plugins](../api/module_core_plugincollection-PluginCollection.md) collection.

#### Parameters

* `pluginName: string`

  The name of the plugin.

<a id="error-plugincollection-plugin-for-replacing-not-loaded">

### `plugincollection-plugin-for-replacing-not-loaded`

The replaced plugin will not be loaded so it cannot be replaced.

#### Parameters

* `pluginName: string`

  The name of the plugin.

<a id="error-plugincollection-plugin-invalid-constructor">

### `plugincollection-plugin-invalid-constructor`

The provided class constructor is not a plugin.

This error is usually caused by passing an editor, context, or command constructor in the `config.plugins` array.

#### Parameters

* `name: String`

  The name of the provided constructor.

<a id="error-plugincollection-plugin-name-conflict">

### `plugincollection-plugin-name-conflict`

Two plugins with the same [`pluginName`](../api/module_core_plugin-PluginStaticMembers.md#member-pluginName) were loaded. This will lead to runtime conflicts between these plugins.

In practice, this warning usually means that new plugins were added to an existing CKEditor 5 build. Plugins should always be added to a source version of the editor (`@ckeditor/ckeditor5-editor-*`), not to an editor imported from one of the `@ckeditor/ckeditor5-build-*` packages.

Check your import paths and the list of plugins passed to [`Editor.create()`](../api/module_core_editor_editor-Editor.md#static-function-create) or specified in [`Editor.builtinPlugins`](../api/module_core_editor_editor-Editor.md#static-member-builtinPlugins).

Predefined builds are a deprecated solution and we strongly advise [migrating to new installation methods](../updating/nim-migration/migration-to-new-installation-methods.md).

The second option is that your `node_modules/` directory contains duplicated versions of the same CKEditor 5 packages. Normally, on clean installations, npm deduplicates packages in `node_modules/`, so it may be enough to call `rm -rf node_modules && npm i`. However, if you installed conflicting versions of some packages, their dependencies may need to be installed in more than one version which may lead to this warning.

Technically speaking, this error occurs because after adding a plugin to an existing editor build the dependencies of this plugin are being duplicated. They are already built into that editor build and now get added for the second time as dependencies of the plugin you are installing.

#### Parameters

* `pluginName: string`

  The duplicated plugin name.

* `plugin1: PluginConstructor`

  The first plugin constructor.

* `plugin2: PluginConstructor`

  The second plugin constructor.

<a id="error-plugincollection-plugin-not-found">

### `plugincollection-plugin-not-found`

A plugin is not available and could not be loaded.

Plugin classes (constructors) need to be provided to the editor before they can be loaded by name. This is usually done in the now deprecated CKEditor 5 builds by setting the [`builtinPlugins`](../api/module_core_editor_editor-Editor.md#static-member-builtinPlugins) property.

**If you see this warning when using one of the deprecated CKEditor 5 Builds**, it means that you tried to enable a plugin that was not included in that build. This may be due to a typo in the plugin name or simply because that plugin was not a part of this build.

**Predefined builds are no longer supported and you need to [migrate to new installation methods](../updating/nim-migration/migration-to-new-installation-methods.md)**.

**If you see this warning when using one of the editor creators directly** (not a build), then it means that you tried loading plugins by name. However, unlike CKEditor 4, CKEditor 5 does not implement a "plugin loader". This means that CKEditor 5 does not know where to load the plugin modules from. Therefore, you need to provide each plugin through a reference (as a constructor function). Check out the examples in the [Quick start](../getting-started/installation/cloud/quick-start.md) guide.

#### Parameters

* `plugin: string`

  The name of the plugin which could not be loaded.

<a id="error-plugincollection-plugin-not-loaded">

### `plugincollection-plugin-not-loaded`

The plugin is not loaded and could not be obtained.

Plugin classes (constructors) need to be provided to the editor and must be loaded before they can be obtained from the plugin collection.

**Note**: You can use `editor.plugins.has()` to check if a plugin was loaded.

#### Parameters

* `plugin: string`

  The name of the plugin which is not loaded.

<a id="error-plugincollection-replace-plugin-invalid-type">

### `plugincollection-replace-plugin-invalid-type`

The plugin replacing an existing plugin must be a function.

#### Parameters

* `pluginItem: never`

  The plugin item.

<a id="error-plugincollection-replace-plugin-missing-name">

### `plugincollection-replace-plugin-missing-name`

The plugin replacing an existing plugin must have a name.

#### Parameters

* `pluginItem: PluginConstructor`

  The plugin item.

<a id="error-plugincollection-replaced-plugin-cannot-have-dependencies">

### `plugincollection-replaced-plugin-cannot-have-dependencies`

The replaced plugin cannot depend on other plugins.

#### Parameters

* `pluginName: string`

  The name of the plugin.

<a id="error-plugincollection-required">

### `plugincollection-required`

Cannot load a plugin because one of its dependencies is listed in the `removePlugins` option.

#### Parameters

* `plugin: string`

  The name of the required plugin.

* `requiredBy: string`

  The name of the parent plugin.

<a id="error-plugincollection-soft-required">

### `plugincollection-soft-required`

A required "soft" dependency was not found on the plugin list.

When configuring the editor, either prior to building (via [`Editor.builtinPlugins`](../api/module_core_editor_editor-Editor.md#static-member-builtinPlugins)) or when creating a new instance of the editor (e.g. via [`config.plugins`](../api/module_core_editor_editorconfig-EditorConfig.md#member-plugins)), you need to provide some of the dependencies for other plugins that you used.

This error is thrown when one of these dependencies was not provided. The name of the missing plugin can be found in `missingPlugin` and the plugin that required it in `requiredBy`.

In order to resolve it, you need to import the missing plugin and add it to the current list of plugins (`Editor.builtinPlugins` or `config.plugins`/`config.extraPlugins`).

Soft requirements were introduced in version 26.0.0. If you happen to stumble upon this error when upgrading to version 26.0.0, read also the `Update to v26.x` section in the [updating from older versions](../updating/guides/updating-from-older-versions.md) guide.

#### Parameters

* `missingPlugin: string`

  The name of the required plugin.

* `requiredBy: string`

  The name of the plugin that requires the other plugin.

<a id="error-presencelist-collapseat-invalid-format">

### `presencelist-collapseat-invalid-format`

The [`config.presenceList.collapseAt`](../api/module_real-time-collaboration_config-RtcPresenceListConfig.md#member-collapseAt) configuration value must be a number greater than 0.

<a id="error-presencelist-missing-container">

### `presencelist-missing-container`

Missing container element for the presence list. Please make sure [`config.presenceList.container`](../api/module_real-time-collaboration_config-RtcPresenceListConfig.md#member-container) is set and refers to an existing DOM element.

<a id="error-protobuffactory-cannot-get-descriptor-before-build">

### `protobuffactory-cannot-get-descriptor-before-build`

Cannot get a descriptor before building `ProtobufFactory`.

<a id="error-range-create-from-ranges-empty-array">

### `range-create-from-ranges-empty-array`

At least one range has to be passed to [`Range._createFromRanges()`](../api/module_engine_model_range-ModelRange.md#static-function-_createFromRanges).

<a id="error-realtimecollaborationclient-editor-setdata-and-editor-data-set-are-forbidden-in-real-time-collaboration">

### `realtimecollaborationclient-editor-setdata-and-editor-data-set-are-forbidden-in-real-time-collaboration`

Trying to use `editor.setData()` or `editor.data.set()` in real-time collaboration. Re-setting data in real-time collaboration usually means a mistake (incorrect integration or plugin). Using it may overwrite local (not yet synchronized) changes on remote clients. If you tried to set editor initial data, use `initialData` configuration option instead. If you tried to set editor data in a plugin, consider applying the changes through the `Writer` in a `model.change()` block. If you understand effects of using `editor.data.set()` in real-time collaboration and want to suppress this error, set `suppressErrorInCollaboration` flag to `true` in the second parameter of `editor.data.set()` call: `editor.data.set( '<p>Your data</p>', { suppressErrorInCollaboration: true } )`.

<a id="error-realtimecollaborationclient-handleserverresponse">

### `realtimecollaborationclient-handleserverresponse`

Server response error.

<a id="error-realtimecollaborationclient-init-document-already-initialized">

### `realtimecollaborationclient-init-document-already-initialized`

Trying to set initial data to initialized document.

<a id="error-realtimecollaborationclient-init-non-existent-root">

### `realtimecollaborationclient-init-non-existent-root`

Attempting to init data on a non-existing root.

<a id="error-realtimecollaborationclient-init-service-internal-error">

### `realtimecollaborationclient-init-service-internal-error`

Internal `CollaborativeEditingService` error.

<a id="error-realtimecollaborationclient-init-session-connection-error">

### `realtimecollaborationclient-init-session-connection-error`

Connecting to the session resulted in an error.

<a id="error-rename-operation-wrong-name">

### `rename-operation-wrong-name`

Element to change has different name than operation's old name.

<a id="error-rename-operation-wrong-position">

### `rename-operation-wrong-position`

Given position is invalid or node after it is not instance of Element.

<a id="error-revision-history-missing-configuration">

### `revision-history-missing-configuration`

Configuration for revision history plugin is missing.

Please refer to [documentation](../api/module_revision-history_revisionhistoryconfig-RevisionHistoryConfig.md) to learn how to set up the plugin.

<a id="error-rootattribute-operation-attribute-exists">

### `rootattribute-operation-attribute-exists`

The attribute with given key already exists for the given node.

#### Parameters

* `root: ModelRootElement`

  The root element.

* `key: string`

  The key of the attribute.

<a id="error-rootattribute-operation-fromjson-no-root">

### `rootattribute-operation-fromjson-no-root`

Cannot create RootAttributeOperation for document. Root with the specified name does not exist.

#### Parameters

* `rootName: string`

  The root name.

<a id="error-rootattribute-operation-not-a-root">

### `rootattribute-operation-not-a-root`

The element to change is not a root element.

#### Parameters

* `root: ModelRootElement`

  The root element.

* `key: string`

  The key of the attribute.

<a id="error-rootattribute-operation-wrong-old-value">

### `rootattribute-operation-wrong-old-value`

The attribute which should be removed does not exist for the given node.

#### Parameters

* `root: ModelRootElement`

  The root element.

* `key: string`

  The key of the attribute.

<a id="error-schema-cannot-extend-missing-item">

### `schema-cannot-extend-missing-item`

Cannot extend an item which was not registered yet.

This error happens when a plugin tries to extend the schema definition of an item which was not [registered](../api/module_engine_model_schema-ModelSchema.md#function-register) yet.

#### Parameters

* `itemName: any`

  The name of the model element which is being extended.

<a id="error-schema-cannot-register-item-twice">

### `schema-cannot-register-item-twice`

A single item cannot be registered twice in the schema.

This situation may happen when:

* Two or more plugins called [`register()`](../api/module_engine_model_schema-ModelSchema.md#function-register) with the same name. This will usually mean that there is a collision between plugins which try to use the same element in the model. Unfortunately, the only way to solve this is by modifying one of these plugins to use a unique model element name.

* A single plugin was loaded twice. This happens when it is installed by npm/yarn in two versions and usually means one or more of the following issues:

  * a version mismatch (two of your dependencies require two different versions of this plugin),
  * incorrect imports (this plugin is somehow imported twice in a way which confuses webpack),
  * mess in `node_modules/` (`rm -rf node_modules/` may help).

**Note:** Check the logged `itemName` to better understand which plugin was duplicated/conflicting.

#### Parameters

* `itemName: any`

  The name of the model element that is being registered twice.

<a id="error-schema-check-merge-no-element-after">

### `schema-check-merge-no-element-after`

The node after the merge position must be an element.

<a id="error-schema-check-merge-no-element-before">

### `schema-check-merge-no-element-before`

The node before the merge position must be an element.

<a id="error-sessions-register-already-registered">

### `sessions-register-already-registered`

Sessions of given channelId already registered.

<a id="error-sessions-unregister-not-exist">

### `sessions-unregister-not-exist`

Cannot unregister not registered sessions.

<a id="error-sidebar-attachtocontainer-missing-container">

### `sidebar-attachtocontainer-missing-container`

Missing container element.

<a id="error-sidebar-setcontainer-invalid-element">

### `sidebar-setcontainer-invalid-element`

Container element is not a HTMLElement.

<a id="error-simple-upload-adapter-missing-uploadurl">

### `simple-upload-adapter-missing-uploadurl`

The [`config.simpleUpload.uploadUrl`](../api/module_upload_uploadconfig-SimpleUploadConfig.md#member-uploadUrl) configuration required by the [`SimpleUploadAdapter`](../api/module_upload_adapters_simpleuploadadapter-SimpleUploadAdapter.md) is missing. Make sure the correct URL is specified for the image upload to work properly.

<a id="error-slash-command-execute-missing">

### `slash-command-execute-missing`

Either [`execute`](../api/module_slash-command_slashcommandconfig-SlashCommandDefinition.md#member-execute) or [`commandName`](../api/module_slash-command_slashcommandconfig-SlashCommandDefinition.md#member-commandName) has to be specified in [`SlashCommandDefinition`](../api/module_slash-command_slashcommandconfig-SlashCommandDefinition.md).

<a id="error-slash-command-invalid-license-key">

### `slash-command-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-slash-command-trial-license-key-reached-limit-changes">

### `slash-command-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-source-editing-enhanced-incompatible-with-real-time-collaboration">

### `source-editing-enhanced-incompatible-with-real-time-collaboration`

Source editing enhanced feature is not fully compatible with real-time collaboration, and using it may lead to data loss. Please read [source editing enhanced feature guide](../features/source-editing/source-editing-enhanced.md#limitations-and-incompatibilities) to learn more.

If you understand the possible risk of data loss, you can enable the source editing enhanced by setting the [`allowCollaborationFeatures`](../api/module_source-editing-enhanced_sourceeditingenhancedconfig-SourceEditingEnhancedConfig.md#member-allowCollaborationFeatures) configuration flag to `true`.

<a id="error-source-editing-incompatible-with-real-time-collaboration">

### `source-editing-incompatible-with-real-time-collaboration`

Source editing feature is not fully compatible with real-time collaboration, and using it may lead to data loss. Please read [source editing feature guide](../features/source-editing/source-editing.md#limitations-and-incompatibilities) to learn more.

If you understand the possible risk of data loss, you can enable the source editing by setting the [`allowCollaborationFeatures`](../api/module_source-editing_sourceeditingconfig-SourceEditingConfig.md#member-allowCollaborationFeatures) configuration flag to `true`.

<a id="error-special-character-invalid-group-name">

### `special-character-invalid-group-name`

The name "All" for a special category group cannot be used because it is a special category that displays all available special characters.

<a id="error-special-character-invalid-order-group-name">

### `special-character-invalid-order-group-name`

One of the special character groups in the "specialCharacters.order" configuration doesn't exist.

<a id="error-split-operation-graveyard-position-invalid">

### `split-operation-graveyard-position-invalid`

Graveyard position invalid.

<a id="error-split-operation-how-many-invalid">

### `split-operation-how-many-invalid`

Split operation specifies wrong number of nodes to move.

<a id="error-split-operation-position-invalid">

### `split-operation-position-invalid`

Split position is invalid.

<a id="error-split-operation-split-in-root">

### `split-operation-split-in-root`

Cannot split root element.

<a id="error-style-command-executed-with-incorrect-style-name">

### `style-command-executed-with-incorrect-style-name`

Style command can be executed only with a correct style name.

This warning may be caused by:

* passing a name that is not specified in the [configuration](../api/module_style_styleconfig-StyleConfig.md#member-definitions) (e.g. a CSS class name),
* when trying to apply a style that is not allowed on a given element.

<a id="error-table-of-contents-invalid-license-key">

### `table-of-contents-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-table-of-contents-trial-license-key-reached-limit-changes">

### `table-of-contents-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-tableslot-getter-removed">

### `tableslot-getter-removed`

This `TableSlot`'s getter (property) was removed in CKEditor 5 v20.0.0.

Check out the new `TableWalker`'s API in the documentation.

<a id="error-tableutils-insertrows-insert-out-of-range">

### `tableutils-insertrows-insert-out-of-range`

The `options.at` points at a row position that does not exist.

<a id="error-tableutils-removerows-row-index-out-of-range">

### `tableutils-removerows-row-index-out-of-range`

The `options.at` param must point at existing row and `options.rows` must not exceed the rows in the table.

<a id="error-template-extend-render">

### `template-extend-render`

Extending a template after rendering may not work as expected. To make sure the [extending](../api/module_ui_template-Template.md#static-function-extend) works for an element, make sure it happens before [`render`](../api/module_ui_template-Template.md#function-render) is called.

<a id="error-template-invalid-license-key">

### `template-invalid-license-key`

Invalid license key. Please contact our customer support at https\://ckeditor.com/contact/.

<a id="error-template-trial-license-key-reached-limit-changes">

### `template-trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-title-no-supported-root">

### `title-no-supported-root`

The Title feature was loaded, but none of the editor's roots supports the `title` element. The feature only operates on roots whose `modelElement` is the default `$root`; roots configured with a custom `modelElement` (including `$inlineRoot`) are silently skipped, so `getTitle()` / `getBody()` fall back to the regular data getter and no title structure is ever inserted.

To use the Title feature, ensure at least one root uses the default `$root` model element. Otherwise, remove the Title plugin from this editor's plugin list.

<a id="error-token-cannot-download-new-token">

### `token-cannot-download-new-token`

Cannot download new token from the provided url.

<a id="error-token-missing-token-url">

### `token-missing-token-url`

A `tokenUrl` must be provided as the first constructor argument.

<a id="error-token-not-in-jwt-format">

### `token-not-in-jwt-format`

The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.

<a id="error-token-refresh-failed">

### `token-refresh-failed`

You will see this warning when the CKEditor [token](../api/module_cloud-services_token_token-Token.md) could not be refreshed. This may be a result of a network error, a token endpoint (server) error, or an invalid [token URL configuration](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-tokenUrl).

If this warning repeats, please make sure that the configuration is correct and that the token endpoint is up and running. [Learn more](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-tokenUrl) about token configuration.

**Note:** If the token's [auto refresh option](../api/module_cloud-services_token_token-CloudServicesTokenOptions.md) is enabled, attempts to refresh will be made until success or token's [destruction](../api/module_cloud-services_token_token-Token.md#function-destroy).

#### Parameters

* `autoRefresh: boolean`

  Whether the token will keep auto refreshing.

<a id="error-toolbarview-item-unavailable">

### `toolbarview-item-unavailable`

There was a problem processing the configuration of the toolbar. The item with the given name does not exist so it was omitted when rendering the toolbar.

This warning usually shows up when the [`Plugin`](../api/module_core_plugin-Plugin.md) which is supposed to provide a toolbar item has not been loaded or there is a typo in the [toolbar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-toolbar).

Make sure the plugin responsible for this toolbar item is loaded and the toolbar configuration is correct, e.g. [`Bold`](../api/module_basic-styles_bold-Bold.md) is loaded for the `'bold'` toolbar item.

You can use the following snippet to retrieve all available toolbar items:

```typescript
Array.from( editor.ui.componentFactory.names() );
```

#### Parameters

* `item: string`

  The name of the component or nested toolbar definition.

<a id="error-toolbarview-item-unavailable
*">

### `toolbarview-item-unavailable *`

Logs a warning to the console with a properly formatted message and adds a link to the documentation. Use whenever you want to log a warning to the console.

```typescript
/**
 * There was a problem processing the configuration of the toolbar. The item with the given
 * name does not exist, so it was omitted when rendering the toolbar.
 *
 *
```

#### Parameters

* `name: String`

  The name of the component.

* `errorName: any`

  The error name to be logged.

* `data: any`

  Additional data to be logged.

<a id="error-toolbarview-item-unavailable
*">

### `toolbarview-item-unavailable *`

Logs an error to the console with a properly formatted message and adds a link to the documentation. Use whenever you want to log an error to the console.

```typescript
/**
 * There was a problem processing the configuration of the toolbar. The item with the given
 * name does not exist, so it was omitted when rendering the toolbar.
 *
 *
```

#### Parameters

* `name: String`

  The name of the component.

* `errorName: any`

  The error name to be logged.

* `data: any`

  Additional data to be logged.

<a id="error-toolbarview-line-break-ignored-when-grouping-items">

### `toolbarview-line-break-ignored-when-grouping-items`

The toolbar multiline breaks (`-` items) only work when the automatic button grouping is disabled in the toolbar configuration. To do this, set the `shouldNotGroupWhenFull` option to `true` in the editor configuration:

```typescript
const config = {
	toolbar: {
		items: [ ... ],
		shouldNotGroupWhenFull: true
	}
}
```

Learn more about [toolbar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-toolbar).

<a id="error-toolbarview-nested-toolbar-dropdown-missing-label">

### `toolbarview-nested-toolbar-dropdown-missing-label`

A dropdown definition in the toolbar configuration is missing a text label.

Without a label, the dropdown becomes inaccessible to users relying on assistive technologies. Make sure the `label` property is set in your drop-down configuration:

```json
{
 	label: 'A human-readable label',
	icon: '...',
	items: [ ... ]
 },
```

Learn more about [toolbar configuration](../api/module_core_editor_editorconfig-EditorConfig.md#member-toolbar).

<a id="error-track-changes-accept-suggestion-not-found">

### `track-changes-accept-suggestion-not-found`

Suggestion to accept does not exist.

<a id="error-track-changes-adapter-already-set">

### `track-changes-adapter-already-set`

Cannot set an adapter more than once.

<a id="error-track-changes-adapter-missing-getsuggestion">

### `track-changes-adapter-missing-getsuggestion`

Adapter not set or is missing `getSuggestion()` method.

<a id="error-track-changes-command-not-found">

### `track-changes-command-not-found`

Trying to enable command that does not exist.

<a id="error-track-changes-data-invalid-editor-creator">

### `track-changes-data-invalid-editor-creator`

Editor creator has to be a function.

<a id="error-track-changes-discard-suggestion-not-found">

### `track-changes-discard-suggestion-not-found`

Suggestion to discard does not exist.

<a id="error-track-changes-enable-command-twice">

### `track-changes-enable-command-twice`

Trying to enable the same command twice.

<a id="error-track-changes-suggestion-data-mismatch">

### `track-changes-suggestion-data-mismatch`

Suggestion marker data does not match loaded suggestion data.

<a id="error-track-changes-suggestion-not-found">

### `track-changes-suggestion-not-found`

Suggestion with given id not found.

<a id="error-track-changes-user-not-found">

### `track-changes-user-not-found`

User with the ID specified in suggestion `authorId` property not found.

<a id="error-translation-service-quantity-not-a-number">

### `translation-service-quantity-not-a-number`

An incorrect value was passed to the translation function. This was probably caused by an incorrect message interpolation of a plural form. Note that for messages supporting plural forms the second argument of the `t()` function should always be a number or an array with a number as the first element.

<a id="error-trial-license-key-reached-limit-changes">

### `trial-license-key-reached-limit-changes`

You have exhausted the trial usage limit (reason: reached document changes limit). Restart the editor.

Please contact our customer support to get full access at https\://ckeditor.com/contact/.

<a id="error-trial-license-key-reached-limit-revisions">

### `trial-license-key-reached-limit-revisions`

You have exhausted the trial usage limit (reason: reached revisions number limit).

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-trial-license-key-reached-limit-time">

### `trial-license-key-reached-limit-time`

You have exhausted the trial usage limit (reason: reached time limit). Restart the editor.

Please contact our customer support to get a full access at https\://ckeditor.com/contact/.

<a id="error-trusted-types-policy-creation-failed">

### `trusted-types-policy-creation-failed`

The editor could not create the Trusted Types policy that it needs to write HTML into the DOM. Without the policy it can only write plain strings, which the `require-trusted-types-for 'script'` CSP directive rejects, so the editor cannot start.

The browser refuses to create the policy for two reasons:

* The `trusted-types` CSP directive does not list the `ckeditor5` policy name. Add it to that directive, next to any names that are already there:

  ```
  Content-Security-Policy: require-trusted-types-for 'script'; trusted-types ckeditor5 lit-html;
  ```

* Something else in the same document already created a policy with that name. Let that code use a different name, or allow the name to be taken twice:

  ```
  Content-Security-Policy: require-trusted-types-for 'script'; trusted-types ckeditor5 lit-html 'allow-duplicates';
  ```

For a detailed overview, check the [Content Security Policy](../getting-started/setup/csp.md#enabling-trusted-types) guide.

<a id="error-ui-dropdown-focus-child-on-open-child-missing-focus">

### `ui-dropdown-focus-child-on-open-child-missing-focus`

The child view of a [dropdown](../api/module_ui_dropdown_dropdownview-DropdownView.md) is missing the `focus()` method and could not be focused when the dropdown got [open](../api/module_ui_dropdown_dropdownview-DropdownView.md#member-isOpen).

Making the content of a dropdown focusable in this case greatly improves the accessibility. Please make the view instance implements the [focusable interface](../api/module_ui_dropdown_dropdownpanelfocusable-DropdownPanelFocusable.md) for the best user experience.

#### Parameters

* `view: View`

  Child to focus.

<a id="error-ui-dropdown-panel-focus-child-missing-focus">

### `ui-dropdown-panel-focus-child-missing-focus`

The child view of a dropdown could not be focused because it is missing the `focus()` method.

This warning appears when a dropdown [gets open](../api/module_ui_dropdown_dropdownview-DropdownView.md#member-isOpen) and it attempts to focus the [first child](../api/module_ui_dropdown_dropdownpanelview-DropdownPanelView.md#member-children) of its panel but the child does not implement the [focusable interface](../api/module_ui_dropdown_dropdownpanelfocusable-DropdownPanelFocusable.md).

Focusing the content of a dropdown on open greatly improves the accessibility. Please make sure the view instance provides the `focus()` method for the best user experience.

#### Parameters

* `childView: View`

  Child view.

* `dropdownPanel: DropdownPanelView`

  A parent of a child.

<a id="error-ui-iconview-invalid-svg">

### `ui-iconview-invalid-svg`

The provided icon content is not a valid SVG.

<a id="error-ui-overlay-container-not-configured">

### `ui-overlay-container-not-configured`

The editor UI is rendered inside a shadow root but [`config.ui.overlayContainer`](../api/module_core_editor_editorconfig-UiConfig.md#member-overlayContainer) is not configured. In this case the overlay layer (balloons, dialogs, tooltips) is mounted automatically into the shadow root hosting the editing root.

Such an automatically chosen container inherits the layout of the shadow host and its ancestors. If any of them creates a containing block or a stacking context – for example it has `position: relative`, `overflow: hidden`, a `transform`, or a low `z-index` – the floating UI may be misplaced, clipped, or rendered underneath other content of the page.

To make sure the floating UI behaves correctly, set the overlay container explicitly. See the [`config.ui.overlayContainer`](../api/module_core_editor_editorconfig-UiConfig.md#member-overlayContainer) documentation to learn where such a container should be located. Configuring it also silences this warning.

#### Parameters

* `shadowRoot: ShadowRoot`

  The shadow root the editor UI was detected in.

<a id="error-ui-overlay-container-not-connected">

### `ui-overlay-container-not-connected`

The element passed as [`overlayContainer`](../api/module_core_editor_editorconfig-UiConfig.md#member-overlayContainer) \* `config.ui.overlayContainer`} is not connected to the document. The overlay layer mounts into it anyway, but its floating UI (balloons, dialogs, tooltips) stays invisible until the element is inserted into the document.

Make sure the configured container is attached to the document before creating the editor, or attach it afterwards.

#### Parameters

* `overlayContainer: HTMLElement | ShadowRoot`

  The configured, not connected container.

<a id="error-ui-tabsview-tab-not-found">

### `ui-tabsview-tab-not-found`

The tab with the given ID was not found.

#### Parameters

* `tabs: AITabsView`

  The tabs view instance.

* `tabId: string`

  The ID of the tab that was not found.

<a id="error-ui-template-extend-children-mismatch">

### `ui-template-extend-children-mismatch`

The number of children in extended definition does not match.

<a id="error-ui-template-revert-not-applied">

### `ui-template-revert-not-applied`

Attempting to revert a template which has not been applied yet.

<a id="error-ui-template-wrong-syntax">

### `ui-template-wrong-syntax`

Node definition cannot have the "tag" and "text" properties at the same time. Node definition must have either "tag" or "text" when rendering a new Node.

<a id="error-ui-textarea-view-min-rows-greater-than-max-rows">

### `ui-textarea-view-min-rows-greater-than-max-rows`

The minimum number of rows is greater than the maximum number of rows.

#### Parameters

* `textareaView: TextareaView`

  The misconfigured textarea view instance.

* `minRows: number`

  The value of `minRows` property.

* `maxRows: number`

  The value of `maxRows` property.

<a id="error-ui-view-render-already-rendered">

### `ui-view-render-already-rendered`

This View has already been rendered.

<a id="error-ui-viewcollection-delegate-wrong-events">

### `ui-viewcollection-delegate-wrong-events`

All event names must be strings.

<a id="error-unexpected-error">

### `unexpected-error`

An unexpected error occurred inside the CKEditor 5 codebase. This error will look like the original one to make the debugging easier.

Like any [`CKEditorError`](../api/module_utils_ckeditorerror-CKEditorError.md), it is reported to the callbacks registered with [`onEditorError()`](../api/module_core_errorreporter.md#function-onEditorError), naming the editor it came from.

<a id="error-update-bookmark-command-executed-with-invalid-name">

### `update-bookmark-command-executed-with-invalid-name`

Update bookmark command can be executed only with a valid name.

A valid bookmark name must be a non-empty string and must not contain any spaces.

<a id="error-uploadcare-unavailable-with-trusted-types">

### `uploadcare-unavailable-with-trusted-types`

The file uploader of Uploadcare is not available, because the application enforces Trusted Types with the `require-trusted-types-for 'script'` CSP directive. The uploader writes HTML in a way that this directive rejects, and the editor cannot change how it does that.

Uploading files still works. What is unavailable is the Uploadcare dialog and the image editor.

For a detailed overview, check the [Content Security Policy](../getting-started/setup/csp.md#known-limitations) guide.

<a id="error-uploadgateway-missing-api-address">

### `uploadgateway-missing-api-address`

Api address must be provided.

<a id="error-uploadgateway-missing-token">

### `uploadgateway-missing-token`

Token must be provided.

<a id="error-users-add-duplicated-id">

### `users-add-duplicated-id`

User with a given id is already added.

<a id="error-users-add-invalid-id">

### `users-add-invalid-id`

The id must be a string.

<a id="error-users-me-already-defined">

### `users-me-already-defined`

Cannot add a local user more than once.

<a id="error-users-me-missing-user">

### `users-me-missing-user`

Cannot specify a non-existing user as the local user.

<a id="error-view-conversion-dispatcher-incorrect-result">

### `view-conversion-dispatcher-incorrect-result`

Incorrect conversion result was dropped.

[Model range](../api/module_engine_model_range-ModelRange.md) should be a conversion result.

<a id="error-view-createpositionat-offset-required">

### `view-createpositionat-offset-required`

[`View#createPositionAt()`](../api/module_engine_view_view-EditingView.md#function-createPositionAt) requires the offset to be specified when the first parameter is a view item.

<a id="error-view-emptyelement-cannot-add">

### `view-emptyelement-cannot-add`

Cannot add children to [`ViewEmptyElement`](../api/module_engine_view_emptyelement-ViewEmptyElement.md).

<a id="error-view-node-not-found-in-parent">

### `view-node-not-found-in-parent`

The node's parent does not contain this node. It means that the document tree is corrupted.

<a id="error-view-position-after-root">

### `view-position-after-root`

You cannot make a position after a root.

#### Parameters

* `root: ViewNode`

  A root item.

<a id="error-view-position-before-root">

### `view-position-before-root`

You cannot make a position before a root.

#### Parameters

* `root: ViewNode`

  A root item.

<a id="error-view-rawelement-cannot-add">

### `view-rawelement-cannot-add`

Cannot add children to a [`ViewRawElement`](../api/module_engine_view_rawelement-ViewRawElement.md) instance.

<a id="error-view-renderer-filler-was-lost">

### `view-renderer-filler-was-lost`

The inline filler node was lost. Most likely, something overwrote the filler text node in the DOM.

<a id="error-view-renderer-unknown-type">

### `view-renderer-unknown-type`

Unknown type passed to Renderer.markToSync.

<a id="error-view-selection-add-range-not-range">

### `view-selection-add-range-not-range`

Selection range set to an object that is not an instance of [`ViewRange`](../api/module_engine_view_range-ViewRange.md).

<a id="error-view-selection-range-intersects">

### `view-selection-range-intersects`

Trying to add a range that intersects with another range from selection.

#### Parameters

* `addedRange: ViewRange`

  Range that was added to the selection.

* `intersectingRange: ViewRange`

  Range from selection that intersects with `addedRange`.

<a id="error-view-selection-setfocus-no-ranges">

### `view-selection-setfocus-no-ranges`

Cannot set selection focus if there are no ranges in selection.

<a id="error-view-selection-setto-not-selectable">

### `view-selection-setto-not-selectable`

Cannot set selection to given place.

<a id="error-view-selection-setto-required-second-parameter">

### `view-selection-setto-required-second-parameter`

selection.setTo requires the second parameter when the first parameter is a node.

<a id="error-view-textproxy-wrong-length">

### `view-textproxy-wrong-length`

Given length value is incorrect.

<a id="error-view-textproxy-wrong-offsetintext">

### `view-textproxy-wrong-offsetintext`

Given offsetInText value is incorrect.

<a id="error-view-tree-walker-no-start-position">

### `view-tree-walker-no-start-position`

Neither boundaries nor starting position have been defined.

<a id="error-view-tree-walker-unknown-direction">

### `view-tree-walker-unknown-direction`

Only `backward` and `forward` direction allowed.

<a id="error-view-uielement-cannot-add">

### `view-uielement-cannot-add`

Cannot add children to [`ViewUIElement`](../api/module_engine_view_uielement-ViewUIElement.md).

<a id="error-view-writer-break-non-container-element">

### `view-writer-break-non-container-element`

Trying to break an element which is not a container element.

<a id="error-view-writer-break-root">

### `view-writer-break-root`

Trying to break root element.

<a id="error-view-writer-cannot-break-empty-element">

### `view-writer-cannot-break-empty-element`

Cannot break an `EmptyElement` instance.

This error is thrown if [`ViewDowncastWriter#breakAttributes()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-breakAttributes) was executed in an incorrect position.

<a id="error-view-writer-cannot-break-raw-element">

### `view-writer-cannot-break-raw-element`

Cannot break a `RawElement` instance.

This error is thrown if [`ViewDowncastWriter#breakAttributes()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-breakAttributes) was executed in an incorrect position.

<a id="error-view-writer-cannot-break-ui-element">

### `view-writer-cannot-break-ui-element`

Cannot break a `UIElement` instance.

This error is thrown if [`ViewDowncastWriter#breakAttributes()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-breakAttributes) was executed in an incorrect position.

<a id="error-view-writer-insert-invalid-node-type">

### `view-writer-insert-invalid-node-type`

One of the nodes to be inserted is of an invalid type.

Nodes to be inserted with [`ViewDowncastWriter#insert()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-insert) should be of the following types:

* [ViewAttributeElement](../api/module_engine_view_attributeelement-ViewAttributeElement.md),
* [ViewContainerElement](../api/module_engine_view_containerelement-ViewContainerElement.md),
* [ViewEmptyElement](../api/module_engine_view_emptyelement-ViewEmptyElement.md),
* [UIElement](../api/module_engine_view_uielement-ViewUIElement.md),
* [RawElement](../api/module_engine_view_rawelement-ViewRawElement.md),
* [Text](../api/module_engine_view_text-ViewText.md).

<a id="error-view-writer-invalid-create-slot-context">

### `view-writer-invalid-create-slot-context`

The `createSlot()` method is only allowed inside the `elementToStructure` downcast helper callback.

<a id="error-view-writer-invalid-position-container">

### `view-writer-invalid-position-container`

Position's parent container cannot be found.

<a id="error-view-writer-invalid-range-container">

### `view-writer-invalid-range-container`

The container of the given range is invalid.

This may happen if [range start](../api/module_engine_view_range-ViewRange.md#member-start) and [range end](../api/module_engine_view_range-ViewRange.md#member-end) positions are not placed inside the same container element or a parent container for these positions cannot be found.

Methods like [`ViewDowncastWriter#remove()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-wrap), [`ViewDowncastWriter#clean()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-wrap), [`ViewDowncastWriter#wrap()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-wrap), [`ViewDowncastWriter#unwrap()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-wrap) need to be called on a range that has its start and end positions located in the same container element. Both positions can be nested within other elements (e.g. an attribute element) but the closest container ancestor must be the same.

<a id="error-view-writer-merge-containers-invalid-position">

### `view-writer-merge-containers-invalid-position`

Element before and after given position cannot be merged.

<a id="error-view-writer-unwrap-invalid-attribute">

### `view-writer-unwrap-invalid-attribute`

The `attribute` passed to [`ViewDowncastWriter#unwrap()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-unwrap) must be an instance of [`AttributeElement`](../api/module_engine_view_attributeelement-ViewAttributeElement.md).

<a id="error-view-writer-wrap-invalid-attribute">

### `view-writer-wrap-invalid-attribute`

The `attribute` passed to [`ViewDowncastWriter#wrap()`](../api/module_engine_view_downcastwriter-ViewDowncastWriter.md#function-wrap) must be an instance of [`AttributeElement`](../api/module_engine_view_attributeelement-ViewAttributeElement.md).

<a id="error-viewconsumable-invalid-attribute">

### `viewconsumable-invalid-attribute`

Class and style attributes should be handled separately in [`ViewConsumable#add()`](../api/module_engine_conversion_viewconsumable-ViewConsumable.md#function-add).

What you have done is trying to use:

```typescript
consumables.add( { attributes: [ 'class', 'style' ] } );
```

While each class and style should be registered separately:

```typescript
consumables.add( { classes: 'some-class', styles: 'font-weight' } );
```

<a id="error-websocketgateway-invalid-plugin-interface">

### `websocketgateway-invalid-plugin-interface`

Cannot add a plugin that does not implement the `reconnect()` method to the `WebSocketGateway` reconnection stack.

<a id="error-websocketgateway-missing-token">

### `websocketgateway-missing-token`

The authentication [`tokenUrl`](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-tokenUrl) \* `config.cloudServices.tokenUrl`} configuration is required for creating a websocket connection.

<a id="error-websocketgateway-missing-websocket-url">

### `websocketgateway-missing-websocket-url`

The [`config.cloudServices.webSocketUrl`](../api/module_cloud-services_cloudservicesconfig-CloudServicesConfig.md#member-webSocketUrl) configuration is required for creating a websocket connection in the real-time collaboration.

```typescript
ClassicEditor.create( {
	cloudServices: {
		webSocketUrl: "YOUR_WEBSOCKET_URL"
		// ...
	}
	// ...
} );
```

<a id="error-websocketgateway-plugin-already-registered">

### `websocketgateway-plugin-already-registered`

A plugin was added twice to the `WebSocketGateway` reconnection stack.

<a id="error-widesidebar-attach-already-attached">

### `widesidebar-attach-already-attached`

Cannot attach wide sidebar twice.

<a id="error-widesidebar-detach-not-attached">

### `widesidebar-detach-not-attached`

Cannot detach not attached sidebar.

<a id="error-widget-to-widget-wrong-element-type">

### `widget-to-widget-wrong-element-type`

The element passed to `toWidget()` must be a [`ViewContainerElement`](../api/module_engine_view_containerelement-ViewContainerElement.md) instance.

#### Parameters

* `element: any`

  The view element passed to `toWidget()`.

<a id="error-widget-toolbar-duplicated">

### `widget-toolbar-duplicated`

Toolbar with the given id was already added.

#### Parameters

* `toolbarId: string`

  Toolbar id.

<a id="error-widget-toolbar-no-items">

### `widget-toolbar-no-items`

When [registering](../api/module_widget_widgettoolbarrepository-WidgetToolbarRepository.md#function-register) a new widget toolbar, you need to provide a non-empty array with the items that will be inserted into the toolbar.

If you see this error when integrating the editor, you likely forgot to configure one of the widget toolbars.

See for instance:

* [`config.table.contentToolbar`](../api/module_table_tableconfig-TableConfig.md#member-contentToolbar)
* [`config.image.toolbar`](../api/module_image_imageconfig-ImageConfig.md#member-toolbar)

#### Parameters

* `toolbarId: string`

  The id of the toolbar that has not been configured correctly.

<a id="error-writer-addmarker-marker-exists">

### `writer-addmarker-marker-exists`

Marker with provided name already exists.

<a id="error-writer-addmarker-no-range">

### `writer-addmarker-no-range`

Range parameter is required when adding a new marker.

<a id="error-writer-addmarker-no-usingoperation">

### `writer-addmarker-no-usingoperation`

The `options.usingOperation` parameter is required when adding a new marker.

<a id="error-writer-addroot-root-exists">

### `writer-addroot-root-exists`

Root with provided name already exists and is attached.

<a id="error-writer-detachroot-no-root">

### `writer-detachroot-no-root`

Root with provided name does not exist or is already detached.

<a id="error-writer-incorrect-use">

### `writer-incorrect-use`

Trying to use a writer outside a [`change()`](../api/module_engine_model_model-Model.md#function-change) or [`enqueueChange()`](../api/module_engine_model_model-Model.md#function-enqueueChange:DEFAULT_BATCH) blocks.

The writer can only be used inside these blocks which ensures that the model can only be changed during such "sessions".

<a id="error-writer-merge-no-element-after">

### `writer-merge-no-element-after`

Node after merge position must be an element.

<a id="error-writer-merge-no-element-before">

### `writer-merge-no-element-before`

Node before merge position must be an element.

<a id="error-writer-move-different-document">

### `writer-move-different-document`

Range is going to be moved within not the same document. Please use [insert](../api/module_engine_model_writer-ModelWriter.md#function-insert) instead.

<a id="error-writer-move-invalid-range">

### `writer-move-invalid-range`

Invalid range to move.

<a id="error-writer-move-range-not-flat">

### `writer-move-range-not-flat`

Range to move is not flat.

<a id="error-writer-removemarker-no-marker">

### `writer-removemarker-no-marker`

Trying to remove marker which does not exist.

<a id="error-writer-rename-not-element-instance">

### `writer-rename-not-element-instance`

Trying to rename an object which is not an instance of Element.

<a id="error-writer-split-element-no-parent">

### `writer-split-element-no-parent`

Element with no parent cannot be split.

<a id="error-writer-split-invalid-limit-element">

### `writer-split-invalid-limit-element`

Limit element is not a position ancestor.

<a id="error-writer-unwrap-element-no-parent">

### `writer-unwrap-element-no-parent`

Trying to unwrap an element which has no parent.

<a id="error-writer-updatemarker-marker-not-exists">

### `writer-updatemarker-marker-not-exists`

Marker with provided name does not exist and will not be updated.

<a id="error-writer-updatemarker-reconvert-using-editingcontroller">

### `writer-updatemarker-reconvert-using-editingcontroller`

The usage of `writer.updateMarker()` only to reconvert (refresh) a [model marker](../api/module_engine_model_markercollection-Marker.md) was deprecated and may not work in the future. Please update your code to use [`editor.editing.reconvertMarker()`](../api/module_engine_controller_editingcontroller-EditingController.md#function-reconvertMarker) instead.

#### Parameters

* `markerName: any`

  The name of the updated marker.

<a id="error-writer-updatemarker-wrong-options">

### `writer-updatemarker-wrong-options`

One of the options is required - provide range, usingOperations or affectsData.

<a id="error-writer-wrap-element-attached">

### `writer-wrap-element-attached`

Element to wrap with is already attached to a tree model.

<a id="error-writer-wrap-element-not-empty">

### `writer-wrap-element-not-empty`

Element to wrap with is not empty.

<a id="error-writer-wrap-range-not-flat">

### `writer-wrap-range-not-flat`

Range to wrap is not flat.

---

Full index of the CKEditor 5 documentation: [llms.txt](../../llms.txt)
