TinyMCE 8.0.0

These are the Tiny Cloud and TinyMCE Enterprise release notes. For information on the latest community version of TinyMCE, see the TinyMCE Changelog.

Overview

TinyMCE 8.0.0 was released for TinyMCE Enterprise and Tiny Cloud on Wednesday, July 23rd, 2025. These release notes provide an overview of the changes for TinyMCE 8.0.0, including:

This release includes breaking changes to the license key system. All commercial self-hosted deployments must update their license keys to use the new T8LK: prefix format. For details on this and other breaking changes when considering upgrading, see Migrating from TinyMCE 7 to TinyMCE 8.0.0.

New Premium plugins

The following new Premium plugin was released alongside TinyMCE 8.0.0.

Suggested Edits

The TinyMCE 8.0.0 release includes an accompanying release of the Suggested Edits premium plugin.

The Suggested Edits plugin allows multiple users to collaborate on a document. The review window shows which user suggested which edits, whether they added, removed, modified, or replaced any content, and allows users to provide feedback on those suggestions or give a final review by accepting or rejecting them.

For information on the Suggested Edits plugin, see: Suggested Edits.

Accompanying Premium plugin changes

The following premium plugin updates were released alongside TinyMCE 8.0.0.

Mentions

The TinyMCE 8.0.0 release includes an accompanying release of the Mentions premium plugin.

Mentions Premium plugin includes the following fix and removal.

Mentions username not updating with skin changes in dark mode

Previously, the username displayed on the mentions card did not update correctly when switching between skins, particularly in dark mode. This issue caused the username to become invisible against the dark background, making it difficult for users to read.

To resolve this, the styling for the username has been updated. The class now uses the @text-color variable for its default styling, ensuring that it inherits the correct color from its parent element when the item is active. This change guarantees that the username remains visible and readable in both light and dark themes.

Removed unused Mentions plugin stylesheet

In 8.0.0, the unused mentions.css file was removed from the Mentions plugin. In earlier versions (such as 7.9), this empty CSS file was still being loaded, despite its contents having been moved to the Oxide theme in a prior update. This change ensures cleaner resource loading and avoids unnecessary network requests.

The removal does not impact plugin functionality and applies to all editor modes.

For information on the Mentions plugin, see: Mentions.

Spell Checker

The TinyMCE 8.0.0 release includes an accompanying release of the Spell Checker premium plugin.

Spell Checker Premium plugin includes the following fix and improvements.

Content marked with lang attributes was sometimes not spellchecked correctly.

Previously, the spellchecker did not consistently handle content marked with different lang attributes, particularly when the language codes used different formats. This inconsistency led to missed spellchecking for words in spans that used alternate casing or separator conventions (e.g., en-GB vs en_GB).

This issue was introduced in TinyMCE 6.4, where documents containing a mix of language codes using different formats would not be reliably spellchecked. As a result, misspelled words in spans using alternate casing or separator conventions were not detected, even though they functioned as expected in version 6.3.

In 8.0.0, support for mixed-case and mixed-format language codes has been restored. The spellchecker now correctly identifies and handles variations in language attribute formatting, ensuring that content is reliably checked regardless of code style. This improvement enables accurate spellchecking for documents that include multiple languages and diverse regional conventions.

Input label for misspelled word was not announced by screen readers.

In previous versions, the Spell Checker dialog’s misspelled word input field lacked proper accessibility labeling, preventing screen readers from announcing its purpose. TinyMCE 8.0.0 resolves this accessibility limitation by adding the appropriate label association between the "Misspelled Word" text and its input field. This enhancement allows screen readers to correctly identify and announce the input field’s purpose, improving the spell checking experience for users who rely on assistive technologies.

Language code standardization to RFC5646/BCP47 format

The TinyMCE 8.0.0 release introduces standardized support for language codes using the RFC5646 (also known as BCP47) format. This update applies to all language-related configurations, including:

  • UI language packs (premium and community)

  • Spellchecker language codes

  • HTML lang attributes

  • Content language selection

