This lays out what remains to be done after #3231364: Add CKEditor 5 module to Drupal core lands in Drupal core.

This plan was originally taken from the IS at #2966864: Add optional support for CKEditor 5 in D9 so we can remove CKE 4 from Drupal 10, and after that from #3201824: Roadmap to core.

Roadmap to Stable

  1. ✅ Ensure that sites can update from using CKE4 to CKE5 safely when using no contributed CKEditor modules
    1. Currently none
  2. ✅ Ensure contrib modules can do everything: translations, automatic upgrade path from CKE4..
    1. Currently none
  3. ✅ Ensure CKE5 equivalent plugins of CKE4 generate/support equivalent markup
    1. Currently none
  4. ✅ Ensure CKE5 functionality matches that of Drupal core's CKE4:
    1. Currently none
  5. ✅ Documentation gates:
    1. Currently none
  6. ✅ Theming CKEditor 5
    1. Currently none
  7. ✅ Accessibility
    1. Currently none
  8. ✅ Test coverage, reliability and maintainability matching or exceeding CKEditor 4's:
    1. Currently none
  9. ✅ Low-hanging fruit major UX improvements over CKEditor 4:
    1. Currently none
  10. Superior configuration UX:
    1. Currently none.
  11. ✅ Performance
    1. Currently none.
  12. #3307186: Mark CKEditor 5 stable

Roadmap after Stable

  1. Upstream Drupal improvements that would simplify or improve CKEditor 5:
    1. #3226673: API addition: \Drupal\editor\Plugin\EditorPluginInterface::getDefaultSettings() should accept old Editor + Format to generate smart defaults
    2. #3231322: Fix a @todo: move a form alteration to the CKEditor 5 plugin's subform definition
    3. #3231341: Deprecate EditorLinkDialog, EditorImageDialog and EditorMediaDialog in Drupal 10.1 for removal in Drupal 11
    4. #3231342: [PP-2] Introduce ConfigEntityForm to standardize use of validation constraints for config entities
    5. #3231347: Add Editor::setFilterformat()
    6. #3231354: [PP-1] [META] Discuss: merge the Editor config entity into the FilterFormat config entity
    7. #3246260: Simplify CKEditor5ImageController once #2940383 lands
    8. #3263668: Re-enable inline form errors in assessActiveTextEditorAfterBuild function → blocked on Vertical Tabs bug: #2911932: Correct vertical tab does not focus on form validation
    9. #3269101: [PP-1] Ensure enabled CKEditor 5 plugins remain available by calculating corresponding dependencies → blocked on Text Editor module bug: #2950795: CKEditor 5 plugin module dependency not added to text format configuration
  2. Obsoleteness of upgrade path in Drupal 11:
    1. #3239012: [11.x] Remove the CKEditor 4 upgrade path
  3. Performance:
    1. #3224261: [PP-2] Front-end performance: concatenate CKEditor 5 JS assets for every unique configuration
  4. Media improvements
    1. #3196593: Ease the transition to Media: save image uploads in CKEditor 5 as media entities when media is enabled? (or module specific solution if core issue won't land)
    2. #3073901: Determine an upgrade path from CKEditor image button to media library (or module specific solution if core issue won't land)
  5. Low-hanging fruit major UX improvements over CKEditor 4:
    1. #3227354: Add support for ckeditor5-autoformat
    2. #3274635: [upstream] Use CKEditor 5's native <ol type> and <ul type> UX
  6. Superior configuration UX:
    1. #3225033: Whenever "Enable image uploads" is enabled for a text editor, the editor_file_reference filter should be enabled
    2. #3227948: Discourage FilterInterface::TYPE_MARKUP_LANGUAGE filters from begin enabled when using CKEditor 5
  7. Maintainability:
    1. #3248432: [drupalImage] Split DrupalImageEditing into multiple plugins
    2. #3273746: Move media-embed-error class styling from core themes to CKEditor 5
  8. Accessibility:
    1. #3306209: Add outline to buttons with active state.

Completed

This section mimics the structure of the above sections.

💯 Roadmap to Alpha

  1. ✅ Create the ckeditor5 module
  2. ✅ Create an @Editor PHP plugin with the ID ckeditor5.
  3. ✅ Create a Drupal.editors JS plugin with the ID ckeditor5.
  4. ✅ Getting CKE5 (CKEditor 5) to load at all on the /node/add/article form.
  5. #3201820: Manually test that CKE 5 can be used in off-canvas
  6. ✅ Enable a Drupal + CKE5 ecosystem
    1. #3196178: Provide test module to verify contrib can extend CKEditor5
    2. #3200008: Validation and editor settings
  7. ✅ A CKE5 configuration UI
    1. #3198297: Toolbar UI for selecting and sorting buttons
  8. ✅ Ensure Quick Edit integration works
    1. #3201648: Add test coverage for Quick Edit integration
    2. #3205090: Field html not restored when cancelling Quick Edit
  9. ✅ Evaluate CK4 plugins and match features
    1. #3194650: Support media elements and browse media library
    2. #3194111: Support inline image upload
    3. #3201646: Add support for image caption (<img data-caption>)
  10. #3201821: Add JavaScript test coverage for CKE 5
  11. #3206686: IE11 warning for CKE5 in Drupal 9

