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 |
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
-
Update language-related configuration in
tinymce.init
:language: 'en-US', spellchecker_language: 'en-US'
-
Update
content_langs
configuration:content_langs: [ { title: 'English (US)', code: 'en-US' }, { title: 'Portuguese (Brazil)', code: 'pt-BR' } ]
-
Rename any custom dictionary files to use hyphens (e.g.,
'en-GB.txt'
instead of'en_GB.txt'
). -
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
withrole="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 likearia-label
,aria-labelledby
, ortitle
. -
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 newa11ychecker_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.
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;
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.
skip_focus
option usage commandeditor.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.
|
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:
Self-hosted Deployments:
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.
Example: Importing the License Key Manager in a bundled application
|
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
Docker container services
-
Enhanced Media Embed and Link Checker service, see: Deploy the TinyMCE hyperlinking server-side component using Docker.
-
Image Editing and Export image proxy service, see: Deploy the TinyMCE image proxy server-side component using Docker.
-
Spell Checker service, see: Deploy the TinyMCE spelling service server-side component using Docker.
-
Export to PDF service, see: Deploy the TinyMCE Export to PDF service server-side component using Docker.
-
Import from Word and Export to Word services, see: Deploy the TinyMCE Import from Word and Export to Word service server-side component using Docker.
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.
skipFocus
optioneditor.execCommand('ToggleToolbarDrawer', false, { skipFocus: true });
skip_focus
optioneditor.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 in TinyMCE 8, will be removed in 9
editor.fire('someEvent');
// 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.