Changes

  • Language codes now use hyphens (-) instead of underscores (_). For example:

    • 'en-US' instead of 'en_US'

    • 'zh-TW' instead of 'zh_TW'

    • 'pt-BR' instead of 'pt_BR'

  • Base language codes without regions (e.g., 'en', 'es', 'fr') remain unchanged.

  • File names for language packs have been updated to use hyphens.

  • Premium plugins have been updated to recognize RFC5646-compliant codes.

Backward Compatibility

To ensure a smooth migration

  • Both hyphenated and underscore formats are supported in TinyMCE 8.0.0.

  • A console warning is displayed when the legacy underscore format is used.

  • Both formats of language pack files are distributed with TinyMCE 8.0.0.

  • TinyMCE 9 will support only the RFC5646-compliant hyphenated format.

Migration

  1. Update language-related configuration in tinymce.init:

    language: 'en-US',
    spellchecker_language: 'en-US'
  2. Update content_langs configuration:

    content_langs: [
      { title: 'English (US)', code: 'en-US' },
      { title: 'Portuguese (Brazil)', code: 'pt-BR' }
    ]
  3. Rename any custom dictionary files to use hyphens (e.g., 'en-GB.txt' instead of 'en_GB.txt').

  4. Ensure any server-side integrations or custom language pack files follow the new naming convention.

This standardization aligns TinyMCE with modern web standards and improves consistency across its multilingual features.

For information on the Spell Checker premium plugin, see: Spell Checker plugin or for an complete list of supported languages, see: Supported languages.

Accessibility Checker

The TinyMCE 8.0.0 release includes an accompanying release of the Accessibility Checker premium plugin.

Accessibility Checker Premium plugin includes the following improvements.

Accessibility: Enhanced image accessibility checks in a11ychecker plugin

The TinyMCE 8.0.0 introduces four new image accessibility rules (Image rules) in the a11ychecker plugin to improve compliance and authoring guidance. These rules help identify common accessibility issues related to image use and provide actionable recommendations:

  • I1: Mixed Signals & Decorative Policy: Flags images with conflicting accessibility indicators (e.g., alt with role="presentation") and ensures decorative images comply with best practices.

  • I2: Alt Attribute Requirement: Enforces the presence of the alt attribute on all <img> elements, regardless of other labeling mechanisms like aria-label, aria-labelledby, or title.

  • I3: Filename Detection: Warns when alt text appears to be a filename (e.g., image123.jpg), including cases with URL encoding.

  • I4: Alt Text Length: Detects alt text that exceeds a configurable maximum length, promoting concise descriptions. The default limit is 150 characters and can be adjusted using the new a11ychecker_alt_text_max_length setting.

Additional improvements include a rule precedence system to avoid duplicate violations, centralized image intent detection (e.g., decorative, informative, mixed signals, incomplete), and more readable user-facing messages. Technical terminology such as "alternative text" has been replaced with "text description," and repair instructions are now more contextual and user-friendly.

New a11ychecker_alt_text_max_length configuration option for Accessibility Checker alt text length

A new configuration option, a11ychecker_alt_text_max_length, has been added to the Accessibility Checker plugin. This option allows users to configure the maximum allowed length for image alt text descriptions. The default value is 150 characters. For example:

tinymce.init({
  selector: 'textarea',
  plugins: 'a11ychecker',
  a11ychecker_alt_text_max_length: 150  // Set maximum length to 150 characters
});

For more information on the Accessibility Checker plugin, see: Accessibility Checker.

PowerPaste

The TinyMCE 8.0.0 release includes an accompanying release of the PowerPaste premium plugin.

Word import of lists with a "lighter" level failed parsing.

When users pasted content from Microsoft Word documents containing lists styled with Word’s "No List" setting into the editor with PowerPaste enabled, the operation failed due to a parsing error. As a result, the content was not inserted into the editor, causing disruption to content workflows. TinyMCE 8.0.0 addresses this issue by updating the PowerPaste parser to correctly handle lists with the "No List" style. As a result, users can now successfully paste such content into the editor without encountering errors.