💯 Roadmap to Beta

  1. #3215506: Plugins should be enableable based on toolbar configuration
  2. ✅ Ensure filter_html's HTML restrictions are respected inside CKE5 — tackled in #3201637: Figure out how to prevent data loss during upgrade/migration path
  3. #3206687: Toolbar UI accessibility review
  4. #3201641: Improve the HTML filter configuration UX
  5. Enable translation features for CKEditor 5
    1. #3202664: CKEditor 5's UI language should match Drupal's interface translation

Roadmap to Stable

  1. Ensure that sites can update from using CKE4 to CKE5 safely when using no contributed CKEditor modules
    1. #3291744: Ensure Editor config entities using CKEditor 4 only store plugins settings for actually enabled plugins
    2. Ensure that Arbitrary HTML is not lost: #3216021: Automatically use CKE5's General HTML Support feature on text formats without any TYPE_HTML_RESTRICTOR filter + add `sourceEditing` button
    3. #3201637: Figure out how to prevent data loss during upgrade/migration path
    4. #3216015: Generate CKEditor 5 configuration based on pre-existing text format configuration
    5. #3245079: Automatic upgrade path always enables all <h*> tags when only >=1 was enabled before
    6. #3245320: Automatic upgrade path always disables image uploads — in the UI
    7. #3228464: API for contrib projects to load CKEditor translations
    8. #3227822: [GHS] Ensure GHS works with our custom plugins, to allow adding additional attributes
    9. #3268174: Bug in CKE 4 → 5 upgrade path "format" does not always map to "heading", it could map to "codeBlock" too, or both, or neither
    10. #3269868: [drupalImage] Some Image attributes are lost in edge cases where image upcasts into inline image
    11. #3273527: Upgrade path never configures the ckeditor5_heading plugin to allow <h1>
    12. #3273312: Upgrading from CKEditor 4 for a text format that has FilterInterface::TYPE_MARKUP_LANGUAGE filters enabled
    13. #3268318: [drupalMedia] <a> with GHS allowed attributes downcast wraps data-caption with <a>
    14. #3230230: Enable table captions; override CKE5's default downcast to generate <table><caption></table> instead of <figure><table><figcaption></figure>
    15. #3268311: [upstream] [drupalMedia] GHS-enabled markup in data-caption crashes CKEditor 5
    16. #3272516: Deprecate FilterInterface::getHTMLRestrictions()' forbidden_tags functionality
    17. #3273510: CKEditor 5 crash when multiple alignment buttons are activated due to duplicate configuration thanks to #3259593: Alignment being available as separate buttons AND in dropdown is confusing
    18. #3247634: [upstream] [drupalImage] Unlinking linked inline images while GHS is enabled: wrapping <a> is impossible to remove
    19. #3271418: [upstream] [drupalMedia] Linked media wrapped with <div> doesn't upcast correctly
    20. #3274651: Impossible to enable <ol type> or <ul type> with GHS: switch to List's successor, DocumentList
    21. #3276217: [drupalMedia] add tests to confirm GHS attributes are retained in linked media
    22. #3273983: Do not assume that plugin supporting <tag attr> also supports <tag> in SourceEditingRedundantTags and upgrade path
    23. #3290810: Remove updates added prior to 9.4.0 (9.4.4 for ckeditor) and add 9.4.0 database dumps
    24. #3268306: [GHS] Custom/unofficial HTML tags not retained: <drupal-media>, <drupal-entity>, <foobar>
  2. Ensure contrib modules can do everything: translations, automatic upgrade path from CKE4 …
    1. #3226335: Follow-up for #3216015: allow contrib & custom Drupal modules providing CKEditor 4 plugins to specify their CKEditor 5 equivalents + settings to be migrated
    2. #3228778: Drupal-specific CKEditor 5 plugins should be able to use Drupal's JS translation API: Drupal.t()
    3. #3245723: Follow-up for #3201637: omitting PrimitiveTypeConstraint violations for filter settings is implemented too broadly
    4. #3245807: DX: allow contrib modules to subclass \Drupal\Tests\ckeditor5\Kernel\ValidatorsTest
    5. #3274278: Migrate "codetag" contrib CKEditor 4 plugin to built-in equivalent in core's CKEditor 5
    6. #3273325: CKE5 and contrib: better "next action" description on upgrade path messages
  3. Ensure CKE5 equivalent plugins of CKE4 generate/support equivalent markup: #3222801: [META] Ensure CKE5 equivalent plugins of CKE4 generate/support equivalent markup
    1. Infra: #3215466: Attribute values not accounted for in CKEditor5PluginManager::getProvidedElements
    2. Infra: #3207660: Allow using a subset of the tags supported by the enabled CKEditor 5 plugins
    3. #3222851: <cite>
    4. #3222847: <img width height>
    5. #3222838: Configure basicStyles.Italic to output <em> instead of <i>
    6. #3222842: <a hreflang> + <blockquote cite>
    7. #3222847: <img width height>
    8. #3220293: Make all supported heading types visible in the UI
    9. #3222840: <ol start>
    10. #3222852: <dl> <dt> <dd> by introducing "Manually editable HTML tags" configuration on Source Editing
    11. #3224256: <h* id> (or more generically: <$block id>)
    12. #3222808: Follow-up for #3201646: markup in image captions is lost
    13. #3228346: Follow-up for #3222852: revert ineditable attributes (<blockquote cite> and <a hreflang>) now that Source Editing plugin can handle arbitrary elements & attributes
    14. #3246168: Images are not linkable through UI; already linked images are unlinked (data loss!)
    15. #3246169: Embedded media are not linkable through UI; already linked embedded media are unlinked (data loss!)
    16. #3259493: [GHS] Unable to limit attribute values: ::allowedElementsStringToHtmlSupportConfig() does not generate configuration that CKEditor 5 expects
    17. #3246365: [drupalMedia] Show the Image Media's default alt text that is being overridden
    18. #3260853: [GHS] Partial wildcard attributes (<foo data-*>, <foo *-bar-*>, <foo *-bar>) and attribute values (<h2 id="jump-*">) not yet supported
    19. #3260869: Resolve mismatch between <$block> interpretation by CKEditor 5 and Drupal
    20. #3268860: Elements wrapping <drupal-media> are not retained
    21. #3268307: $block wildcard resolves into a superset of the actual $block tags
  4. Ensure CKE5 functionality matches that of Drupal core's CKE4:
    1. #3201646: Add support for image caption (<img data-caption>)
    2. #3211050: Add "Alignment" plugin
    3. #3211125: Add "Block Indentation" plugin, but only allow list indentation
    4. #3211282: Add plugins which are provided as a part of essential plugin: Undo/Redo
    5. #3211610: Add "Horizontal line" plugin.
    6. #3227871: Add ckeditor5-paste-from-office to allow pasting from Microsoft Office & Google Docs
    7. #3227875: Add ckeditor5-remove-format to allow removing formatting from pasted content
    8. #3227890: Add ckeditor5-special-characters to allow inserting special characters for users that do not know the native picker
    9. #3247246: Attribute value encoding not compatible with Xss::filter()
    10. #3248448: Dialog loading text is unstyled
    11. #3260554: [drupalMedia] Support alignment on <drupal-media>
    12. #3246380: [drupalMedia] Media previews do not update after alt text was modified
    13. #3224652: [drupalImage] Add ckeditor5-image's imageresize plugin to allow image resizing
    14. #3246385: [drupalMedia] Support captions on <drupal-media>
    15. #3264775: [drupalMedia] Toolbar should be visible when element inside <drupalMedia> is focused
    16. #3264727: [drupalMedia|drupalImage] Allow removing data-align in the UI, and making an image inline
    17. #3245950: [upstream] <script> tag support in GHS
    18. #3256566: [upstream] <style> tag support in GHS
    19. #3263384: Add ckeditor5-code-block package and CodeBlock plugin
    20. #3245720: [drupalMedia] Support choosing a view mode for <drupal-media>
    21. #3276974: [drupalMedia] Media View Modes don't work if alignment not enabled
    22. #3269657: [drupalMedia] The CKEditor 4 → 5 upgrade path for the media_embed filter should not forcefully allow the `data-view-mode` attribute on `<drupal-media>`
    23. #3274937: Get CKEditor 5 to work in (modal) dialogs
    24. #3222797: Upgrade path from CKEditor 4's StylesCombo to CKEditor 5's Style
    25. #3301631: Regression with CKEditor 35.0.1 and modal dialogs
    26. #3294908: Configuration overlaps between Styles and other CKE5 plugins
    27. #3222756: Allow using images from external source
  5. ✅ Documentation gates:
    1. #3205654: ckeditor5_hook_help()
    2. #3201186: Create ckeditor5.api.php (the core equivalent of README.md) + CKEditor5PluginDefinition::toArray()
    3. #3243850: hook_ckeditor5_plugin_info_alter()'s example sets ['drupal']['config'], but that's not one of the documented definition properties
    4. #3248430: Improve Drupal.ckeditor5 documentation
    5. #3248425: Ensure that all classes and functions in Drupal-specific CKEditor 5 plugins are documented
  6. Theming CKEditor 5
    1. #3202666: Follow-up for #3198297 Improve admin CSS DX
    2. #3194084: Support functionality equivalent to ckeditor_stylesheets
  7. Accessibility
    1. #1872206: Improve CKEditor toolbar configuration accessibility
    2. #3218252: Toolbar configuration fieldset aria cleanup
    3. #3218260: Safari focus outline on buttons leaves artifacts after blur
    4. #3207451: Toolbar UI Button size accessibility
    5. #3238257: Fragment link pointing to <textarea> should be redirected to CKEditor 5 instance when CKEditor 5 replaced that textarea
    6. #3245735: Follow-up for #3222852: validation errors are not associated with the correct form element
    7. #3258030: Text fields using CKEditor 5 do not get visual error indicator
    8. #3258668: Extraneous closing parentheses and curly brace in visually-hidden button description text
    9. #3231321: Improve keyboard accessibility in a particular edge case
    10. #3261942: Compatibility issues with inline form errors
    11. #3218297: Voiceover + Safari reads aria-describedby twice when focusing toolbar button
    12. #3248440: [drupalMedia] Media embed attributes are rendered in container div in editing view
    13. #3239423: Toolbar UI accessibility review: round 2
    14. #3270112: Excessive aria-live announcing from ckeditor5-admin-help-message live region
    15. #3270110: Toolbar config items missing "press arrow to do {x}" instructions for screenreaders
    16. #3270108: Editor does not load when using Edge + WHCM
    17. #3222757: [drupalImage] Make image alt text required or strongly encouraged
    18. #3306216: Contrast perception issues with icons including low-opacity fills
    19. #3283800: [upstream] CKE5 dropdowns keyboard support
    20. #3283801: [upstream] CKE5 dropdown focus handling is not fully accessible
    21. #3283803: [upstream] CKE5 toggleable toolbar items not enough contrast
    22. #3283804: [upstream] CKE5 dropdown screenreader support
    23. #3283802: Update CKEditor 5 to 35.3.2 to fix voice control/IME on some platforms
  8. Test coverage, reliability and maintainability matching or exceeding CKEditor 4's:
    1. #3206522: Add FunctionalJavascript test coverage for media library
    2. #3201641: Improve the HTML filter configuration UX
    3. #3228920: Improve internal consistency: consistent variable names and return type syntax
    4. #3231327: Plugin definition DX: validate ckeditor5.drupal.elements items
    5. #3231362: Refactor ImageUpload's ::validateImageUploadSettings() into the proper validate and submit methods
    6. #3228505: Plugin definition DX: automatically check for plugin definitions whether their ::getDefaultSettings() matches the config schema
    7. #3243867: ckeditor5_module_implements_alter() looks like it has incorrect logic
    8. #3245400: Add an @throws PHPDoc everywhere exceptions are thrown
    9. #3246280: Defense in depth: add anti-CSRF token to this module's routes
    10. #3246521: Make plugin.manager.ckeditor4to5upgrade.plugin a private service
    11. #3246524: Make more (all?) classes @internal
    12. #3247711: Simplify and accelerate builds: update our use of the CKEditor 5 DLL manifest
    13. #3248188: Plugin definition DX: validate drupal.conditions
    14. #3248423: Decide how CKEditor 5-provided types should be referenced
    15. #3259174: Add missing CKE5 SmartDefaultSettings test coverage (wildcard tag with unsupported attribute)
    16. #3228334: Refactor HTMLRestrictionsUtilities to a HtmlRestrictions value object
    17. #3206523: Add FunctionalJavascript test coverage for image upload
    18. #3267721: Add DrupalCI step for ensuring that CKEditor 5 build files are build correctly
    19. #3231337: [drupalMedia] Remove manual dataDowncast from DrupalMediaEditing
    20. #3231328: SmartDefaultSettings should select the CKE5 plugin that minimizes creation of HTML restriction supersets
    21. #3228580: Follow-up for #3222852: additional test coverage for real-time validation race conditions
    22. #3265626: Changes to "Manually editable HTML tags" lost if form is submitted without triggering AJAX
    23. #3231334: Global attributes (<* lang> and <* dir="ltr rtl">): validation + support (fix data loss)
    24. #3229078: Unit tests for all @CKEditor5Plugin plugin classes
    25. #3247683: Disable CKEditor 5's automatic link decorators (in Drupal filters should be used instead)
    26. #3268983: [regression] FilterHtml throws Unsupported operand types error when * used in tag attribute
  9. Low-hanging fruit major UX improvements over CKEditor 4:
    1. #3261599: Use CKEditor 5's native <ol start> support (and also support <ol reversed>)
  10. Superior configuration UX:
    1. #3201641: Improve the HTML filter configuration UX
    2. #3216015: Generate CKEditor 5 configuration based on pre-existing text format configuration
    3. #3226694: Follow-up for #3216015: refactor SmartDefaultSettings to return messages rather than sending them
    4. #3248177: Language toolbar item cannot be removed from the toolbar
    5. #3259443: Plugin settings do not appear when a configurable plugin is added AFTER removing all buttons
    6. #3261585: Remove IE11 warning for CKEditor 5 in Drupal 10, since Drupal 10 does not support IE anyway
    7. #3260857: Expand SourceEditingRedundantTagsConstraintValidator to also check attributes and attribute values
    8. #3261943: Confusing behavior after pressing "Apply changes to allowed tags" with invalid value
    9. #3228691: Restrict allowed additional attributes to prevent self XSS
    10. #3245967: Messages upon switching to CKEditor 5 are overwhelming
  11. Performance
    1. #3248469: Research if the CKE off-canvas CSS reset could be optimized
    2. #3264512: Enable aggregation for CKEditor 5 assets
    3. #3260032: CKEditor 5 adds ie11.user.warnings library to every page, triggering a FOUC even for anonymous users
  12. ✅ Moving things into core that can only happen once it is in core:
    1. #3231324: Use core icons where possible after moving to core
    2. #3231325: Use pre-existing filter format config from YAML instead of duplicating it in PHP

