---
title: "Generate a site package"
manual: "Site Package Tutorial"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3sitepackage:site-package-builder@main"
source: "MinimalExample/Index.rst"
rendered: "2026-09-24T15:01:46+00:00"
---

# Generate a site package {#site-package-builder}

A site package is a TYPO3 extension that you can customize to contain the configuration,
templates, assets, etc, for your site. It therefore acts as a kind of main "theme" for
your site.

So we start by generating a basic extension.

-   [Generate and download a site package](https://docs.typo3.org/permalink/t3sitepackage:generate-and-download-a-site-package@main)
-   [Extension installation](https://docs.typo3.org/permalink/t3sitepackage:extension-installation-1@main)
-   [A look at the basic site set](https://docs.typo3.org/permalink/t3sitepackage:a-look-at-the-basic-site-set@main)
-   [The site set as TypoScript Provider](https://docs.typo3.org/permalink/t3sitepackage:the-site-set-as-typoscript-provider@main)
-   [The TYPO3 Fluid version](https://docs.typo3.org/permalink/t3sitepackage:the-typo3-fluid-version@main)
-   [Preview page](https://docs.typo3.org/permalink/t3sitepackage:preview-page@main)
-   [Composer configuration composer.json](https://docs.typo3.org/permalink/t3sitepackage:composer-configuration-file-composer-json@main)

## Generate and download a site package {#minimal-site-package-builder}

You can download a site package using the official Site Package Builder at
[https://get.typo3.org/sitepackage](https://get.typo3.org/sitepackage) or by using curl.

You can choose between three site packages types:

-   Bootstrap Package: This site package comes with a ready-to-use theme
-   Fluid Styled Content: A minimal site package where you can build your own
    custom theme.
-   Site Package Tutorial: Contains all the files that are used as examples in
    this tutorial.

To follow this tutorial, choose the "Site Package Tutorial".

Download and unzip the file into the
`packages/my_site_package` folder and [install it](https://docs.typo3.org/permalink/t3sitepackage:extension-installation@main).

## Extension installation {#extension-installation}

This tutorial assumes that your TYPO3 instance is a brand new installation
without any themes, templates, pages or content.

We assume that you are working on your local machine using DDEV and that you have
followed these steps:

[Installing TYPO3 with DDEV](https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Installation/Install.html#installation-ddev-tutorial)

### Install the site package you just created {#extension-installation-site-package}

If you have used the Site Package Builder, the `packages/my_site_package/README.md` file
contains instructions on how to install your site package.

Move / unzip your `my_site_package/` extension folder into the `packages/`
folder. Then *require* the extension via Composer using the
package name defined in the site package extension's `composer.json` (now located
at `packages/my_site_package/`)

**packages/my-site-package/composer.json**

```json
{
   "name": "my-vendor/my-site-package"
}
```

*require* it with:

**Execute in directory page_root**

```bash
ddev composer require my-vendor/my-site-package:@dev
```

### Project file structure {#extension-installation-project-structure}

Your project should now have the following structure:

-   .ddev
    -   [\[Some configuration\]](https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Installation/Install.html#installation-ddev-tutorial)
-   config
    -   sites
        -   main
            -   config.yaml
-   packages
    -   my_site_package
        -   \[All sitepackage files\]
        -   composer.json
-   public
    -   fileadmin
        -   \[Images for content, PDFs, ...\]
    -   \[public files needed by TYPO3\]
-   var
    -   log
    -   \[private files needed by TYPO3\]
-   vendor
    -   \[All installed packages, including TYPO3 source\]
-   composer.json
-   composer.lock

## A look at the basic site set {#minimal-extension-siteset}

The site package built by Site Package Builder comes with a ready-to-use
site set in folder `packages/my_site_package/Configuration/Sets/SitePackage/`.

The set itself is defined in the `config.yaml` file inside this folder:

**packages/my-site-package/Configuration/Sets/SitePackage/config.yaml**

```yaml
name: t3docs/site-package
label: 'Site Package'
dependencies:
  - typo3/fluid-styled-content
  - typo3/fluid-styled-content-css

```

You will learn more about site sets in chapter
[the site set](https://docs.typo3.org/permalink/t3sitepackage:site-set@main).

The TYPO3 Explained complete reference is here:
[Site sets](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/SiteHandling/SiteSets/Index.html#site-sets).

During installation of your site package a page tree with example content was
created. The site configuration folder is `config/sites/main`.

If you look at the site configuration in module **Sites > Setup**
it should already contain the "My Site package" set. Other sets can be added here,
for example [`typo3/cms-form`](https://packagist.org/packages/typo3/cms-form).

![Screenshot demonstrating adding the "My Site package" to the site main](AddSiteSet.png)

If you haven't made any changes, the site configuration should look like this:

**config/sites/main/config.yaml**

```yaml
base: '/'
dependencies:
  - t3docs/site-package
languages:
  -
    title: English
    enabled: true
    languageId: 0
    base: /
    locale: en_US.UTF-8
    navigationTitle: English
    flag: us
rootPageId: 1
websiteTitle: 'Site Package'

```

## The site set as TypoScript Provider {#make-typoscript-available}

TYPO3 uses TypoScript as a configuration language. TypoScript is used to
configure templates created with the Fluid templating language.

A file called `packages/my_site_package/Configuration/Sets/SitePackage/setup.typoscript`
provides the TypoScript for your site. This file contains imports of files from
folder `packages/my_site_package/Configuration/Sets/SitePackage/TypoScript`
(which contain the actual configuration).

Learn more about the TypoScript syntax used here in chapter
[A minimal page created by pure TypoScript](https://docs.typo3.org/m/typo3/tutorial-getting-started/main/en-us/Concepts/TypoScript/Index.html#typoscript)
in the "Getting Started Tutorial".

## The TYPO3 Fluid version {#minimal-extension-fluid}

File `packages/my_site_package/Configuration/Sets/SitePackage/TypoScript/page.typoscript`
below defines the rendering of the site with Fluid templates:

**packages/my_site_package/Configuration/Sets/SitePackage/TypoScript/page.typoscript**

```typoscript
page = PAGE
page {
    10 = PAGEVIEW
    10 {
        paths {
            0 = EXT:site_package/Resources/Private/Templates/
            10 = {$SitePackage.template_path}
        }
    }
    shortcutIcon = {$SitePackage.favicon}
}

```

Line 6 sets the directory the Fluid Templates are loaded from. Line 7 sets a value
from the site package settings.

Learn more about using Fluid templates in chapter
[Fluid Templates](https://docs.typo3.org/permalink/t3sitepackage:fluid-templates@main).

## Preview page {#cm-preview-page}

Whenever you make changes to Fluid templates or TypoScript files,
you need to **Flush frontend caches** in the menu in the
top bar before previewing the page:

![](../Images/AutomaticScreenshots/FlushFrontendCaches.png)

You can then preview your page by clicking on the **View webpage** button
in the page module.

## Composer configuration `composer.json` {#extension-configuration-composer}

In [Create a minimal TYPO3 extension](https://docs.typo3.org/permalink/t3sitepackage:minimal-extension@main)
a file called `composer.json` was created for you:

**packages/my_site_package/composer.json**

```json
{
    "name": "t3docs/site-package",
    "type": "typo3-cms-extension",
    "description": "Site Package - This site package is an example used to understand the TYPO3 Site Package Tutorial.",
    "homepage": "https://docs.typo3.org/permalink/t3sitepackage:start",
    "license": [
        "GPL-2.0-or-later"
    ],
    "keywords": [
        "TYPO3 CMS"
    ],
    "require": {
        "typo3/cms-core": "^14.3",
        "typo3/cms-fluid-styled-content": "^14.3",
        "friendsoftypo3/content-blocks": "^2.0"
    },
    "suggest": {

    },
    "autoload": {
        "psr-4": {
            "T3docs\\SitePackage\\": "Classes/"
        }
    },
    "extra": {
        "typo3/cms": {
            "extension-key": "site_package",
            "version": "1.0.0",
            "Package": {
                "providesPackages": {}
            }
        }
    }
}

```

At the top of the `composer.json` file we see the Composer package name
`my-vendor/my-site-package` (with a dash) and at the bottom we see the TYPO3
extension key in the extra section - `my_site_package` (with an underscore).
The Composer "name" consists of a vendor name followed by a forward slash and the
lowercase extension name with dashes.

When you reference files in your extension use your extension key, for
example when setting your favicon in TypoScript:

**package/my-site-package/Configuration/Sets/SitePackage/setup.typoscript**

```typoscript
page {
    shortcutIcon = EXT:my_site_package/Resources/Public/Icons/favicon.ico
}
```
