Getting Started with Drupal Canvas: The No-Code Page Builder for Everyone

Getting Started with Drupal Canvas: The No-Code Page Builder for Everyone

Alex Rollin
Alex Rollin
December 1, 2025
Last updated : February 15, 2026
December 1, 2025

Building pages in Drupal has traditionally required either deep technical knowledge or constant developer involvement. Content editors often find themselves stuck waiting for developers to create new layouts, while developers spend valuable time on repetitive page-building tasks. Drupal Canvas changes this dynamic completely.

This guide walks you through setting up and using Drupal Canvas, a visual page builder that brings drag-and-drop functionality to Drupal 11 and late-stage Drupal 10. You'll learn how to install Canvas, create your first pages, build custom components, and avoid common pitfalls that can slow down your implementation.

Prerequisites

Before you begin working with Drupal Canvas, you'll need:

  • Drupal 11.x or Drupal 10.x (version 10.3 or higher) - Canvas requires these newer versions for full compatibility
  • Composer installed on your system - You'll use this to add Canvas to your project
  • Admin access to your Drupal site - You'll need permissions to install modules and configure settings
  • A custom theme (recommended) - While not strictly required, having a custom theme gives you the most flexibility for creating components
  • Basic familiarity with Drupal's admin interface - You should know how to navigate the admin menu and manage content

Teams we work with report that having at least one person familiar with Twig templates helps significantly when creating custom components, though it's not required for basic Canvas usage.

Step 1: Installing Drupal Canvas

Start by adding Canvas to your Drupal project using Composer. Open your terminal, navigate to your Drupal root directory, and run:

composer require drupal/canvas

Once Composer finishes downloading the module, enable it using Drush:

drush en canvas -y
drush cr

Alternatively, you can enable Canvas through the admin interface by going to Extend, searching for "Canvas", checking the box, and clicking Install.

Critical Configuration Step

After installation, you need to add this line to your settings.php file:

$settings['extension_discovery_scan_tests'] = TRUE;

This setting allows Drupal to discover Single Directory Components (SDCs) in your theme. Without it, custom components won't appear in Canvas. Many first-time users miss this step and wonder why their components aren't showing up.

Step 2: Configuring Canvas Permissions

Navigate to Configuration → Canvas Settings in your admin menu. Here you'll set up who can use Canvas and what they can do with it.

Key permission settings to configure:

  • Create Canvas pages - Typically given to content editors and site builders
  • Edit Canvas pages - Usually the same roles as create
  • Publish Canvas pages - Consider limiting this to senior editors or administrators
  • Access Canvas AI features - If you're using AI assistance, control who has access

You can also configure:

  • Default templates for new pages
  • Allowed block types (restrict certain blocks from appearing in the sidebar)
  • Global regions that appear on all Canvas pages

Step 3: Creating Your First Canvas Page

With Canvas installed and configured, let's create your first page:

1. Navigate to Content → Add Content → Canvas Page
2. Enter a title for your page
3. Click Edit with Canvas to open the visual builder

The Canvas interface opens with three main areas:

  • Left sidebar: Contains blocks, patterns, and templates you can drag onto your page
  • Center canvas: Your working area where you build the page
  • Right sidebar: Properties panel for configuring selected components

Building Your Page Layout

Start simple with a basic text and image layout:

1. Drag a Text block from the left sidebar onto the canvas
2. Click the text block to select it
3. In the right sidebar, add your content using the rich text editor
4. Drag an Image block below your text
5. Upload or select an image from your media library

To create columns:

1. Drag a Column Layout pattern onto the canvas
2. Choose your column configuration (2-column, 3-column, etc.)
3. Drag content blocks into each column slot

Step 4: Working with Custom Components

While Canvas comes with basic blocks, its real power comes from creating custom components using Single Directory Components (SDCs). Let's build a simple call-to-action component.

Creating the Component Structure

In your custom theme, create this directory structure:

themes/custom/YOUR_THEME/components/cta/
  ├── cta.component.yml
  ├── cta.twig
  └── cta.css

Component Metadata (cta.component.yml)

name: Call to Action
description: Eye-catching CTA section with heading and button
props:
  heading:
    type: string
    title: Heading
    default: 'Ready to Get Started?'
  subtext:
    type: string
    title: Supporting Text
    default: ''
  button_text:
    type: string
    title: Button Text
    default: 'Learn More'
  button_url:
    type: string
    title: Button Link
    default: '/contact'
  background_color:
    type: select
    title: Background Color
    default: primary
    enum:
      - primary
      - secondary
      - white

Component Template (cta.twig)

<div class="cta cta--{{ background_color }}">
  <div class="cta__content">
    <h2 class="cta__heading">{{ heading }}</h2>
    {% if subtext %}
      <p class="cta__subtext">{{ subtext }}</p>
    {% endif %}
    <a href="{{ button_url }}" class="cta__button">
      {{ button_text }}
    </a>
  </div>
</div>

Component Styles (cta.css)

.cta {
  padding: 60px 20px;
  text-align: center;
}

.cta--primary {
  background-color: #0073e6;
  color: white;
}

.cta--secondary {
  background-color: #f7f7f7;
  color: #333;
}

.cta--white {
  background-color: white;
  color: #333;
  border: 1px solid #e0e0e0;
}

.cta__content {
  max-width: 800px;
  margin: 0 auto;
}

.cta__heading {
  font-size: 2.5rem;
  margin-bottom: 1rem;
}

.cta__subtext {
  font-size: 1.2rem;
  margin-bottom: 2rem;
}