After stable:

  1. Upstream Drupal improvements that would simplify or improve CKEditor 5:
    1. #3230829: editor_form_filter_format_form_alter() does not remove "editor_plugin" from form state when needed
  2. Maintainability:
  3. #3275237: Don't convert, instead use response.entity_type in DrupalImageUploadEditing

Comments

Wim Leers created an issue. See original summary.

wim leers’s picture

Issue summary: View changes

Added:

  1. Obsoleteness of upgrade path in Drupal 11:
    1. #3239012: [11.x] Remove the CKEditor 4 upgrade path
wim leers’s picture

Issue summary: View changes

Documentation gates are complete as of yesterday.

wim leers’s picture

Issue summary: View changes

Moving things into core that can only happen once it is in core:

is done.

Added #3228505: Plugin definition DX: automatically check for plugin definitions whether their ::getDefaultSettings() matches the config schema to Test coverage, reliability and maintainability matching or exceeding CKEditor 4's.

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

Long overdue for another roadmap update. Many dozens of issues fixed since then. Not focusing on what's been done, but on the work we identified.

Edge cases:

Added:

  1. Ensure that sites can update from using CKE4 to CKE5 safely when using no contributed CKEditor modules
  1. Ensure contrib modules can do everything: translations, automatic upgrade path from CKE4 …
  1. Ensure CKE5 equivalent plugins of CKE4 generate/support equivalent markup
  1. Ensure CKE5 functionality matches that of Drupal core's CKE4:
  1. Documentation gates
  1. Accessibility
  1. Test coverage, reliability and maintainability matching or exceeding CKEditor 4's:
  1. Superior configuration UX:

Post-stable, Upstream improvements that would simplify or improve CKEditor 5:

  1. #3246260: Simplify CKEditor5ImageController once #2940383 lands
wim leers’s picture

Component: ckeditor.module » ckeditor5.module
andypost’s picture

it needs some fixes for PHP 8.1 https://www.drupal.org/pift-ci-job/2235570

larowlan’s picture

Can you open a critical for that @andypost

andypost’s picture

wim leers’s picture

Issue summary: View changes

#3249240: HTMLRestrictionsUtilities:: providedElementsAttributes() causes deprecations on PHP 8.1 has been fixed since.

#3224261: [PP-2] Front-end performance: concatenate CKEditor 5 JS assets for every unique configuration was not in here yet, and IMHO is pretty damn important! Added that to Ensure CKE5 functionality matches that of Drupal core's CKE4:.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

mglaman’s picture

Maybe I missed it, so apologies if I did, but is there an issue to track making CKEditor5 the default for Drupal 10 in the Standard installation, or is that not the plan?

wim leers’s picture

#15: there's no separate issue for that. ckeditor.module will be removed from Drupal 10. As part of removing that module, we'll also need to change the Standard install profile to use ckeditor5.module instead.

I'd swear such an issue already existed, but I cannot find it right now. Maybe @xjm knows? 🤞

