---
title: "Introduction"
manual: "Content Blocks"
version: "main"
permalink: "https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:introduction@main"
source: "Introduction/Index.rst"
rendered: "2026-09-22T14:15:39+00:00"
---

# Introduction {#introduction}

A **Content Block** is a simplified, **component-based** approach of defining
Content Types in TYPO3. This includes Content Elements, Page Types and generic
Record Types. A YAML file serves as a central definition. Content Blocks acts
hereby as a compiler for more complex low-level code. It adheres to best
practices by default, significantly reducing boilerplate code.

> [!NOTE]
> Content Blocks started out as a layer on top of TYPO3 and still is. The
> long-term goal is to integrate the concept of a Content Block into the Core
> as a first-class citizen. As of now, some knowledge of the underlying Core
> API is required to fully grasp the possibilities of this extension and how
> to customize it.

For more technical, historical and conceptual insights about Content Blocks we
recommend these further readings:

-   [About Content Elements](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:about-content-elements@main)
-   [Defining Content Types the Core way](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:core-content-types@main)
-   [History](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:cb-history@main)

## Quick start {#introduction-quick-start}

If you use the [Site Package Builder](https://get.typo3.org/sitepackage/new/)
with the "Site Package Tutorial" package the generated site package contains
two example Content Blocks. They are also explained in the
[Site Package Tutorial, chapter Custom Content Blocks](https://docs.typo3.org/m/typo3/tutorial-sitepackage/14.3/en-us/ContentBlocks/Index.html#content-blocks).

## Definition {#introduction-definition}

The goal is to **encapsulate** all resources belonging to the Content Block
inside one **component**. This leads to re-usable components, which can be
easily copy-pasted into other projects.

-   `my-content-block`
    -   `assets`
        -   `icon.svg`
    -   `language`
        -   `labels.xlf`
    -   `templates`
        -   `backend-preview.fluid.html`
        -   `frontend.fluid.html`
    -   `config.yaml`
    -   `setup.typoscript`
    -   `page.tsconfig`

-   Learn more about the [Content Block definition](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:cb-definition@main)

## config.yaml {#introduction-config}

This file is the **basis** for the definition. It defines **exactly** one
Content Type. Using YAML over PHP includes a wider range of people, which is
able to modify Content Blocks without the need of a developer.

**EXT:some_extension/ContentBlocks/ContentElements/content-block-name/config.yaml**

```yaml
name: vendor/content-block-name
fields:
  - identifier: my_text_field
    type: Text
```

-   Refer to the [YAML reference](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:yaml-reference@main) for a complete overview.
-   Learn more about [reusing fields](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:cb-reuse-existing-fields@main)

## Registration {#introduction-registration}

The registration works by simply placing a Content Block into a dedicated
folder. For this purpose an already loaded extension is required as a host.
Depending on the Content Type the Content Block is put into a predestinated
sub-folder.

-   `my_extension`
    -   `Classes`
    -   `Configuration`
    -   `ContentBlocks`
        -   `ContentElements`
            -   `content-block-1`
            -   `content-block-2`
        -   `PageTypes`
            -   `content-block-3`
            -   `content-block-4`
        -   `RecordTypes`
            -   `content-block-5`
            -   `content-block-6`
    -   `ext_emconf.php`
    -   `composer.json`

-   Kickstart a Content Block with the [make:content-block command](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:cb-skeleton@main)
-   Learn more about the [registration process](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:cb-installation@main)

## Terminology {#introduction-terminology}

**Content Blocks** is the name of the extension and generates the code for the Core API.

A single **Content Block** is a small chunk of information, which defines exactly one Content Type.

A **Content Type** is an entity in TYPO3, which defines a set of fields and their behavior.

A **Content Element** is a special Content Type, which has a frontend rendering definition.

A **Page Type** is a special Content Type, which defines the behavior of a web page.

A **Record Type** is a generic Content Type.

```plantuml
object ContentBlock
object ContentType
object ContentElement
object PageType
object RecordType

ContentBlock <|-- ContentType
ContentType <|-- ContentElement
ContentType <|-- PageType
ContentType <|-- RecordType
```
