Drupal is a registered trademark of Dries Buytaert
drupal 11.3.7 Update released for Drupal core (11.3.7)! drupal 11.2.11 Update released for Drupal core (11.2.11)! drupal 10.6.7 Update released for Drupal core (10.6.7)! drupal 10.5.9 Update released for Drupal core (10.5.9)! cms 2.1.1 Update released for Drupal core (2.1.1)! drupal 11.3.6 Update released for Drupal core (11.3.6)! drupal 10.6.6 Update released for Drupal core (10.6.6)! cms 2.1.0 Update released for Drupal core (2.1.0)! bootstrap 8.x-3.40 Minor update available for theme bootstrap (8.x-3.40). menu_link_attributes 8.x-1.7 Minor update available for module menu_link_attributes (8.x-1.7). eca 3.1.1 Minor update available for module eca (3.1.1). layout_paragraphs 2.1.3 Minor update available for module layout_paragraphs (2.1.3). ai 1.3.3 Minor update available for module ai (1.3.3). ai 1.2.14 Minor update available for module ai (1.2.14). node_revision_delete 2.0.3 Minor update available for module node_revision_delete (2.0.3). moderated_content_bulk_publish 2.0.52 Minor update available for module moderated_content_bulk_publish (2.0.52). klaro 3.0.10 Minor update available for module klaro (3.0.10). klaro 3.0.9 Minor update available for module klaro (3.0.9). layout_paragraphs 2.1.2 Minor update available for module layout_paragraphs (2.1.2). geofield_map 11.1.8 Minor update available for module geofield_map (11.1.8).

Summary

The Block plugin view builder module allows developers to programmatically render (view) block plugins without the need for the wrapping BlockContent entity. This module is an adaptation of the core BlockViewBuilder and makes sure that:

  • Each block gets a cache key, so it can be cached in the render cache
  • Cacheable metadata (including access metadata) is taken into account
  • Block plugins get a lazybuilder callback so they can be correctly placeholdered
  • Context-aware block plugins are supported by passing explicit contexts

This all results in better leveraging of the (dynamic) page cache.

Note: This module does not aim to implement rendering or viewing of BlockContent blocks as these should best be viewed using the core BlockViewBuilder.

How to use

Basic usage:

$blockPluginViewBuilder = \Drupal::service('block_plugin.view_builder');
// Pass optional configuration.
$configuration = [];
$build = $blockPluginViewBuilder->view('plugin_id', $configuration);

With contexts (for context-aware block plugins):

use Drupal\Core\Plugin\Context\Context;
use Drupal\Core\Plugin\Context\EntityContextDefinition;

$blockPluginViewBuilder = \Drupal::service('block_plugin.view_builder');
$build = $blockPluginViewBuilder->view('plugin_id', [], [
    'node' => new Context(new EntityContextDefinition('entity:node'), $node),
]);

Supported context types:

  • Entity contexts (entity:node, entity:user, etc.) — stored as entity type + ID and reloaded safely in the lazy builder.
  • Scalar contexts (string, integer, etc.) — passed through as-is via JSON.

Requirements

  • PHP 8.1+
  • Drupal 10 or 11

Roadmap

  • Notify other contributed modules that are rendering block plugins of the existence of this project (eg. Block field, Twig tweak, Panels, ...)

Activity

Total releases
2
First release
Feb 2025
Latest release
5 days ago
Release cadence
424 days
Stability
100% stable

Releases

Version Type Release date
1.0.6 Stable Apr 13, 2026
1.0.5 Stable Feb 13, 2025