wim leers’s picture

Issue summary: View changes

Two new stable-blockers discovered:

  1. Added #3256566: [upstream] <style> tag support in GHS to Ensure CKE5 functionality matches that of Drupal core's CKE4.
  2. Added #3258030: Text fields using CKEditor 5 do not get visual error indicator to Accessibility.
wim leers’s picture

#3228778: Drupal-specific CKEditor 5 plugins should be able to use Drupal's JS translation API: Drupal.t() landed, which means that only two issues remain under Ensure contrib modules can do everything: translations, automatic upgrade path from CKE4 …:

catch’s picture

Took a look at the issue summary to see how we're doing. There are more done issues than outstanding which is great. Is it worth moving the done issues to a 'done' dump at the bottom, so it's easier to scan the outstanding issues at the top? I don't dare do this without floating it first since it'd be a pain to put them all back again.

wim leers’s picture

Issue summary: View changes

Added #3263384: Add ckeditor5-code-block package and CodeBlock plugin to Ensure CKE5 functionality matches that of Drupal core's CKE4.

#21: Agreed — @tim.plunkett is going to have a go at that 😊

tim.plunkett’s picture

Issue summary: View changes

Attempted to reorganize the roadmap.

tim.plunkett’s picture

Issue summary: View changes

Missed a spot