For information on the PowerPaste plugin, see: PowerPaste.

Comments

The TinyMCE 8.0.0 release includes an accompanying release of the Comments premium plugin.

Comments Premium plugin includes the following removal.

Removed unused Comments stylesheet

In 8.0.0, the unused tinycomments.css file was removed from the Comments plugin. In earlier versions (such as 7.9), this empty CSS file was still being loaded, despite its contents having been moved to the Oxide theme in a prior update. This change ensures cleaner resource loading and avoids unnecessary network requests.

For information on the Comments plugin, see: Introduction to Tiny Comments.

Accompanying Enhanced Skins & Icon Packs changes

The TinyMCE 8.0.0 release includes an accompanying release of the Enhanced Skins & Icon Packs.

Enhanced Skins & Icon Packs

The Enhanced Skins & Icon Packs release includes the following updates:

The Enhanced Skins & Icon Packs were rebuilt to pull in the changes also incorporated into the default TinyMCE 8.0.0 skin, Oxide.

For information on using Enhanced Skins & Icon Packs, see: Enhanced Skins & Icon Packs.

Improvements

TinyMCE 8.0.0 also includes the following improvements:

Enhanced cross-origin resource handling

Added a new function-based crossorigin configuration option that provides granular control over cross-origin resource loading. The function receives the resource URL and type (script or stylesheet) as parameters and can return 'anonymous', 'use-credentials', or undefined to control the crossorigin attribute.

Example: Setting crossorigin="anonymous" to script.
<script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/8/tinymce.min.js" referrerpolicy="origin" crossorigin="anonymous"></script>

Or;

Example: Setting reusable constant function.
const crossOriginFunction = (url, resourceType) => {
    // Returning 'anonymous' or 'use-credentials' here would explicitly set the attribute
    return 'anonymous';
    // return 'use-credentials';
    // return undefined; // Omits the 'crossorigin' attribute for all resources by returning undefined
};

tinymce.init({
  selector: "textarea",
  crossorigin: crossOriginFunction
});

This improvement ensures consistent resource loading behavior across different deployment scenarios and provides better control over CORS settings for both scripts and stylesheets.

For more details, see crossorigin configuration option documentation.

Tooltips can now be closed by pressing the escape key.

Prior to 8.0.0, tooltips could not be dismissed using the keyboard, which posed an accessibility concern. As of TinyMCE 8.0.0, tooltips can now be closed via the escape key, improving accessibility.

Instructions on how to navigate the color swatch, image select and insert table widget are now announced by screen readers.

Previously, interactive elements such as the color swatch, create table grid, and image select were missing an aria-label. This resulted in a lack of instructions for keyboard users and hindered overall accessibility.

TinyMCE 8.0.0 now includes aria-labels for these elements, providing clear keyboard navigation instructions. This improvement ensures a more accessible experience for all users.

Resize handles are more accessible with role and aria-valuetext attributes.

In previous versions of TinyMCE, the editor’s resize handle lacked a role attribute, raising accessibility concerns.

In TinyMCE 8.0.0, the resize handle now includes a role seperator and an aria-valuetext attribute that dynamically reflects the current dimensions of the editor. These improvements enhance accessibility and ensure more accurate announcements by screen readers.

Focus is now restored to a dialog after closing an alert, confirmation or another dialog

Previously, when a dialog was opened from within another dialog — such as a file picker triggered via a file_picker_callback the focus was not correctly restored to the original dialog after closing the secondary one. This issue also affected alert and confirmation dialogs opened from within a parent dialog.

As a result, keyboard users experienced disrupted navigation and loss of focus context, impairing accessibility and usability in multi-dialog workflows.

In 8.0.0, TinyMCE now restores focus to the triggering button in the parent dialog once the nested dialog is closed. This improvement enhances keyboard navigation and accessibility in scenarios involving multiple overlapping dialogs.

