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

# Kickstart Command {#cb-skeleton}

The command `make:content-block` creates a bare-minimum Content Block.
This is actually an alias for `content-blocks:create`, which is inspired
by the `EXT:make` extension.

## Options {#options}

-   **content-type**

    -   *Type:* string
    -   *Required:* true
    -   *Default:* content-element

    `content-element`, `page-type` or `record-type`

-   **vendor**

    -   *Type:* string
    -   *Required:* true
    -   *Default:* (vendor of root composer.json)

    Your vendor name. Lowercase, separated by dashes.

-   **name**

    -   *Type:* string
    -   *Required:* true

    Your Content Block name (this is not the title). Lowercase, separated by dashes.

-   **extension**

    -   *Type:* string
    -   *Required:* true

    > [!NOTE]
    > If you use the step-by-step process to navigate through the creation,
    > only locally installed extensions will be displayed. In case you have
    > a package installed via vcs, you have to provide it via CLI option.

    The host extension, where to store your new Content Block.

-   **title**

    -   *Type:* string

    The human-readable title for your Content Block.

-   **type-name**

    -   *Type:* string|int

    Custom type name. Required for content-type `page-type` (must be int).

    > [!IMPORTANT]
    > The `type-name` option is required and has to be an integer value, if you
    > choose the `page-type` content type.

-   **skeleton-path**

    -   *Type:* string
    -   *Default:* content-blocks-skeleton

    A path relative to the current working directory, which holds a skeleton of
    a Content Block. Only needed, if you want to use a different name or path
    other than `content-blocks-skeleton`.

    -   `content-blocks-skeleton`
        -   `content-element`
            -   `assets`
                -   `icon.svg`
            -   `templates`
                -   `backend-preview.fluid.html`
                -   `frontend.fluid.html`
        -   `page-type`
        -   `record-type`

    Learn more about [Content Blocks skeleton](https://docs.typo3.org/permalink/friendsoftypo3/content-blocks:cb-skeleton-path@main)

-   **config-path**

    -   *Type:* string
    -   *Default:* content-blocks.yaml

    A path to a yaml config file path, which contains defaults for this command.

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

This will give you an overview of all available options:

```bash
vendor/bin/typo3 make:content-block --help
```

Example creating a Content Block skeleton in one line:

```bash
vendor/bin/typo3 make:content-block --content-type="content-element" --vendor="my-vendor" --name="my-name" --title="My shiny new Content Element" --extension="my_sitepackage"
```

Alternatively, the command can guide you through the creation by omitting the
required options:

```bash
vendor/bin/typo3 make:content-block
```

On non-composer installations use:

```bash
typo3/sysext/core/bin/typo3 make:content-block
```

Example interaction:

```bash
Choose the content type of your content block [Content Element]:
[content-element] Content Element
[page-type      ] Page Type
[record-type    ] Record Type
> content-element

Enter your vendor name:
> my-vendor

Enter your content block name:
> my-content-block-name

Choose an extension in which the content block should be stored:
[sitepackage] Test Package for content blocks
> sitepackage
```

## After running the make command {#after-running-the-make-command}

In order to create newly added database tables or fields, you have to clear the
caches and then run the database compare. You can do the same in the TYPO3
Backend by using the Database Analyzer. Repeat this step every time you add new
fields to your Content Block definition.

```bash
vendor/bin/typo3 cache:flush -g system
vendor/bin/typo3 extension:setup --extension=my_sitepackage
```

### Content Block skeleton {#cb-skeleton-path}

<!-- TODO: no Markdown rendering for "versionadded" -->

It is now possible to define a "skeleton" for your Content Blocks. To do this
create a folder called `content-blocks-skeleton` in your project root. This
folder may contain default templates or assets for one or more Content Types. It
is used as a base when creating new types with the `make:content-block`
command. In order to add a skeleton for Content Elements, create a folder called
`content-element` within that directory. Then, the structure is identical to
your concrete Content Block as you know it. You may place any files there. They
will simply be copied when a new Content Block is created. It is not possible to
define `language/labels.xlf` or `config.yaml` this way, as they are dynamically
generated based on your arguments.

-   `content-blocks-skeleton`
    -   `content-element`
        -   `assets`
            -   `icon.svg`
        -   `templates`
            -   `backend-preview.fluid.html`
            -   `frontend.fluid.html`
    -   `page-type`
    -   `record-type`

In case you want to name the skeleton folder differently or place it somewhere
else, you can override the default folder by providing the option
`--skeleton-path` with a relative path to your current working directory.

**You can use an alternative skeleton path**

```shell
vendor/bin/typo3 make:content-block --skeleton-path="my-alternative-skeleton-path"
```

### Defaults {#cb-defaults}

<!-- TODO: no Markdown rendering for "versionadded" -->

It is now possible to define default options for this command via a yaml config
file. By default, the command looks for a file called `content-blocks.yaml` in
the current working directory. The location and name can be overridden with the
`--config-path` option.

```shell
vendor/bin/typo3 make:content-block --config-path="some-folder/my-config.yaml"
```

An example yaml config file contents may look like this:

**content-blocks.yaml**

```yaml
vendor: nh
extension: content_blocks_examples
content-type: record-type
skeleton-path: folder1/content-block-skeletons
```

This config sets defaults for `vendor`, `skeleton-path`,
`extension` and `content-type`. These are all possible options right
now.

Now, whenever you run this command, these options will be set by default. This
does not mean, the questions for these options will be skipped, only that they
are the default value, if you just press `Enter` without any input. They will
be visible in brackets at the very right `[default value]`.

<!-- TODO: no Markdown rendering for "versionadded" -->

The content-blocks.yaml file supports arbitrary default values for the generated
config.yaml file.

Add a `config` key followed by a Content Type identifier. In this case,
we set default values for Content Elements, so we use `content-element`.
You can also set default values for `page-type`, `record-type` or `file-type`.
Values defined in here override the generated configuration by the command.

```yaml
config:
  content-element:
    basics:
      - TYPO3/Appearance
      - TYPO3/Links
    group: my_group
    prefixFields: true
    prefixType: vendor
```
