Twig templating support for Kirby CMS

Installs: 13 861

Dependents: 0

Suggesters: 0

Security: 0

Stars: 46

Watchers: 5

Forks: 8

Open Issues: 0


4.1.7 2022-10-05 08:11 UTC


  • Adds support for Twig templates to Kirby CMS (3.0+).
  • PHP templates still work, you don’t have to rewrite them if you don’t want to.

What it looks like


<?php /* site/templates/hello.php */ ?>
<h1><?= $page->title() ?></h1>
<?php foreach ($page->children() as $child): ?>
  <li><a href="<?= $child->url() ?>"><?= $child->title() ?></li>
<?php endforeach; ?>


{# site/templates/hello.twig #}
<h1>{{ page.title }}</h1>
{% for child in page.children() %}
  <li><a href="{{ child.url }}">{{ child.title }}</li>
{% endfor %}



Download and copy this repository to /site/plugins/kirby-twig.

Git submodule

git submodule add site/plugins/kirby-twig


composer require amteich/kirby-twig


Page templates

Now that the plugin is installed and active, you can write Twig templates in the site/templates directory. For example, if the text file for your articles is named post.txt, you could have a post.twig template like this:

{% extends 'layout.twig' %}
{% block content %}
    <h1>{{ page.title }}</h1>
    {{ page.text.kirbytext | raw }}
{% endblock %}

See the {% extends '@templates/layout.twig' %} and {% block content %} parts? They’re a powerful way to manage having a common page layout for many templates, and only changing the core content (and/or other specific parts). Read our Twig templating guide for more information.

Hint: Accessing pagemethods instead of public variables

Twig calls to specific methods, like for instance page.children sometimes return NULL. This can occur, if there is also a public variable which is only initialized after calling the corresponding method.

{{ page.children }} returns NULL, because the public variable is returned. Please call the method instead like this: {{ page.children() }}.


You can find a full list of options in the options documentation.

More documentation




  • Maintainer: Christian Zehetner
  • Twig library: Fabien Potencier and contributors / License
  • Twig plugin for Kirby 2: Florens Verschelde