Added support for skip_focus option in ToggleToolbarDrawer command

The ToggleToolbarDrawer command now supports the standard skip_focus option, which allows opening the toolbar drawer without focusing the editor. This provides consistent behavior with other editor commands.

Updated new skip_focus option usage command
editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true });

For more information on the ToggleToolbarDrawer command, see: Available Commands.

Split buttons are now rendered as separate action and chevron buttons.

Split buttons in TinyMCE 8.0.0 now render as two independent, focusable components instead of a single composite element. The main button performs the primary action, while the chevron button controls the dropdown menu. This design improvement enhances accessibility by allowing separate focus targets and ARIA labels for each button.

The translate API now automatically replaces three dots in a row with an ellipsis character.

Previously, menu items and tooltips containing three consecutive periods (…​) were read aloud by the JAWS screen reader as "dot dot dot," which could confuse users relying on assistive technologies. To enhance accessibility, the translate API in TinyMCE 8.0.0 now automatically replaces three dots with the typographic ellipsis character (…) across all translations. This update ensures a consistent visual appearance while improving screen reader behavior, as the ellipsis character is not read aloud. The change is implemented directly in the translation function, ensuring comprehensive coverage across all languages.

Additions

TinyMCE 8.0.0 also includes the following additions:

New allow_html_in_comments option to allow HTML-like content inside comment data

Comments containing HTML-like content are removed from the editor’s content by default for security reasons. This is done during the sanitization process, which ensures that any HTML-like content in comments is stripped out.

TinyMCE introduces a new configuration option, allow_html_in_comments, to give users control over whether HTML-like content in comments should be retained or removed. By default, this content is removed for security, but setting the option to true allows HTML-like content in comments to be preserved when needed.

Split button tooltip configuration

The chevronTooltip property provides custom tooltip text for the chevron button portion of split buttons. When chevronTooltip is not specified, TinyMCE automatically generates tooltip text using the pattern "{tooltip} menu". The setTooltip method updates both main and chevron tooltips to maintain consistency.

For more information, see Split toolbar buttons.

New User Lookup API for retrieving and caching user details

TinyMCE 8.0.0 introduces a new User Lookup API that enables integrations to retrieve and cache user details (such as names and avatars) and identify the current user within the editor. This API is particularly useful when building features that rely on user context, such as commenting systems or displaying lists of elements containing user information.

The User Lookup API provides efficient user data management with built-in caching, reducing redundant network requests and improving performance. It can be used as a universal solution for <pluginname>_author and <pluginname>_author_avatar configurations across various plugins, including currently supported plugins such as Suggested Edits, Comments, and Revision History.

Key features include:

  • Current user identification: Set and retrieve the active user’s ID using the new user_id configuration option

  • Flexible user fetching: Configure custom user data retrieval through the fetch_users callback function

  • Built-in caching: Automatic caching of user data to minimize API calls

  • Fallback handling: Automatic generation of default user information when custom fetch functions are not provided

  • Extensible user objects: Support for custom metadata through the custom property

Basic configuration

The API requires two main configuration options:

tinymce.init({
  selector: 'textarea',
  user_id: 'alextaylor', // Set the current user's unique identifier
  fetch_users: (userIds) => {
    // Return a Promise that resolves to an array of user objects
    return Promise.all(
      userIds.map(userId =>
        fetch(`/users/${userId}`)
          .then(response => response.json())
          .catch(() => ({ id: userId })) // Fallback for failed requests
      )
    );
  }
});

API usage

Once configured, the API provides two main methods:

  • editor.userLookup.userId - Returns the current user’s ID

  • editor.userLookup.fetchUsers(userIds) - Fetches and caches user information

editor.on('init', () => {
  // Get current user ID
  console.log('Current user:', editor.userLookup.userId);

  // Fetch multiple users
  const users = editor.userLookup.fetchUsers(['user-1', 'user-2']);

  // Handle individual user promises
  users['user-1'].then(user => {
    console.log('User 1 name:', user.name);
  });
});