.cta__button {
  display: inline-block;
  padding: 12px 30px;
  background-color: #333;
  color: white;
  text-decoration: none;
  border-radius: 4px;
  font-weight: bold;
}

.cta--primary .cta__button {
  background-color: white;
  color: #0073e6;
}

After creating these files, clear your cache (drush cr) and your new CTA component will appear in the Canvas sidebar.

Step 5: Common Mistakes to Avoid

Component Discovery Issues

The most frequent problem new Canvas users encounter is components not appearing. Here's your troubleshooting checklist:

1. Check your settings.php - Ensure $settings['extension_discovery_scan_tests'] = TRUE; is present
2. Verify file naming - Component files must follow the pattern: name.component.yml, name.twig
3. Validate YAML syntax - A single spacing error in your YAML file will prevent component loading
4. Clear caches thoroughly - Run drush cr after any component changes

Performance Pitfalls

Our experience shows that pages with more than 20 dynamic blocks can start to impact performance. Instead of adding many individual text blocks, consider:

  • Creating larger, combined components
  • Using Views blocks for dynamic content lists
  • Implementing caching strategies for complex components

Styling Conflicts

When creating custom components, namespace your CSS classes to avoid conflicts:

/* Bad - too generic */
.button { }
.content { }

/* Good - namespaced */
.cta__button { }
.hero__content { }

Mobile Responsiveness

Always test your Canvas pages on different screen sizes. Use the device preview buttons in the Canvas toolbar to check:

  • Desktop (default)
  • Tablet (768px width)
  • Mobile (375px width)

Add responsive styles to your components:

.cta__heading {
  font-size: 2.5rem;
}

@media (max-width: 768px) {
  .cta__heading {
    font-size: 1.8rem;
  }
}

Step 6: Testing and Verification

Before publishing any Canvas page, run through this verification checklist:

Content Verification

1. Preview your page using the Preview button in Canvas
2. Check all links - Click every button and link to ensure they work
3. Review text content for typos and formatting issues
4. Test forms if your page includes any form blocks

Cross-Browser Testing

Open your Canvas page in:

  • Chrome
  • Firefox
  • Safari
  • Edge

Look for:

  • Layout inconsistencies
  • JavaScript errors in the console
  • CSS rendering differences

Accessibility Checks

1. Run an accessibility scanner like axe DevTools or WAVE
2. Check heading hierarchy - Ensure proper H1, H2, H3 structure
3. Verify alt text on all images
4. Test keyboard navigation - Can you tab through all interactive elements?

Performance Testing

1. Run Google PageSpeed Insights on your published page
2. Check image sizes - Large images slow down page loads
3. Monitor Canvas render time in your browser's developer tools

User Testing

Have someone unfamiliar with your content:

1. Navigate through the page
2. Complete any calls-to-action
3. Provide feedback on clarity and usability

Working with Canvas AI Features

If you've enabled the Canvas AI assistant module (canvas_ai), you can generate layouts using natural language prompts. This feature requires configuration with an AI provider like OpenAI.

To use AI assistance:

1. Click the AI button in the Canvas toolbar
2. Type a natural description like "Create a two-column layout with a heading on the left and an image gallery on the right"
3. Review and adjust the generated layout

Keep your prompts specific and focused. Instead of "make a nice page," try "create a hero section with a blue background, white text, and a contact form below."

Advanced Component Patterns

As you become comfortable with basic components, consider these advanced patterns:

Nested Components with Slots

Create components that accept other components:

# container.component.yml
name: Container
slots:
  content:
    title: Content Area
    description: Add any components here{# container.twig #}
<div class="container">
  {{ content }}
</div>

Dynamic Data Integration

Connect components to Drupal entities:

# article-teaser.component.yml
name: Article Teaser
props:
  node_id:
    type: integer
    title: Article Node ID{# article-teaser.twig #}
{% set node = drupal_entity('node', node_id) %}
{% if node %}
  <article class="teaser">
    <h3>{{ node.title.value }}</h3>
    <p>{{ node.body.summary }}</p>
  </article>
{% endif %}

Component Variants

Create multiple visual versions of the same component:

# button.component.yml
name: Button
props:
  variant:
    type: select
    title: Button Style
    enum:
      - primary
      - secondary
      - outline

Migrating Existing Content to Canvas

If you're moving an existing Drupal site to Canvas, plan your migration carefully:

1. Audit existing page layouts - Identify common patterns
2. Create components for repeated elements - Build once, reuse everywhere
3. Start with low-traffic pages - Test your approach before migrating critical pages
4. Train your content team - Schedule hands-on sessions with Canvas

We've found that a phased migration works best, starting with new content in Canvas while maintaining existing pages, then gradually converting older content.

Conclusion

Drupal Canvas brings visual page building to Drupal without sacrificing the platform's strengths in structured content and workflows. By following this guide, you've learned how to install Canvas, create pages, build custom components, and avoid common implementation issues.

The key to success with Canvas is starting simple and gradually building your component library. Focus first on getting comfortable with the interface and basic blocks, then expand into custom components as your needs grow. Remember to test thoroughly, especially on mobile devices, and always verify your components are discoverable by checking your settings configuration.

Teams we work with report that Canvas significantly reduces their page creation time while giving content editors the independence they need. The combination of visual building and Drupal's powerful content management creates a flexible platform for sites of any size.

Setting up Drupal Canvas effectively requires careful planning around component architecture, user permissions, and performance considerations. If you're evaluating Canvas for your team's content workflow or need help creating a custom component library that matches your brand guidelines, we can help you design an implementation approach that balances flexibility with maintainability.

Share this article