wim leers’s picture

wim leers’s picture

gábor hojtsy’s picture

Issue summary: View changes

Fixing an item that was not expanded in the Completed section.

wim leers’s picture

wim leers’s picture

Issue summary: View changes
wim leers’s picture

wim leers’s picture

Issue summary: View changes

Three outdated (irrelevant now or done in other issue):

wim leers’s picture

Issue summary: View changes

#3246188: Vertical tabs auto collapse on viewports smaller than 1360px on certain configuration actions is a Claro bug, not a CKEditor 5 issue.

Removing it from this roadmap.

wim leers’s picture

Issue summary: View changes

#29 added two new major stable blocking bugs. But there are more that we created in the past few weeks. (More to follow tomorrow, but here's what I gathered so far.)

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

#3224261: [PP-2] Front-end performance: concatenate CKEditor 5 JS assets for every unique configuration is blocked on #3232810: [PP-1] Allow setting aggregation groups for js files in library definitions, which is an asset library system component issue, not ckeditor5.module.

A key part was split off from #3224261: #3264512: Enable aggregation for CKEditor 5 assets. This already improves front-end performance significantly: from "bad" to "good". #3224261: [PP-2] Front-end performance: concatenate CKEditor 5 JS assets for every unique configuration will get us from "good" to "optimal".

Therefore I propose moving #3224261: [PP-2] Front-end performance: concatenate CKEditor 5 JS assets for every unique configuration from stable blocking to post-stable. @nod_, @catch, @lauriii: thoughts?

nod_’s picture

+1 for post-stable, it's "good enough" right now.

catch’s picture

Agreed with making #3224261: [PP-2] Front-end performance: concatenate CKEditor 5 JS assets for every unique configuration nice-to-have. The two asset system issues will be a massive improvement, but ckeditor5 relying on core's existing asset aggregation is fine for stable.

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

I was the only person advocating for

  1. Media improvements
    1. #3196593: Ease the transition to Media: save image uploads in CKEditor 5 as media entities when media is enabled? (or module specific solution if core issue won't land)
    2. #3073901: Determine an upgrade path from CKEditor image button to media library (or module specific solution if core issue won't land)

to be stable blockers. I advocated for that for a long time:

  • 3 years ago: #3073901-2: Determine an upgrade path from CKEditor image button to media library:

    My perspective: Standard should remove DrupalImage and stop allowing <img>, and add DrupalMediaLibrary, the media_embed filter and allow <drupal-media>.

  • 4 months ago: #3073901-27: Determine an upgrade path from CKEditor image button to media library:

    Ideally we'd figure this out before Drupal 10, because Drupal 10 will drop support for CKEditor 4. See #3231364: Add CKEditor 5 module to Drupal core.

    The CKEditor 5 module already has the infrastructure it needs for this: it can provide an automatic upgrade path.

    Up until now, this issue has been saying we need the media and media_library modules to be enabled. But … we could also just do that conditionally as a first step:

    For Drupal 9|10 sites without media/media_library that switch to CKEditor 5
    Keep the current behavior.
    For Drupal 9|10 sites with media/media_library that switch to CKEditor 5
    Switch to Media automatically!

    This seems like a golden opportunity to at least move a big chunk of Drupal sites in the right direction!?

    Thoughts? 🤓

but … the Standard install profile still has not enabled media by default, let alone media_library 😔😔😔

It makes no sense to block CKEditor 5 becoming stable on something that is A) a separate concern, B) has lingered for many years.

So moved this to "post-stable".

wim leers’s picture

Issue summary: View changes

Yay, #3227822: [GHS] Ensure GHS works with our custom plugins, to allow adding additional attributes landed, which was the last remaining item under Ensure that sites can update from using CKE4 to CKE5 safely when using no contributed CKEditor modules! 🥳

wim leers’s picture

Issue summary: View changes

6 days ago, in #33, I wrote: But there are more that we created in the past few weeks. (More to follow tomorrow, but here's what I gathered so far.) — well, consider today that "tomorrow" 😅

Roughly 50% of the remaining open issues created since the beginning of 2022 are not stable blocking, and the remaining ~50% are. I added those to the roadmap here — they are:

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

#3260032: CKEditor 5 adds ie11.user.warnings library to every page, triggering a FOUC even for anonymous users landed!

EDIT: and that was the last Performance issue! 🥳 AFAICT this means we now meet the Drupal core "Performance" gate: https://www.drupal.org/about/core/policies/core-change-policies/drupal-c....

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