For comprehensive documentation and examples, see: User Lookup API.

New list_max_depth option to limit list indentation

TinyMCE 8.0.0 introduced a new list_max_depth option that allows configuration of the maximum indent depth for list items. This setting accepts a non-negative integer value, where 0 permits list creation without any indentation, and higher values set the maximum allowable indent depth. Negative values are invalid and will trigger an error. When the option is not set, list behavior remains unchanged.

The setting applies only to list indentation and does not affect paragraph indentation. Existing content is not altered, and pasted lists that exceed the maximum indent depth will retain their structure but cannot be further indented. When multiple list items are selected, only items eligible for indentation will be indented individually—validation is applied per item, not across the full selection.

Outdent functionality remains unaffected and always available. The state of indent and outdent controls reflects the current indentation capabilities based on this setting.

Example configuration

The following example shows a basic configuration for the list_max_depth option, which limits list indentation to a maximum of 2 levels:

tinymce.init({
  selector: "textarea",
  plugins: [
    "advlist", "anchor", "autolink", "charmap", "code", "fullscreen",
    "help", "image", "insertdatetime", "link", "lists", "media",
    "preview", "searchreplace", "table", "visualblocks",
  ],
  list_max_depth: 2,
  toolbar: "undo redo | styles | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
});

For more information, see: User formatting - List max depth.

Changes

TinyMCE 8.0.0 includes the following changes:

Enhanced license key system with T8LK prefix

The license key system in TinyMCE 8 has been enhanced to provide improved subscription access control and streamlined renewal processes. This change primarily affects self-hosted deployments, as cloud users (Tiny Cloud) do not require a license key.

  • If you use Tiny Cloud, no license key is required - your cloud subscription automatically includes the commercial license.

  • For self-hosted deployments, all commercial license keys must use the new T8LK: prefix format.

  • Existing TinyMCE 7 license keys cannot be made compatible with TinyMCE 8 by adding the T8LK prefix.

Key changes for self-hosted deployments:

  • New T8LK: prefix requirement for all commercial license keys.

  • No server communication or "phone home" checks required

  • Support for both date-based and version-locked keys

  • Streamlined hybrid deployment configuration

  • Improved support for air-gapped and offline environments

Cloud Deployments:

  • When using Tiny Cloud, only an API key is required - no license key needed

  • Your cloud subscription automatically includes the commercial license

Self-hosted Deployments:

  • Commercial use: Contact your account manager or visit Tiny Cloud Account to obtain a T8LK-prefixed license key

  • GPL use: Set license_key: 'gpl' (case insensitive)

  • Open source projects using premium features: Use the combined format license_key: 'GPL+T8LK:…​'

Required License Key Manager Setup for Self-hosted Commercial Deployments:

For commercial license keys to function, the license key manager must be properly configured. The editor will not work without this setup.

  • Standalone hosting (e.g., in a /public folder): The licensekeymanager folder is required to be located within the plugins folder alongside all other plugins.

  • Bundled applications: The licensekeymanager/index.js file is required to be imported, otherwise the editor will result in a disabled state.

Example: Importing the License Key Manager in a bundled application
import 'tinymce/plugins/licensekeymanager';

Upgrading from TinyMCE 7

  • Cloud Users (Tiny Cloud): No license key changes needed - simply update your TinyMCE version.

  • Self-hosted Users: Contact your account manager to obtain a new T8LK-prefixed license key.

For more information on the new license key system, see: License Key.

DomParser no longer tries to fix some nodes when parsed with a context

Previously, the DomParser would attempt to fix invalid HTML structures when parsing with a context, such as when inserting content into a specific element. This behavior lead to unexpected results, especially when the structure was not valid in the context of the parent element.

In TinyMCE 8.0.0, the DomParser has been updated to no longer attempt to fix invalid nodes when parsing with a context. Instead, it will validate the nodes and only insert them if they are valid in the context of their parent element. If the nodes are invalid, they will not be inserted.

