Alchemy cms

Core concept

Ingredients

Ingredients are the typed fields inside an Element. Each one stores a specific kind of content. Here is one of every built-in type β€” plus a custom one.

config/alchemy/elements.yml
- name: concept_intro
  hint: true
  ingredients:
    - role: eyebrow
      type: Text
      hint: true
      default: :concept_intro_eyebrow
    - role: headline
      type: Headline
      as_element_title: true
      hint: true
      default: :concept_intro_headline
      settings:
        levels: [1, 2]
        sizes: [1, 2]
        anchor: from_value
    - role: lead
      type: Richtext
      hint: true
      default: :concept_intro_lead
      settings:
        tinymce:
          toolbar: "bold italic | alchemy_link unlink"
        sanitizer:
          tags: [p, br, strong, em, a]
          attributes: [href, target, rel, title]

Content ingredients

These store their value directly in the ingredient. They cover most day-to-day editing β€” text, formatting, choices and simple values.

Text

A single line of plain text.

A single line of text.
Headline

A heading with a chosen level (h1–h6) and visual size.

I am a Headline

Richtext

Formatted text, edited with TinyMCE.

Rich text with bold and a link.

Select

One value chosen from a fixed list.

first
Color

A colour value, stored as a hex string.

#884cbe
Datetime

A date and time.

15-06-2026 02:30pm
Boolean

A true/false checkbox.

True
Number

A numeric value.

42
Html

A raw HTML snippet.

Highlighted with raw HTML

config/alchemy/elements.yml
- name: ingredient_group
  hint: true
  ingredients:
    - role: headline
      type: Headline
      hint: true
      default: :ingredient_group_headline
      settings:
        levels: [2, 3]
        sizes: [2, 3]
    - role: lead
      type: Richtext
      hint: true
      default: :ingredient_group_lead
  nestable_elements:
    - text_ingredient
    - headline_ingredient
    - richtext_ingredient
    - select_ingredient
    - color_ingredient
    - datetime_ingredient
    - boolean_ingredient
    - number_ingredient
    - html_ingredient
    - picture_ingredient
    - audio_ingredient
    - video_ingredient
    - file_ingredient
    - link_ingredient
    - page_ingredient
    - node_ingredient
    - event_ingredient

Media ingredients

These reference an asset from the library β€” a picture, or an uploaded audio, video or file β€” rather than storing the media itself.

Picture

A reference to an image, with cropping and srcset.

Photo-02
Audio

An uploaded audio attachment, rendered as a player.

Music: Komiku β€” β€œTale on the Late (Main Theme)”, released under CC0 via Wikimedia Commons. Thank you!

Video

An uploaded video attachment, rendered as a player.

Clip: an aerial view of Mt Hood, released under CC0 via Wikimedia Commons. Thank you!

File

A link to an uploaded file attachment.

Download the sample document

This sample document was written for this demo (public domain).

config/alchemy/elements.yml
- name: ingredient_group
  hint: true
  ingredients:
    - role: headline
      type: Headline
      hint: true
      default: :ingredient_group_headline
      settings:
        levels: [2, 3]
        sizes: [2, 3]
    - role: lead
      type: Richtext
      hint: true
      default: :ingredient_group_lead
  nestable_elements:
    - text_ingredient
    - headline_ingredient
    - richtext_ingredient
    - select_ingredient
    - color_ingredient
    - datetime_ingredient
    - boolean_ingredient
    - number_ingredient
    - html_ingredient
    - picture_ingredient
    - audio_ingredient
    - video_ingredient
    - file_ingredient
    - link_ingredient
    - page_ingredient
    - node_ingredient
    - event_ingredient

Reference ingredients

These point at something else in the system: a link target, another page, or a menu node.

Link

A link to a page, URL, file or email.

An example link
Page

A reference to another Alchemy page.

Elements
Node

A reference to a menu node.

config/alchemy/elements.yml
- name: ingredient_group
  hint: true
  ingredients:
    - role: headline
      type: Headline
      hint: true
      default: :ingredient_group_headline
      settings:
        levels: [2, 3]
        sizes: [2, 3]
    - role: lead
      type: Richtext
      hint: true
      default: :ingredient_group_lead
  nestable_elements:
    - text_ingredient
    - headline_ingredient
    - richtext_ingredient
    - select_ingredient
    - color_ingredient
    - datetime_ingredient
    - boolean_ingredient
    - number_ingredient
    - html_ingredient
    - picture_ingredient
    - audio_ingredient
    - video_ingredient
    - file_ingredient
    - link_ingredient
    - page_ingredient
    - node_ingredient
    - event_ingredient

Custom ingredients

Alchemy's built-in types cover most needs, but you can define your own. This Event ingredient is a custom type that references a record from our Event model, managed in the Events admin module.

Event

A custom ingredient type referencing an Event record.

December 10, 2026

Year-end Community Call

πŸ“ Online

Roadmap, thanks and open Q&A to close out the year.

config/alchemy/elements.yml
- name: ingredient_group
  hint: true
  ingredients:
    - role: headline
      type: Headline
      hint: true
      default: :ingredient_group_headline
      settings:
        levels: [2, 3]
        sizes: [2, 3]
    - role: lead
      type: Richtext
      hint: true
      default: :ingredient_group_lead
  nestable_elements:
    - text_ingredient
    - headline_ingredient
    - richtext_ingredient
    - select_ingredient
    - color_ingredient
    - datetime_ingredient
    - boolean_ingredient
    - number_ingredient
    - html_ingredient
    - picture_ingredient
    - audio_ingredient
    - video_ingredient
    - file_ingredient
    - link_ingredient
    - page_ingredient
    - node_ingredient
    - event_ingredient