Just realized that #3248430: Improve Drupal.ckeditor5 documentation is in the wrong bucket; it belongs under Documentation gates IMHO.

wim leers’s picture

Issue summary: View changes

New Ensure that sites can update from using CKE4 to CKE5 safely when using no contributed CKEditor modules issue: #3268174: Bug in CKE 4 → 5 upgrade path "format" does not always map to "heading", it could map to "codeBlock" too, or both, or neither — discovered in #3263384: Add ckeditor5-code-block package and CodeBlock plugin.

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

Just triaged all remaining issues with @lauriii.

We updated a few issues with comments or improved titles.

#3248425: Ensure that all classes and functions in Drupal-specific CKEditor 5 plugins are documented should've been under Documentation gates

And we identified X issues that should no longer be stable blockers:

We didn't go through Superior configuration UX: because we felt it'd be important to have a Product Manager with us to do that.

@lauriii will start working on #3268311: [upstream] [drupalMedia] GHS-enabled markup in data-caption crashes CKEditor 5 now because we identified that as the highest risk/highest uncertainty one that remains.

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes
wim leers’s picture

Issue summary: View changes

#3260869: Resolve mismatch between <$block> interpretation by CKEditor 5 and Drupal is finally in!

But … @lauriii identified #3268307: $block wildcard resolves into a superset of the actual $block tags as an additional stable blocker, so that now takes its place. Fortunately it's a lot simpler.

wim leers’s picture

bnjmnm’s picture

Issue summary: View changes
tim.plunkett’s picture

Issue summary: View changes

Moving two issues from Stable to Post-Stable

wim leers’s picture

wim leers’s picture

Issue summary: View changes

Made a mistake in #66.

catch’s picture

One question on the upgrade path, apart from ckeditor4, what happens if you try to add editor support to an existing format that doesn't have an editor enabled?

Also, what happens when you switch formats from a format without an editor enabled, to ckeditor5?

wim leers’s picture

One question on the upgrade path, apart from ckeditor4, what happens if you try to add editor support to an existing format that doesn't have an editor enabled?

SmartDefaultSettings computes a CKEditor 5 configuration matching the text format's HTML restrictions, to ensure we support a superset. See the filter_only__filter_html test case in \Drupal\Tests\ckeditor5\Kernel\SmartDefaultSettingsTest::provider() for an example.

Also, what happens when you switch formats from a format without an editor enabled, to ckeditor5?

Same thing as happens when switching to CKEditor 4, thanks to #2099741: Protect WYSIWYG Editors from XSS Without Destroying User Data 😊

catch’s picture

Ahh OK on #3239012: [11.x] Remove the CKEditor 4 upgrade path SmartDefaultSettings is mentioned, but it's just removing a ckeditor4-specific method, so the rest stays and that's makes this all work. Thanks!

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes
wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes
wim leers’s picture

Issue summary: View changes

Happy to report that I discovered #3228580: Follow-up for #3222852: additional test coverage for real-time validation race conditions has been irrelevant for many months, ever since #3228477: CKEditor5PluginConfigurableInterface should extend PluginFormInterface and ConfigurableInterface instead of adding ::settingsForm() happened! It just was never a high enough priority to investigate. But with few issues remaining, it made sense today :)

wim leers’s picture

Issue summary: View changes

#3222756: Allow using images from external source is also in the wrong bucket: the markup is supported already (i.e. it is not lost), we're just lacking the UX to create images that are externally hosted ("hotlinked").