Removed

TinyMCE 8.0.0 also includes the following removal:

Removed undocumented documentBaseUrl property from Editor instances. documentBaseURI is the supported property now.

An undocumented documentBaseUrl property was previously accessible on Editor instances. This property was not part of the supported public API and could lead to confusion or inconsistent usage across implementations.

To improve API clarity and maintain a well-defined interface, the documentBaseUrl property has been removed. Integrators should use the officially supported documentBaseURI property to access the base URI of the document.

Bug fixes

TinyMCE 8.0.0 also includes the following bug fixes:

Tabbing when a figure was selected didn’t move the selection to the figcaption correctly.

Previously, the tab key did not correctly handle nested components. Specifically, when a CET (Content Editable True) element was placed inside a CEF (Content Editable False) element such as a figcaption, focus behavior was unintuitive. This led to inconsistent and confusing keyboard navigation when interacting with editable nested elements like a figcaption.

TinyMCE 8.0.0 addresses this issue by ensuring that pressing the tab key correctly moves focus to the CET element when it is nested within a CEF element. This ensures smooth and predictable keyboard navigation for nested editable elements such as a figcaption.

Cutting a whole HTML element would add an empty paragraph.

Previously, an issue was identified where cutting an entire block element, such as a div or p HTML element, resulted in the block being replaced by an empty paragraph. This behavior only occurred for blocks not contained within tables and led to inconsistent outcomes where cutting content inside tables behaved differently from outside. Additionally, the behavior diverged from that of the backspace delete operation.

TinyMCE 8.0.0 resolves this issue by unifying the behavior for content both inside and outside tables. The updated implementation aligns cutting behavior with that of the backspace delete operation, ensuring a more consistent and predictable editing experience.

Codesample dialog would not disable spellcheck as expected.

Previously, the browser_spellcheck setting did not correctly disable spellchecking in the Codesample dialog’s text area. This was because the setting was applied to the dialog’s text area rather than the main editor instance.

In addition, the advcode and code plugin dialogs did not explicitly disable browser-based spellchecking. As a result, red underlines appeared unnecessarily in code content, regardless of the browser_spellcheck setting.

Attempting to add a newline directly after a block element such as an image would cause an error.

In previous versions of TinyMCE, the content selection logic incorrectly assumed that the target element resided within a text node. In reality, it was placed directly inside a <div> element. This mismatch led to a scenario where the selected content was mistakenly reinserted into itself, resulting in errors when pressing Enter immediately after an image and introducing a risk of data loss.

This issue has been resolved in TinyMCE 8.0.0. The selection logic has been updated to correctly identify and handle content within <div> elements such that it does not try to insert content within itself. As a result, pressing Enter after an image inside a <div> element no longer triggers errors or causes unintended behavior.

In inline mode, pressing the back button dismissed the context toolbar and moved focus from the selected image to the editor.

In inline mode, the context form toolbar incorrectly shifted focus from the selected image to the editor container. As a result, the plugin which relies on the current selection to apply changes was unable to apply attributes like alt text to the correct image.

TinyMCE 8.0.0 resolves this by ensuring that the focus is preserved properly, ensuring that the plugin now applies changes such as alt text to the correct image in inline mode.

Toolbar drawer now closes when the editor loses focus.

In previous versions of TinyMCE, the floating toolbar remained visible even when the editor lost focus. This behavior introduced potential accessibility concerns, as the toolbar was not properly associated with the editor it controlled, potentially causing confusion for users.

In TinyMCE 8.0.0, the toolbar now automatically closes when the editor loses focus. This ensures it is only displayed within the appropriate context, enhancing accessibility and improving the overall user experience.

Arrow key navigation between buttons was blocked when a button is hovered by the mouse.

In previous versions of TinyMCE, if a button was hovered by the mouse while using arrow keys for navigation, focus would return to the previously focused element. This caused the selection to become stuck on the button with the mouseover event.

