Problem

  1. Inconsistent block CSS class names.
  2. Needlessly verbose block CSS class names - repeating "block" as suffix (originating from plugin ID).

Goal

  1. Revise block CSS class names for D8.

Proposed solution

  1. Remove the leading module name from all block plugin IDs.

    → Code and CSS classes should rely on $plugin->getProvider().

  2. Remove the trailing "_block" suffix from all block plugin IDs.

    → Needless duplication, both in plugin IDs as well as generated CSS classes.

  3. Make the primary block CSS class "block-$provider-$pluginid".

    → Clean class names that cover all use-cases.

    Note: Double-check plugin IDs of derivative plugins (e.g., menu blocks). To my knowledge, they are compatible and would work like this:

    Plugin ID:  base_plugin_id:derivative_id           →  menu:main
    CSS class:  block-$provider-$baseid:$derivativeid  →  block-menu-menu--main
    
  4. Remove the "block-$module" CSS class.

    → Rare use-case. If necessary, this can be achieved with a CSS3 [class*='block-module-'] selector.

.

.

.


Problem/Motivation

The Block HTML ID naming convention has changed from block-$module-$delta to block-$instance_machine_name. Since the $instance_machine_name naming convention differs from the $module-$delta pattern, the CSS selectors in core CSS and JS files no longer correctly apply styles to blocks provided by core.

Please note that #1896098: Add a plugin class to the blocks to identify instances in css addresses the issue of plugin-based class names on blocks. This issue's discussion and patches should be limited to the ID only of the block's HTML and associated CSS and/or JS.

Proposed resolution

To be determined, but should focus on the ID and not the class name, due to work being done in #1896098: Add a plugin class to the blocks to identify instances in css.

Remaining tasks

  • Determine $plugin based naming convention for HTML IDs on blocks
  • Update CSS and JS selectors in core CSS and JS files (unsure which specific files would be affected)

User interface changes

None that I am aware of.

API changes

With an updated $plugin based naming convention for HTML IDs on blocks, CSS and JS selectors will necessarily be updated in core files. Any ID-based CSS or JS selectors targeting blocks in contrib theme or modules will need to be updated (by the contributor).

Original report by effulgentsia

In #1535868: Convert all blocks into plugins, block HTML IDs have changed from block-$module-$delta to block-$instance_machine_name. The instance's machine name is administrator settable when initially creating the block instance (choosing "Configure" from the "Block Library"). The Standard profile includes several predefined block instances via config files in core/profiles/standard/config/plugin.core.block.*. For example, the User login block instantiated in the Bartik theme has a machine name of login, forming a config filename of plugin.core.block.bartik.login.yml.

The machine names of these Standard profile blocks differ from the $module-$delta pattern that existed prior to the conversion to plugins. For example, the User login block's machine name is login, not user-login.

But in several core CSS and JS files, we still have CSS selectors for #block-user-login and other #block-$module-$delta IDs.

At a minimum, we need to fix the CSS selectors to match the machine names, but are the machine names what we want them to be, and are we ok with them being administrator configurable?

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

EclipseGc’s picture

I think this is a situation where we need to probably add default classes to the blocks and transition the css from ids to classes.

sun’s picture

Category: task » bug
Issue tags: +Blocks-Layouts
pcambra’s picture

salvis’s picture

The machine names are very volatile. When you add a block, you can specify it's title, and the machine name changes with the title.

Once the title is localized, the machine name will probably follow, and the css id is broken right from the start.

#1896098: Add a plugin class to the blocks to identify instances in css fixes this issue by adding the block-$pluginid class:

<div id="block-$machinename" class="block block-$module block-$pluginid">

This lets us select the div with div.$module.$pluginid

star-szr’s picture

Title: Figure out what to do with block html ids (HEAD currently contains css selector regressions) » Figure out what to do with block HTML IDs (HEAD currently contains CSS selector regressions)

Capping the acronyms :)

dcam’s picture

http://drupal.org/node/1427826 contains instructions for updating the issue summary with the summary template.

adamdicarlo’s picture

<div id="block-$machinename" class="block block-$module block-$pluginid">

This lets us select the div with div.$module.$pluginid

Actually, going by that div you show, the selector would be .block-$module.block-$pluginid.

Fidelix’s picture

I think something like this would be clean, but still reliable:

<div id="block-$machinename" class="block $module $pluginid">

Or maybe:
<div class="block $machinename $module $pluginid">

Is there a reason to repeat the "block" string four times for the same element?

nod_’s picture

Issue tags: +mobile, +html5

tagging for html5/mobile initiative in case they have something to make this go somewhere.

catch’s picture

