• Improve ambiguous template pattern resolution. See Templates for more details.

  • Allow setting template backend options. See Templates for more details. As part of this change, the Jinja2 backend now sets trim_blocks and lstrip_blocks by default to True.


  • Add a --port option to liara serve to change the listen port.

  • Add an ignore_files option to ignore certain file patterns. This is particularly useful if an editor creates lock or backup files that should be ignored. See Configuration for more details.

  • The file discovery process will ignore invalid index and resource files instead of failing with an exception. An error will be logged to help find the problematic files.

  • Fix liara list-content not showing the node type on _index nodes.

  • Handling of metadata has changed:

    • Document metadata can be placed in a separate .meta file instead of being part of the document itself. See Content for more details.

    • Separate .meta files for metadata are no longer supported in the static and resource directory. This previously didn’t work as expected – resource files with .meta files associated had the .meta file processed (which would cause a failure), and static files had the .meta file added as a separate static file. From this release on, .meta files don’t get any special treatment when placed in the static or resource directory trees. Static files inside the content directory continue to support metadata files. See Content for more details.


  • Mako is now installed by default, and the mako extra is gone. If you installed Liara using liara[mako], please switch to liara going forward.

  • liara.template.Page.content now returns an empty string for IndexNode instances. Previously, it would raise an exception.

  • liara quickstart gained a new option, --template-backend, which allows selecting between jinja2 and mako templates.

  • The collection sort order can be reversed now. See Collections for more details.


  • Bump minimal required Python version to 3.8.

  • liara serve now uses the cache configuration specified by the user instead of always using a filesystem cache with fixed paths.

  • Add RedisCache, which uses Redis as the storage backend. Using Redis in a shared environment allows multiple clients to benefit from the cache. Additionally, the Redis cache allows for cache entries to expire, so it won’t accumulate garbage over time (i.e. draft posts which never get published, etc.) See Configuration for more details on how to enable Redis. Redis also requires Liara to be installed with the [redis] option.


  • Fix liara quickstart not working.

  • Fix a bug when fixing up timezones while using the zoneinfo package for timezone data.


  • Deprecate liara.template.Page.meta in favor of liara.template.Page.metadata (which was newly added in this version) for consistency with liara.template.SiteTemplateProxy.metadata.

  • Use the logger in liara serve instead of printing directly to the console for log messages. The default listen URL will be still printed if showing the browser is disabled.

  • Set the Content-Type header in liara serve. This fixes an issue with Chrome/Edge where SVG images would not work as they were served without a content type.

  • Update jinja2 dependency to 3.0. This provides access to new Jinja2 features like required blocks.

  • Update click dependency to 8.0.


  • Fix plugins not being packaged.


  • Introduce a new plugin system. This moves the has-pending-document command into a new plugin and adds signals to interact with Liara’s processing. See Plugins for details.

  • Remove liara.version.version. Use the standard liara.__version__ variable instead, which was already present in earlier versions.


  • Add a server_rule_only option to prevent the creation of redirection nodes and use the redirection paths verbatim.


  • Add has-pending-document to the command line. This will check if there is any content which is filtered by the DateFilter. This is useful for cron-based deploys which try to not rebuild if there are no content changes, as there is no other way to find out if all content in a given revision has been published.


  • Fix liara create-config not working.


  • Add Sqlite3Cache, which allows caching everything into a single file instead of one file per entry.

  • Add a bytecode cache for the Jinja2TemplateRepository.

  • Fix generated nodes not getting generated when using liara serve.

  • Reduce debug spew when stopping liara serve using ^C.



  • Fix a packaging issue.


  • Improve document handling: Documents without a trailing newline are now supported, previously they would cause an error.

  • Improve configuration: Empty configuration files are now supported.

  • Fix list-files requiring a type to be specified.

  • Add exclude().

  • Override base_url when serving locally. This was previously documented to work, but not implemented. As part of this change, set_metadata_item() was added.


liara 2.0 is a complete rewrite of liara, with no shared code with the 1.x series. liara 2 is now template & content driven, and no longer just a library which simplifies static page generation. Unlike the 1.x series, it is possible to use liara 2 without writing any Python code.