> For the complete documentation index, see [llms.txt](https://www.one.thezero.club/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.one.thezero.club/guide/installation/folder-structure.md).

# Folder structure

The goal is to keep the theme itself separate from your project-specific customizations, making updates easier and helping you maintain a cleaner project structure.

Don't worry, this approach is fully supported by Kirby and works exactly like any other Kirby website.

***

### How Zero One Is Organized

Unlike a standard Kirby installation, Zero One is delivered as a plugin.

The complete theme, including its blueprints, templates, snippets, controllers, models, collections, and functionality, is located in:

```
site/plugins/zero-one/
```

This directory contains the actual theme and should be considered the Zero One core.

In addition, Zero One provides a dedicated customization layer located in:

```
site/theme/
```

This directory is intended for your own project customizations and extensions.

***

### What Is The `site/theme` Folder For?

The `site/theme` directory allows you to:

* Override existing Zero One files.
* Add your own templates.
* Add your own snippets.
* Add custom blueprints.
* Add custom controllers and models.
* Extend the functionality of your project without modifying the theme itself.

Think of `site/theme` as your project's workspace, while `site/plugins/zero-one` contains the original theme files.

***

### Why Is This Better?

This approach offers several advantages:

* Cleaner separation between theme files and project files.
* Easier Zero One updates.
* Safer customizations.
* Reduced risk of accidental file overwrites.
* Better long-term maintainability.

Instead of directly modifying the Zero One theme, your project can build on top of it.

***

### Theme Overrides

One of the most powerful features of Zero One is the ability to override theme files.

For example:

```
site/theme/snippets/footer.php
```

can override:

```
site/plugins/zero-one/snippets/footer.php
```

When an override exists, Zero One automatically uses your version instead of the original file.

This allows you to customize the theme safely without modifying the plugin itself.

{% hint style="info" %}
To learn more about overriding files and extending the theme, see the [Theme Extending Guide](/guide/theme-extending.md).
{% endhint %}

***

### Adding Your Own Files

The `site/theme` directory isn't limited to overrides.

You can also use it for completely custom files that don't exist in Zero One at all.&#x20;

{% hint style="info" %}
To learn more about adding new files on top of the Zero One theme, see the [Adding new templates guide](/guide/theme-extending/adding-new-templates.md) and [Adding new Content block guide](/guide/theme-extending/adding-new-content-block-layout-builder.md).&#x20;
{% endhint %}

These files will work alongside the Zero One theme and can be used to build project-specific functionality.

These files will work alongside the Zero One theme and can be used to build project-specific functionality.

***

### Which Files Should I Modify?

As a general rule:

✅ Safe to customize:

```
site/theme/
site/config/
content/
assets/
```

❌ Avoid modifying directly:

```
site/plugins/zero-one/
```

Direct changes inside the plugin may be lost during future Zero One updates.

Instead, use the [Theme Extending system](/guide/theme-extending.md) whenever possible.

***

### Recommended Workflow

A typical Zero One project follows this approach:

```
site/plugins/zero-one/   ← Zero One core
site/theme/              ← Your customizations
site/config/             ← Your configuration
content/                 ← Your content
assets/                  ← Your custom assets
```

Keeping these responsibilities separated makes projects easier to maintain, easier to update, and easier to troubleshoot.

{% hint style="info" %}
If you're unsure whether a customization belongs inside `site/plugins/zero-one` or `site/theme`, the answer is almost always `site/theme`.
{% endhint %}