(This is a very bad practice, but we should ensure that existing content doesn't break.)

wim leers’s picture

Issue summary: View changes

#3261599: Use CKEditor 5's native <ol start> support (and also support <ol reversed>) is also in the wrong bucket: the markup is supported already, and editable already. But instead of requiring users to go to "Source Editing" today (just like in CKEditor 4, actually!), we should allow them to use the native functionality instead.

So, moved to Low-hanging fruit major UX improvements over CKEditor 4.

wim leers’s picture

Issue summary: View changes

Finally, #3228691: Restrict allowed additional attributes to prevent self XSS is also in the wrong bucket: this is purely a thing to improve the configuration UX and overall security — you can configure CKEditor 4 to allow self-XSS, but once this lands, you won't be able to anymore. Which means that it'll only be possible to self-XSS if already there are no HTML restrictions, i.e. when using the Full HTML text format.

Therefore, moving to Superior configuration UX.

Consequently, the Ensure CKE5 equivalent plugins of CKE4 generate/support equivalent markup bucket is done, which more closely reflects reality: all of the markup that could be edited with CKE4 can already be edited with CKE5 today! 🤓🥳🚀 ***

*** With the exception of a few upstream critical data loss bugs that only manifest in very specific circumstances, listed in the Ensure that sites can update from using CKE4 to CKE5 safely when using no contributed CKEditor modules bucket.

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

One more stable blocker discovered: #3274937: Get CKEditor 5 to work in (modal) dialogs.

wim leers’s picture

wim leers’s picture

Issue summary: View changes

#3274651: Impossible to enable <ol type> or <ul type> with GHS: switch to List's successor, DocumentList is another stable blocker that was discovered at DDD: it results in losing the type attribute on either <ol> or <ul>.

wim leers’s picture

wim leers’s picture

lauriii’s picture

wim leers’s picture

Issue summary: View changes

@bnjmnm just found a new stable-blocking bug: #3238333: Roadmap to CKEditor 5 stable in Drupal 9 👍

wim leers’s picture

Issue summary: View changes

Obviously the link in #100 was wrong 🙈 It should've been #3276974: [drupalMedia] Media View Modes don't work if alignment not enabled.

wim leers’s picture

Issue summary: View changes

Good news: #3268311: [upstream] [drupalMedia] GHS-enabled markup in data-caption crashes CKEditor 5 has been fixed upstream, and we got the fix thanks to #3274767: Update to CKEditor 5 v34.0.0. We still had that issue to write an explicit test, but per #3268311-14: [upstream] [drupalMedia] GHS-enabled markup in data-caption crashes CKEditor 5, that is not possible. One less stable blocker! 🥳

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

I did another round of ckeditor5.module issue queue triaging. Results:

wim leers’s picture

wim leers’s picture

wim leers’s picture

Issue summary: View changes

Moved it to the wrong place 🙈

wim leers’s picture

wim leers’s picture

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

bnjmnm’s picture

Issue summary: View changes
xjm’s picture

Issue tags: +Drupal 10 beta blocker

I tagged the outstanding children directly, but also tagging the parent in case more issues surface.

catch’s picture

Issue summary: View changes
tim.plunkett’s picture

Issue summary: View changes
catch’s picture

Issue summary: View changes
catch’s picture

Issue summary: View changes
catch’s picture

Issue summary: View changes
catch’s picture

Issue summary: View changes
catch’s picture

Issue summary: View changes
feuerwagen’s picture

Issue summary: View changes
catch’s picture

Issue summary: View changes
wim leers’s picture

wim leers’s picture

wim leers’s picture

wim leers’s picture

bnjmnm’s picture

Issue summary: View changes
wim leers’s picture

wim leers’s picture

xjm’s picture

The only outstanding stable blocker is the dictation issue, which will not be fixed until at least the end of September. The D10 beta release window OTOH is September 12-16.

This issue has been discussed among the release managers, CKEditor 5 contributors, accessibility maintainers, and CKSource maintainers. Summary:

  1. Marking CKEditor 5 stable so that CKEditor 4 is deprecated is urgent for beta1.
  2. CKEditor 5 is only truly considered stable once it's been shipped as a stable module in a stable release.
  3. Therefore, we can make the dictation issue an RC blocker for core, but still do the mechanics of marking CKEditor 5 stable in core now for beta testing and for the upgrade path.
  4. CKSource agreed that CKEditor 4 will not be marked EOL until this accessibility issue with CKEditor 5 is fixed, so as a worst-case scenario the CKEditor 4 contributed module could be used if this critical accessibility bug were not fixed for CKEditor 5.

I notice we are missing an issue for the actual step of marking the module stable. I will file it. :)

xjm’s picture

xjm’s picture

Issue summary: View changes
wim leers’s picture

Issue summary: View changes
Status: Active » Fixed

CKEditor 5 is now stable!

See #3307186-32: Mark CKEditor 5 stable.

🚀

P.S.: @lauriii even wrote a haiku for the occasion:

I write, erase, rewrite
Erase again, and then
CKEditor 5 is stable

👏

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.

puspanjalim’s picture

Version: 9.5.x-dev » 7.x-dev
Issue tags: +Drupal 7 compatibility

Is CKEditor 5 compatible with Drupal 7.x?

damienmckenna’s picture

Version: 7.x-dev » 9.5.x-dev
Issue tags: -Drupal 7 compatibility

This D9 issue was already closed almost two months ago, questions about D7 are not relevant here.

Please look at this project if you want to discuss CKEditor 5 in D7: http://drupal.org/project/ckeditor

effulgentsia’s picture

Is CKEditor 5 compatible with Drupal 7.x?

No, it's not, and it's not in scope for it to be added to Drupal 7 core. Drupal 7 core doesn't include any rich text editor.

One could attempt to write a contrib module that adds CKEditor 5 to a Drupal 7 site, whether as its own module, or to try to do that as an editor option in https://www.drupal.org/project/wysiwyg. However, this would be a lot of work. Currently, Drupal 7's EOL date is Nov. 2023, and CKEditor 4 will continue to be supported until then, so I don't know what factors would need to come together for someone (or a team of several people) to do that work. You might be interested in following this wysiwyg issue or this backdrop issue, though neither seems very far along yet.

wim leers’s picture