Title: Figure out what to do with block HTML IDs (HEAD currently contains CSS selector regressions) » Update block HTML IDs now that they're plugins

Re-titling.

drifter’s picture

Agree with Fidelix, if we leave out the block- prefix we gain a lot in readability and verbosity. Any name collisions should be rare and can be dealt with in various ways.

adamdicarlo’s picture

As far as targeting the blocks with JavaScript, decoupling HTML ID and CSS classes from the JS behavior hooks seems to be an emerging best-practice.

CSS classes and HTML IDs should be used for styling, not for hooking in JavaScript functionality, right? I think we've all been stung by jQuery selectors that rely on HTML structure and classes, when the structure and/or classes are changed for visual reasons.

There are different ways to decouple. Attribute data-js or data-hook:

  <section id="login" class="block user pretty-box" data-js="drupal-user-login">
    ...
  </section>
  <script>
    $('[data-js="drupal-user-login"]').methodCall();
  </script>

Feels a little hacky, given the long-winded selector.

Role.js (GitHub repo) extends jQuery/Zepto to add @selectors:

  <section id="login" class="block user pretty-box" role="drupal-user-login">
    ...
  </section>
  <script>
    $('@drupal-user-login').methodCall();
  </script>

Thoughts?

tim.plunkett’s picture

Very few of these blocks are addressed from JS. Most of this is styling.
Also #12 is a larger discussion than this issue.

nod_’s picture

benjy’s picture

I think we should go ahead with below, as suggested by @Fidelix in #8.

<div id="block-$machinename" class="block $module $pluginid">

benjy’s picture

Issue summary: View changes
Status: Active » Needs review
FileSize
824 bytes
1.27 KB

Initial patch attached to match #15.

I've also attached another patch for testing which removes the if statement around the $block->id() call. Not sure why that's needed so let's see if the tests fail.

Status: Needs review » Needs work

The last submitted patch, 16: update-html-ids-1880646-16.patch, failed testing.

benjy’s picture

Status: Needs work » Needs review
FileSize
2.05 KB
3.32 KB

OK so it seemed removing the if statement around the $block->id() call didn't break anything.

New patch is based from update-html-ids-1880646-16-test-remove-if-statement.patch and fixes the relevant tests.

mradcliffe’s picture

Patch makes expected changes and I don't see any syntax or standards issues.

Simplytest.me test:
- Added the Who's Online block to the Highlighted region.
- Added the Who's Online block to the Sidebar first region.
- Got valid HTML

+1 to RTBC

If a contrib module does something fancy like preview a block without an id, then I think that module could pass in a dummy id. I don't think the conditional is necessary anymore either.

benjy’s picture

New patch attached replaces ":" with -- for plugin_ids as suggested by tim.plunkett.

benjy’s picture

Updated tests.

Status: Needs review » Needs work

The last submitted patch, 20: update-html-ids-1880646-20.patch, failed testing.

benjy’s picture

Status: Needs work » Needs review

Back to NR.

tim.plunkett’s picture

Status: Needs review » Reviewed & tested by the community

The changes look good.

This used to be titled "HEAD currently contains CSS selector regressions", and I hope this satisfies that need.

Dries’s picture

+++ b/core/modules/block/block.module
@@ -513,7 +513,10 @@ function template_preprocess_block(&$variables) {
+  $plugin_id_class = str_replace(':', '--', $variables['plugin_id']);
+  $variables['attributes']['class'][] = drupal_html_class($plugin_id_class);

Calling str_replace() in preparation of calling drupal_html_class() looks like a hack. Shouldn't that string replace operation live inside drupal_clean_css_identifier(), which is called by drupal_html_class()?

benjy’s picture

I'm not against changing the logic of drupal_clean_css_identifier() to replace colons with a double hyphen.

That would however be an API change? I'll put a patch up later and see if it breaks anything.

benjy’s picture

New patch moves the str replace into drupal_clean_css_identifier(), let's see what the testbot says.

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 27: update-html-ids-1880646-27.patch, failed testing.

Jeff Burnz’s picture

Should we call drupal_clean_css_identifier() directly and use its second argument drupal_clean_css_identifier('this:string', array(':' => '--'));

Or add to the $filter array in drupal_clean_css_identifier()?

benjy’s picture

I think we should add ":" => "--" to the default filter array in drupal_clean_css_identifier().

benjy’s picture

Status: Needs work » Needs review
FileSize
3.99 KB
1.47 KB

New patch attached adding to the default filters.

Status: Needs review » Needs work

The last submitted patch, 31: update-html-ids-1880646-31.patch, failed testing.

sun’s picture

The proposed solution of:

<div id="block-$machinename" class="block $module $pluginid">

will cause plenty of false-positives when using external JS libraries and possibly CSS libraries.

Both $module and $pluginid are using arbitrary names that may be unique within Drupal, but not universally unique in the frontend space.

Aside from that, adding a built-in ":" → "--" conversion sounds like a very good idea; potentially useful elsewhere.

Jeff Burnz’s picture

Is there an argument for keeping $module?

Other than perhaps block menus they look like an edge case, i.e. block-system, block-custom-block do not seem very useful.

Can it be argued that $module can be selected from the $plugin_id using attribute selectors, e.g.:

<div id="block-mytheme-search" class="block block-search-form-block" role="search">
[class*="block-search"]

Are plugin_id's that reliable?

Could something as simple as that work, i.e.:

<div id="block-$block_id" class="block block-$plugin_id">

sun’s picture

Great idea, @Jeff Burnz!

I continue to forget that we're able to leverage modern selectors now, so #34 sounds like a very nice and good compromise.

I agree that the use-case for styling all blocks of foo.module is very limited and can definitely be achieved with partial-match attribute selectors.

In fact, this approach resolves yet another hidden issue that existed in the past: Even just the $module and $[plugin_]id sometimes led to ambiguous name clashes, because $[plugin_]id was not namespaced with $module.

The new $plugin_id are always prefixed with $module to my knowledge.

+1 :)