TinyMCE 8.0.0 resolves this issue by preventing the mouseover event from being triggered again during arrow key navigation, ensuring a seamless user experience when navigating with arrow keys.

It was not possible to navigate out of a figcaption using the left and right arrow keys in Firefox.

Prior to TinyMCE 8.0.0, Firefox exhibited an issue where pressing the left or right arrow keys would not allow users to exit the image figcaption element. This behavior was inconsistent with other major browsers such as Google Chrome and Safari, where the arrow keys functioned as expected and allowed seamless navigation out of the figcaption.

With TinyMCE 8.0.0, this issue has been resolved. Users can now exit the figcaption using the left/right arrow keys in Firefox, aligning its behavior with that of other browsers. This update ensures a more consistent user experience.

Decorative images would lose their decorative status when the alt subtoolbar was closed when using the apply button.

Previously, an issue was identified where closing the alt subtoolbar using the Apply button would inadvertently remove the decorative status from an image that was already marked as decorative. This occurred because the onSetup API disabled the input group, leading the Apply logic to incorrectly interpret the image as non-decorative.

This issue has been resolved in TinyMCE 8.0.0. The onSetup and Apply behavior has been aligned to consistently evaluate the input group, ensuring the decorative status is preserved as expected.

The HTML schema did not treat colgroup or col elements as block elements.

In previous versions of TinyMCE, whitespace between <colgroup> and <col> tags was not removed by TinyMCE’s HTML schema. This behavior caused the editor to preserve unnecessary whitespace characters in the table markup.

This issue has been resolved in 8.0.0. Both colgroup and col elements are now treated as block-level elements, ensuring that extraneous whitespace is stripped from these areas. As a result, the editor now produces cleaner and more concise table markup.

Deleting a whole element would sometimes modify nearby content

Previously, deleting a complete HTML element using the "Source Code" editor either by cutting Ctrl+X or Cmd+X, backspacing, or pressing delete could inadvertently modify surrounding content. For example, removing a <div> element that precedes a <p> tag could cause the <p> to be transformed into a <div>, resulting in unintended structural changes.

This issue has been resolved in TinyMCE 8.0.0 by improving how element deletions are handled within the editor’s DOM logic. Cutting or deleting a selected element now preserves the integrity and tag type of adjacent elements. Users can expect consistent and predictable editing behavior when modifying HTML source content.

Strikethrough format could be added outside font size format, which renders incorrectly in some browsers.

Previously, there was an issue where combining strikethrough (s element) and font size formatting could lead to incorrect rendering in some browsers, particularly Chrome. This occurred when the s (strikethrough) element was placed outside a font size span, causing the strikethrough line to render incorrectly.

The fix ensures that the s element is now properly nested inside the font size element, improving visual consistency across browsers.

Long tooltips could overflow narrow browser windows

Previously, long tooltips could overflow narrow browser windows, causing the tooltip text to be partially cut off and unreadable. This issue was most noticeable with the …​ ellipsis toolbar for the "reveal or hide additional toolbar options" button, where the tooltip text would not fit within the narrow viewport.

In TinyMCE 8.0.0, the tooltip behavior has been improved to ensure that long tooltips are properly positioned and wrapped within narrow browser windows. This prevents overflow and ensures that the full tooltip text is visible, even in smaller viewports.

Tab to create a new row in tables with a non-editable final row would freeze the editor.

Previously, when tabbing into a non-editable final row of a table, the editor failed to recognize that the row was read-only and instead duplicated it. This resulted in an attempt to place the cursor in the duplicated row, which again could not be edited. The process would repeat indefinitely, creating a loop that ultimately froze the editor.

TinyMCE 8.0.0 resolves this issue by detecting when the final row of a table is read-only and preventing the insertion of a new row in such cases. This ensures stable behavior when navigating through tables using the Tab key.

Nested font sizes no longer cause excessive line spacing

