Install

Works with Drupal: ^11.2

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 26.51 MB
MD5: 55c10e4e67c8677076809948e0329454
SHA-1: 745eba8978972ded72b58bea12896c6ff1339e23
SHA-256: a5d80afd1ade90a8e3ea04d0cb01d9999325c697ea9e5a1102bfde1c6941357c
Download zip 27.45 MB
MD5: e97805c712190587e569fc0367a930fc
SHA-1: dc760915d21973485c3b4bbc6a62a1ae94ce5d13
SHA-256: 57881eb4a641dd0eb66c72cd430c5cf24d2df856e5db5c8abe9e77fd9ce4b3e1

Release notes

Drupal Canvas has reached its first beta milestone! This represents a major step toward production readiness.

Drupal Canvas now includes experimental Content Templates, allowing site builders to create reusable layouts that content creators can populate with components. The AI assistant has been enhanced to better understand user context when generating components and can now create components that fetch data from JSON:API.

Drupal Canvas now gracefully handles components that may appear and disappear during development, making the developer experience much smoother. The interface has been polished with improved component library discoverability.

Numerous stability improvements, bug fixes, and performance enhancements have been completed in preparation for production use.

We'd love your feedback! As we move toward a stable release, please test Canvas 1.0.0-beta1 and let us know about your experience. Your input will help shape the final release and ensure Drupal Canvas meets real-world needs.

Changelog

Issues: 95 issues resolved.

Changes since 1.0.0-alpha1:

Bug

  • [#3531991] fix(Page): `Page` has limited built-in metatag features, disable advanced form fields there as initial stop-gap
  • [#3548165] fix(Config management): Components in `ContentTemplate`s and `PageRegion`s are not always rendered in correct order
  • #3549005 wait on build id change and change the way it is waited on
  • [#3540211] feat(AI): User selection should be taken into account while building page
  • [#3548664] fix: Some Linker choices have no effect
  • [#3547940] fix(AI): AI attempts data fetching when creating components, even if not needed
  • [#3548194] fix(AI): Selected component context is missing from the orchestrator agent
  • [#3548111] fix(AI): Handle Undefined array key warnings in CanvasBuilder.
  • [#3544614] fix(AI): Agent should pass values to image props correctly
  • [#3546746] fix(CLI Tool): Authentication provider is broken in Canvas OAuth
  • [#3546600] fix: Conflict with Redirect module, impossible to edit Canvas page
  • [#3548395] fix(Semi-Coupled theme engine): Linker does not appear for certain field widgets
  • [#3548292] fix(Shape matching): Find required field instance matches for image (`json-schema-definitions://canvas.module/image`) and video prop shapes
  • [#3510433] fix: Layers are missing from Tailwind-compiled CSS, @import at-rules in global CSS break compilation
  • [#3544756] fix(Component sources): for `GeneratedFieldExplicitInputUxComponentSourceBase`-powered `ComponentSources`, the fallback to default value is already handled in `::clientModelToInput()`, in `::buildComponentInstanceForm()` should trust (but verify) that, not duplicate it
  • [#3544604] fix(Data model): Calculating dependencies of `ReferenceField(Type)PropExpression` is missing intermediate dependencies
  • [#3547476] fix: All container injection instantiation should use DI in function calling
  • [#3547167] fix(AI): Canvas AI: Request parameters are not passed correctly.
  • [#3530058] fix: Only allow deleting Code Components if there's 0 usages (so: 0 instances in auto-saves, default content entity revisions, config dependencies — ignoring past & forward revisions)
  • [#3547085] feat: Open template upon creation, only show for templates, update editor frame preview when switching content
  • [#3547381] fix(OpenAPI): OpenAPI error when component library is empty (aka 0 `Component`s with `status=true` exist)
  • [#3543449] fix: For now, only allow nodes to use `ContentTemplateAwareViewBuilder`
  • [#3533449] fix(AI): Follow-up to "Users without 'use Drupal Canvas ai' can open Canvas AI agent"
  • [#3546139] feat: `ApiLayoutControllerGetTest` is not actually using what `ApiLayoutControllerTestBase` provides, leading to very confusing code
  • [#3546163] fix(Page): Regression caused by ://www.drupal.org/node/3502887">#3502887: "Edit" tab on `Page` entity's canonical route broken
  • [#3540725] fix: Canvas-AI fails to gracefully handle large image file uploads
  • [#3545623] fix(shape matching): Follow-up for #3530533: `::SYMBOL_OBJECT_MAPPED_OPTIONAL_PROP` should be omitted rather than evaluate to NULL.
  • [#3543093] fix: AI can hallucinate the prop names
  • [#3543786] fix: Handle ParseException in XbBuilder Controller
  • #3545378 by akhil babu, narendrar, marcus_johansson: Canvas AI: Agents fail due to missing entity type and entity ID parameters
  • #3537807 by jessebaker: Previous page search results flash briefly when opening the Navigator
  • #3544412 by jessebaker, penyaskito: xBEditor evaded the rename script!

Feature

  • #3546285: Account for route changes in undo/redo stack
  • [#3548311] feat(Shape matching): `FieldPropExpression`: support multiple bundles using the same field name
  • [#3548686] feat(Shape matching): Allow mapping "List (integer)" field type to `type: integer` and "List (float)" to `type: float`
  • [#3531000] feat: Show progress when executing prompts
  • [#3548295] feat(Shape matching): `type: string` shape matching: find `Node`'s `uid` ("Author") field instance `type: string`
  • [#3535689] feat: Make Tailwind available in the component CSS
  • [#3541037] feat: Allow linking `ContentTemplate` SDC/code component instance props to fields (aka finally use `DynamicPropSource`s!)
  • [#3541035] feat: Make UI to publish a `ContentTemplate` match designs
  • Resolve #3541034 "Render component instance"
  • [#3545480] perf: Static caching of `CodeComponentDataProvider` per request to avoid re-resolving the same information for every previewed code component
  • [#3545477] perf(AI): Use subrequests when getting component list in `::getAllComponentsKeyedBySource()`
  • #3538340: Follow-up fixing links
  • [#3541027] fix(Internal HTTP API): Follow-up: add missing cacheability for URLs added to response + match intent OpenAPI
  • #3541031 by jessebaker: Render template and support component operations in preview canvas
  • #3545131 by jessebaker: Store previously edited entity (name and path) so that user can return to it
  • #3545499 by jessebaker, mred9: Add "Pages" navigation to Side Menu
  • [#3543744] feat: Canvas AI: Create a common service for validations
  • #3502887 by mglaman, hooroomoo, jessebaker, bnjmnm, f.mazeikis: Prepare for avoiding full page reloads: move entity type and ID from base path and into routing parameters

Task

  • [#3512853] chore(Shape matching): Update `FieldInstanceSupportTest` to reflect the shape matching support on October 1, 2025: 100% of core is tracked, 81% of field instance types can be matched, 78% of field instance properties
  • #3549931 removed cypress test that was replaced with a PW one
  • #3540965 Adding drop-zone testid attributes to assist with e2e tests
  • [#3542895] fix(Shape matching): `format: uri` and `format: uri-reference` shape matching is too coarse, `StaticPropSource`s using the `link` field type allow incorrect values
  • [#3546996] feat: Component instances populated by linked `DynamicPropSource`s, but inaccessible entity/field: fall back to `NULL` for these values, triggering fallback rendering
  • [#3535024] feat: Investigate why the Canvas UI seems to not apply client-side transforms
  • [#3546947] feat: Refine Code Component deletion UX: allow deleting if not violating data integrity + explain impact of deleting
  • [#3549767] chore: Use `package: Drupal Canvas` in Canvas provided modules' `info.yml`
  • [#3470422] feat(Component sources): Handle components provided by ComponentSources IMPLICITLY disappearing: gracefulness when developing SDCs: SDCs may appear/disappear from one request to the next
  • [#3549678] chore: Update PHPCS config to match Drupal 11
  • [#3545716] feat(Component sources): Disable Components by default sourced from some of the block plugins provided by core in the Standard profile, and stop using `@todo` as the category/Folder for code components
  • #3547294 Handle when suggestedEntityId node or template is deleted in `ContentTemplate`
  • [#3530351] feat(Shape matching): Stop relying on `pattern` to validate URI schemes; introduce the `x-allowed-schemes` annotation and use it when validating `type: string, format: uri|uri-reference|iri|iri-reference`
  • [#3547600] fix(AI): Move layout model to currentValuesRef instead of separate layoutModelRef
  • [#3544768] feat: Improve discoverability of Canvas pages by providing a default view
  • [#3541057] feat: refactor and test `ApiLayoutController::post` with dynamic prop sources
  • [#3520487] fix: Ensure Canvas component tree field is rendered consistently (without field wrapper markup) on the live site and when previewing/editing
  • [#3545710] feat: Refactor and improve UI for library listings
  • [#3547598] fix(Shape matching): Fix sorting of DynamicPropSource suggestions
  • [#3547685] feat: Make CSpell linting output less verbose
  • [#3542029] feat: Enable AI agents to generate components that fetch data from JSON:API
  • #3543804 "Manage library" updates
  • Resolve #3543800 use dialog
  • [#3532265] chore: Remove the `canvas_dev_standard` module, instead recommend using XB's `test_site` recipe for development
  • #3547262 add destination redirect back to template
  • [#3503038] feat: Enable candidate `DynamicPropSource` suggestions for code components: refactor `GeneratedFieldExplicitInputUxComponentSourceBase` and `FieldForComponentSuggester` to need only SDC's ComponentMetadata, not SDC plugin instances
  • [#3544277] fix: Canvas AI: Use Direct Tailwind Classes Rather Than @apply Directives
  • [#3545855] feat: Followup for #3541027: UX and styling improvements for Templates menu and sidebar components
  • [#3546319] feat: Hide the page data form when a content template is open
  • [#3546903] chore(Component sources): Disallow using any `ComponentSource` other than SDC/JS/Block unless `canvas_dev_mode` is installed
  • [#3542596] feat(AI): Enable AI agents to generate components that fetch menus
  • [#3546737] feat: Empty/New view of Content Template editor to match design.
  • [#3546260] feat: `ApiLayoutController::getLabel()` should return preview entity label for content templates
  • [#3545236] fix(Config management): Restore PHPStan array shape expectation for `ComponentTreeEntityInterface::setComponentTree()`
  • [#3546348] feat(OpenAPI): CI: Add `lint (OpenAPI)` for automated spec validation to improve MR review velocity
  • [#3538562] feat(Semi-Coupled theme engine): Provide salient warning when `canvas_stark` is not enabled
  • #3545662 by jessebaker: Normalise UI across Library and Manage Library
  • [#3542392] feat(Page): `Page` content entity type + pathauto: default to NOT generating a path alias
  • [#3513590] feat: `ComponentSourceInterface::inputToClientModel()` needs to support passing an entity
  • [#3543834] feat: Refactor all or most `ApiLayoutController*Test` classes to also test `ContentTemplate` entities
  • [#3544865] feat: `CanvasUiAccessCheck` should grant access if the user has access to content templates or code components
  • [#3541015] feat: HTTP Endpoint for content templates should always return all eligible content entity types + bundles
  • [#3541006] feat: Create HTTP Endpoint for Content Template Preview Entities
  • [#3544433] feat: Follow-up: fix `stylelint` CI job
  • [#3541021] feat: Refactor `ApiLayoutController` to support `ContentTemplate`s
Created by: balintbrews
Created on: 2 Oct 2025 at 12:32 UTC
Last updated: 2 Oct 2025 at 12:32 UTC
Bug fixes
New features
Insecure
Unsupported

Other releases