benjy’s picture

OK I've removed the module name altogether from the block class name. The comment about menu blocks, I guess that's helped somewhat in that they get the extra class block-menu.

#34 suggested:
<div id="block-$block_id" class="block block-$plugin_id">

How about:
<div id="block-$block_id" class="block $plugin_id">

I'm not sure how the block prefix to plugin Id helps us. plugin_id's seem to have the word block in anyway if it was clarity we were after? eg system-menu-block--tools and search-form-block.

If we were adding the word block so we could use attribute selectors for module provide blocks without clashes eg to match block-search than i'd rather just keep the module name as it's own class.

Personally I think it's more readable to have .block.system over [class*="block-system"] in your CSS.

benjy’s picture

Status: Needs work » Needs review
FileSize
5.5 KB
2.25 KB

Patch shows my first suggestion without the module name at all and without the block prefix.

On a side note, it's really annoying that you can't preview your comments anymore because you're editing the issue.

Status: Needs review » Needs work

The last submitted patch, 37: update-html-ids-1880646-36.patch, failed testing.

Jeff Burnz’s picture

I'm not sure how the block prefix to plugin Id helps us. plugin_id's seem to have the word block in anyway

I'm not totally sure how plugin_id works, if block is a required suffix etc, we can follow #1879496: Do we need to worry about plugin ID collisions?, I know I have prepended module name and appended block in a test module I wrote, unless this in enforced programatically the we can't really guarantee it will alway be there. Someone who knows more about this needs to comment.

tim.plunkett’s picture

if block is a required suffix etc

That's a coincidence:

"aggregator_category_block"
"aggregator_feed_block"
"custom_block"
"test_block_instantiation"
"test_cache"
"test_html_id"
"test_xss_title"
"book_navigation"
"recent_comments"
"forum_active_block"
"forum_new_block"
"language_block"
"node_recent_block"
"node_syndicate_block"
"search_form_block"
"shortcuts"
"statistics_popular_block"
"system_breadcrumb_block"
"system_help_block"
"system_main_block"
"system_menu_block"
"system_powered_by_block"
"user_login_block"
"user_new_block"
"user_online_block"
"views_block"
"views_exposed_filter_block"
Jeff Burnz’s picture

Thanks tim.plunkett, so yeah, not reliable enough to ensure uniqueness. Even if core sorts this inconsistency out contrib will not, that's a given.

Shifting focus to the id, and wondering if we might be able to remove it, found #1989568: Remove block config ID from being used as an HTML ID or template suggestion.

The only reason I can think of to keep the id is as a fragment identifier?

$variables['elements']['#block']->id() could be a class? EclipseGc actually hints at this #1. I tend to think this fits our idea of BEM better, a unique class per block instance rather than an id. No need for id or chained selectors in CSS.

The fragment identifier is kind of a big deal imo, I wonder if there are any contrib modules that currently rely on this?

Fidelix’s picture

The new $plugin_id are always prefixed with $module to my knowledge.

If that's the case I think we should go with:
<div id="block-$block_id" class="block $plugin_id">

tim.plunkett’s picture

The new $plugin_id are always prefixed with $module to my knowledge.

"recent_comments"
That is not prefixed. There is no requirement that they be prefixed.

benjy’s picture

