🚀 A new era: Kirby 4 Get to know
Skip to content

Kirby 3.5


Builder + Editor = Blocks

A match made in heaven

Our brand-new Blocks field is the perfect solution for complex single-column layouts and long-form text.

It brings the best of the Editor and the Builder plugins into the core. Combining a great WYSIWYG editing experience with fully customizable blocks. Learn more →

The new blocks field
The new layouts field


Yes you can

Together with the new Blocks field we are also introducing a powerful new Layout field. Arrange blocks in multiple columns and build complex page layouts. Assign custom layout settings and fine-tune the generated HTML in your templates. Learn more →


There’s more …

Date & Time

Date & Time

The new date and time fields are a joy to work with and open completely new ways to enter dates with custom date formats and intervals.

Learn more →

Writer field

Writer field

You don’t need the full power of the Blocks? Maybe just some inline HTML? Then the new Writer field is here for you. Create single-line HTML with formats like bold, italic, underline or links.

Learn more →

List field

List field

The new list field can be used if you want to create simple ordered or unordered lists in a more visual way than with Markdown.

Learn more →



The Panel search has been redesigned and now shows nice previews for pages, files and users.

Title & URL

Title & URL

Changing the page title or the page URL is now done in the same dialog. With this simplified workflow you can instantly see when your page title and slug no longer match and should be updated.

Status icons

Status icons

Kirby's page status icons now have distinctive forms to make them accessible for people with color blindness.

New starterkit

New starterkit

We completely overhauled Kirby’s Starterkit to feature a new design together with the new blocks and layout fields.

Learn more →

More new features

  • Added I18n::formatNumber() function
  • It's now possible to pass nobody to $kirby->impersonate() to switch to a user without permissions.
  • New $user->nameOrEmail() method
  • Interval handling for the calendar component
  • More detailed accept options for file blueprints
  • New UI kit components
    • New dialogs to sort pages and files
    • New help option for headline and info fields
    • New k-tabs component
    • New k-overlay component
    • New k-drawer component
    • New k-form-drawer component
    • New k-loader component
    • New k-user-info component
    • New k-reset-password-view
    • New k-writer
    • New k-blocks
  • New icons
    • blank
    • cancel-small
    • circle-half
    • circle-nested
    • live
    • road-sign
  • New logs root (https://kirby.nolt.io/122) #2875


  • Support for PHP 8
  • Updated translations
  • Support for hashes in router links #2941
  • Better structure field preview for date + time field
  • Accidental writes when sorting collections are now blocked #2475
  • Enhanced typography in the info text of files and pages sections
  • Email: Support global debugging
  • The template in the page creation dialog is only shown if there's more than one option
  • The dropdown in the files field now opens automatically when you click on an empty files field
  • Callback support for Collection::filterBy()
  • $helper.string.template supports array length and is now case insensitive
  • Unified Collection methods (filter, sort, group)
  • Kirby\Cms\App: Option to create a local-only instance #2555
  • New Locale class for PHP locale handling and consistent locale formats in locale option #2893
  • Better README.md and CONTRIBUTING.md
  • Updated JS dependencies
  • Additional Japanese slug rules
  • Core session keys are now prefixed with kirby.
  • Better error messages in the login form when debug mode is enabled
  • The k-empty component is now automatically converted to a button if there's a click handler.
  • Concurrent sort API calls are now prevented. #2863
  • Faster unit tests
  • We are now using Cypress for frontend tests.
  • Faster file cache access
  • Better debouncing of input events to increase performance

Bug fixes

  • Fixed translation / slug rule loading #2230
  • Fixed disappearing topbar on custom view routes #2932
  • Fixed broken error messages for required fields #2917
  • Fixed pagination error in Structure field when duplicating items
  • Fixed item index on delete for structure field #2887
  • Fixed sorting in the files section when the section is not sortable #2690
  • Panel views can be replaced in your plugins again. #2506
  • You can extend nested Vue components in your plugins. #1438

Breaking changes

We try to avoid breaking changes as much as we can. But we also put a lot of effort in keeping our technical debt in Kirby as low as possible. Sometimes such breaking changes are necessary to move forward with a clean code base.

You might wonder why there are breaking changes in a minor release according to Semantic Versioning.

We stick to the following versioning scheme:


This release is Kirby (major release 5 of Kirby 3)

Traditionally, we combine patch and minor releases though and only need the fourth versioning level for regression fixes.

Required PHP Version

With this release we drop support for PHP 7.2, which has reached end of life. But we also introduce support for the brand-new stable version of PHP 8.0, which has been released on December 1st.

Date field format option

3.5.0 is dropping the format option of the date field. This is a breaking change which we will reverse in 3.5.1.

accept option for file blueprints

If no custom accept restrictions are defined in the file blueprint, Kirby will now limit the accepted uploads to the types image, document, archive, audio and video by default. This protects your sites against unexpected uploads like code files that could be used to attack the server or the visitor's browsers.

You can customize the accepted file types in the file blueprint.

Removed methods

The following methods have been marked as deprecated since Kirby 3.0.0 and are now removed.

Removed Use instead
$file->meta() $file->content()
$file->rename() $file->changeName()
$languages->findDefault() $languages->default()
$page->hasInvisibleChildren() $page->hasUnlistedChildren()
$page->hasNextVisible() $page->hasNextListed()
$page->hasNextInvisible() $page->hasNextUnlisted()
$page->hasPrevInvisible() $page->hasPrevUnlisted()
$page->hasPrevVisible() $page->hasPrevListed()
$page->hasVisibleChildren() $page->hasListedChildren()
$page->nextVisible() $page->nextListed()
$page->nextInvisible() $page->nextUnlisted()
$page->prevVisible() $page->prevListed()
$page->prevInvisible() $page->prevUnlisted()
$page->isInvisible() $page->isUnlisted()
$page->isVisible() $page->isListed()
$pages->invisible() $pages->unlisted()
$pages->visible() $pages->listed()
Deprecated methods

Deprecated methods will be removed in a future version. Please update your code accordingly.

Deprecated Use instead
$page->sort() $page->changeSort()

Thank you

A huge thank-you to Tim Ötting for creating and maintaining the fabulous Builder plugin. Tim agreed that we could use his plugin as inspiration for our new Blocks field as a replacement for his great plugin. Your work really means a lot to us, Tim!

Thank you to all the contributors who helped with pull requests, translations and tests for this release. Without you, it wouldn't be possible.

Thank you to our amazing community for your ongoing support. Without all your feedback, patience and passion, Kirby wouldn't be where it is today! 💛