Previously, applying different font sizes to nested elements could result in inconsistent and overly large line heights. This affected users by introducing visual clutter and making text blocks appear misaligned or difficult to read.

TinyMCE 8.0.0 introduces a fix that ensures line heights are calculated based on the font size visible in the new line, rather than inheriting line-height from parent element. This means that when different font sizes are applied within the same content, the line heights will be consistent and proportional to the visible font size.

Improved structure retention when inserting invalid HTML fragments

Previously, when inserting HTML fragments through APIs or pasting, the parser would attempt to fix invalid structures, which could lead to the loss of valid structures like tables and lists. This behavior was inconsistent and could result in unexpected outcomes when handling complex HTML content.

In TinyMCE 8.0.0, the parser has been updated to improve the retention of structures when inserting HTML fragments. It now validates these fragments in the context of their parent structure, ensuring that valid structures are preserved even if the fragment contains invalid HTML resulting in more predictable and desirable outcomes when handling complex HTML content.

New list item was not inserted correctly when existing list item had a block element inside

TinyMCE 8.0.0 resolves an issue affecting list management when parent list items contain block-level formatting. Previously, when a list item containing a sub-list was formatted as a block element (such as <p> or <div>), pressing Enter at the end of that item would incorrectly position the new list item alongside the sub-list items instead of as a sibling of the parent item.

TinyMCE 8.0.0 addresses this by ensuring that when a user presses Enter at the end of a list item that contains block-level formatting, the new list item is correctly inserted as a sibling of the parent list item, rather than being placed incorrectly alongside the sub-list items.

Deprecated

TinyMCE 8.0.0 includes the following deprecations:

Java application server-based server components have been deprecated

TinyMCE 8.0.0 deprecates the Java application server-based deployment method for self-hosted services. Docker containers are now the only supported deployment method for self-hosted services. The Java .war files (ephox-spelling.war, ephox-image-proxy.war, ephox-hyperlinking.war) will be removed in a future release.

For information about setting up containerized server-side components using Docker containers, see: Introduction and initial setup for containerized server-side services from the premium self-hosted bundles

The ToggleToolbarDrawer command’s skipFocus option has been deprecated

The ToggleToolbarDrawer command previously accepted a non-standard skipFocus option to prevent the editor from receiving focus when the command was executed. This behavior differed from other editor commands, which use the generic skip_focus option for the same purpose. As a result, the inconsistency lead to confusion when implementing or maintaining command logic.

To resolve this, support for the standard skip_focus option has been added to the ToggleToolbarDrawer command. The skipFocus option is now deprecated in TinyMCE 8.0.0 and will be removed in a future release.

Before deprecation using the skipFocus option
editor.execCommand('ToggleToolbarDrawer', false, { skipFocus: true });
After deprecation using the skip_focus option
editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true });

This change improves consistency across commands and aligns with expected usage patterns in TinyMCE 8.0.0.

Deprecated fire() method for event handling

The fire() method was originally deprecated in TinyMCE 6 in favor of the dispatch() method for event handling, but was never removed from the codebase. TinyMCE 8.0.0 now displays a deprecation warning when the fire() method is used, serving as a final notice before its removal in TinyMCE 9.

This long-overdue cleanup aligns the API with modern event handling conventions and removes confusion around method naming. Integrators should migrate to the dispatch() method to ensure compatibility with future releases.

Deprecated approach for dispatching custom events
// Deprecated in TinyMCE 8, will be removed in 9
editor.fire('someEvent');
New approach for dispatching custom events
// Use dispatch() instead
editor.dispatch('someEvent');

For more information on the dispatch() method, see: EventDispatcher.

Deprecated editor.selection.setContent API

The editor.selection.setContent method has been deprecated in TinyMCE 8.0.0. This low-level API was never intended for external use and does not guarantee consistent behavior when inserting complex content structures, such as lists. Integrators are advised to use the supported editor.insertContent method for reliable content insertion.

This deprecation helps reduce confusion and aligns content insertion with TinyMCE’s supported APIs.