Yeah I agree with the fragment identifier that's a big one.

What about selecting the block in JavaScript. Id's are still quite a bit faster to select than classes?

Jeff Burnz’s picture

Recap:

We need a way to apply CSS:

  1. to all blocks
  2. to all instances of a particular block
  3. to just one instance of a block, preferabley without chaining

Targeting blocks by module "sounds" like a good idea, but in practice it's rarely done. However, if we have the module in the plugin_id this is entirely doable using attribute selectors. If you really need module as a separate class then you can do it in your theme.

This issue could be highly dependant on #1879496: Do we need to worry about plugin ID collisions? , where we can clean things up by adding the module prefix to all plugin id's that don't have it, and remove -block suffix, hopefully. We will then we set a de facto standard for contrib and get nice clean, usable classes. I read into tim.plunketts posts above that there is no technical reason why this cannot happen.

Un-prefixed block classes are prone to "false positives" because contrib and the wider front end world is unknowable. For example users could install a module with a library and it could break their site/design. It's also way more readable in CSS when you see "block-search" as opposed to just "search" and it negates the chained selectors.

So, if #1879496 lands we can do this:

<div id="block-$block_id" class="block block-$plugin_id">

Example selectors:

/* select all blocks */
.block {}


/* select all search module blocks */
[class*="block-search"] {}


/* select all instances of search form block (block-$plugin_id),  existing -block suffix removed */
.block-search-form {}


/* select this single instance of search form block (block-$block_id) */
#block-searchform {}

@benjy afaict, not really much faster, but the fragment and being able to avoid chained selectors are pretty compelling reasons to keep the id I think.

Fidelix’s picture

Sorry but I don't agree that avoiding false positives is a good enough reason to apply the "block-" prefix to all blocks.

I believe these clashes would be quite rare and should be dealt with individually.

Jeff Burnz’s picture

@Fidelix, I hear your passion, but may I ask what do we gain from not having prefixes? That's the bit I don't really understand in your argument.

Fidelix’s picture

IMHO, we get a cleaner, easier to understand HTML.
Overall, it's one of many small steps for improving the default markup, but I believe it helps.

joelpittet’s picture

Few things to consider: (some of which is addressed above by a few people)

The IDs can be useful in certain use-cases but in general don't help styles as most front-end devs are moving to class selectors for specificity and ability to override.

I strongly believe if needed it should be easier to define the ID, ala a field that sets the ID of that block instance, or some automatic way. But doing the automatic work for something that may not be needed and just adds bulk the markup may be counter productive. @benjy mentioned a possibility of "Off, Auto, Manual" and I'd suggest "Off" by default.

Auto-generated ones will need to care about duplicate blocks which adds a bit tricky in being consistent and semantic for theming and moving code between dev/stage/prod environments.

I'd like to recommend, turn them "Off" by default the HTML IDs. Allow people who need them to easily manually set in the UI, prepare/preprocess hooks, or in the template and optionally auto-generate as before.

This is part to keep features we have already for those who depend on them and part to set sane and clean defaults.

@EclipseGc and @Jeff Burnz does that fall in line what you mentioned in #1 and #41?

And to a lesser note, I'd prefer to avoid name conflicts especially on generated classes, so prefixing. It's a bit cleaner without prefixing I agree but without it there will need to be more nested selectors to avoid the conflicts which will be annoying to debug and mildly slower to parse by the browser.

Jeff Burnz’s picture

#48, OK, so you're talking about HTML, I am more thinking about selectors and how easy they are to understand in the stylesheets.

For example when reviewing a co-workers stylesheet and I see .recent-comments {...} I don't know if it's selecting a block, field, view or some other entity type, i.e. it has no context.

Remember, I'm saying we should get rid of the silly -block suffix that most core blocks have insisted on. I'll even write the freaking patch if I have to. I hate that thing!

Fidelix’s picture

I understand you, Jeff, and I agree that it would be more difficult to understand context if the css was like .recent-comments {...}

However, it is the job of your co-workers to apply context where it's needed:
.block.recent-comments {...} and we should say that in the CSS coding best practices docs. IMHO there is nothing wrong with chaining selectors like that, and as you know it's a standard practice of most modern css frameworks and libraries.

@joelpittet:

And to a lesser note, I'd prefer to avoid name conflicts especially on generated classes, so prefixing. It's a bit cleaner without prefixing I agree but without it there will need to be more nested selectors to avoid the conflicts which will be annoying to debug and mildly slower to parse by the browser.

You meant chained selectors? That's what they're for, what you call "conflict" is actually sharing attributes and like I said that's a good thing; and every frontend developer should know how to take advantage of that.

It's not harder to debug in 2014, a time we have excellent CSS/JS inspectors/debuggers in every major browser.

About parse performance... the impact is literally negligible. Even on low-end devices.

Fidelix’s picture

@joelpittet

About turning on/off IDs...
I think having that in core would be very confusing.
But there's nothing preventing us from giving contrib the ability to preprocess that. This honestly belongs to a module like https://drupal.org/project/clean_markup

It's a great initiative and it needs help.

Jeff Burnz’s picture

Are we not duplicating discussion and code from: #1896098: Add a plugin class to the blocks to identify instances in css A lot seems to be covered there.

What is still relevant from the OP and is this still critical? Isn't this just about the ID and other issues in the OP?

Time to rewrite the issue summary and refocus?

joelpittet’s picture

@Fidelix thanks, feel old, chaining never used to work well cross-browser so it's on my internal "ignore this feature till it gets sorted" list.

Amber Himes Matz’s picture

Issue summary: View changes
Amber Himes Matz’s picture

Updated the issue summary as suggested by Jeff Burnz in #53.

Amber Himes Matz’s picture

Removed Needs issue summary update tag as I just updated the issue summary.

catch’s picture

Status: Needs work » Closed (duplicate)
sun’s picture

Hm. While #1896098: Add a plugin class to the blocks to identify instances in css does indeed contain a patch, this issue holds a much more in-depth discussion...

Given the block plugin ID list in #40, I think we have these concrete tasks:

  1. Remove the leading module name from all block plugin IDs.

    → Code and CSS classes should rely on $plugin->getProvider().

  2. Remove the trailing "_block" suffix from all block plugin IDs.

    → Needless duplication, both in plugin IDs as well as generated CSS classes.

  3. Make the primary block CSS class "block-$provider-$pluginid".

    → Clean class names that cover all use-cases.

    Note: Double-check plugin IDs of derivative plugins (e.g., menu blocks). To my knowledge, they are compatible and would work like this:

    Plugin ID:  base_plugin_id:derivative_id           →  menu:main
    CSS class:  block-$provider-$baseid:$derivativeid  →  block-menu-menu--main
    
  4. Remove the "block-$module" CSS class.

    → Rare use-case. If necessary, this can be achieved with a CSS3 [class*='block-module-'] selector.

If that's the final set of tasks (and if we agree, of course :)), then let's create issues for those :)

(3) would be the existing #1896098: Add a plugin class to the blocks to identify instances in css, of course.

Fidelix’s picture

I still disagree with this:

CSS class:  block-$provider-$baseid:$derivativeid  →  block-menu-menu--main

I believe this "block-" prefix is unnecessary.
Otherwise, I'd say we have a clear path forward, thanks Daniel.

sun’s picture

Title: Update block HTML IDs now that they're plugins » [meta] Update block HTML IDs now that they're plugins
Category: Bug report » Task
Issue summary: View changes
Status: Closed (duplicate) » Active

Re-opening and turning into a meta issue, since #59 keeps on getting referenced elsewhere (now in issue summary).

Berdir’s picture

I disagree with #58. Unless we somehow change the plugin discovery to be namespaced by provider, we have to prefix them by module, or we risk clashes. Looking at the list in #40, I can only see one example that was not prefixed by module name and that was changed to a view in the meantime.

Removing _block suffix seems like a useful thing, but I'm not sure if that's worth an API/storage change at this point in time?

So, as it was asked a year ago, what is still really necessary and doable here?

catch’s picture

Priority: Critical » Major
Status: Active » Postponed (maintainer needs more info)
Issue tags: +Needs issue summary

I think this is the right priority/status at the moment, I also am not at all clear what needs doing, and this isn't critically breaking anything.

EclipseGc’s picture

Seems like, we should generate ids by the machine name (since that has to be unique) and classes by the plugin id (since that can be placed multiple times). What is this issue about again?

Eclipse

tim.plunkett’s picture

Issue tags: -Needs issue summary +Needs issue summary update

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

tim.plunkett’s picture

Issue tags: -Blocks-Layouts

Not actively part of the Blocks-Layouts work.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

finalred’s picture

3years “block-” still exist...

cilefen’s picture

It is fine to complain but better to update the issue summary, providing justification to reopen the issue. In #63 a committer questioned the issue an no one has updated it.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

devkinetic’s picture

This is still a thing, and in the latest releases more things are breaking, specifically views utilizing IDs which is a lot of modules, especially when related to javascript enabled layouts.

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

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

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

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should 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.

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

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

smustgrave’s picture

Been 9 years since this moved to PNMI. Should it be reopened or closed?

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

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.