# Compared with other languages

> What Kiln has next to Twig, Nunjucks, LiquidJS and Handlebars.

Kiln has every feature most sites use from Twig, plus async data, server islands, typed props, render limits and tooling. This page compares it with Twig and the most popular JavaScript template languages.

- Has it
- Partly. Hover for details
- Doesn't have it

## Layouts and reuse

| Feature | Kiln | Twig | Nunjucks | LiquidJS | Handlebars |
| --- | --- | --- | --- | --- | --- |
| [Layouts with blocks](https://kilnlang.com/docs/tags/extends/) | Yes | Yes | Yes | Yes | Partly: Partial blocks |
| [Includes](https://kilnlang.com/docs/tags/include/) | Yes | Yes | Yes | Yes | Yes |
| [Macros](https://kilnlang.com/docs/tags/macro/) | Yes | Yes | Yes | No | No |
| [Components with named slots](https://kilnlang.com/docs/tags/component/) | Yes | Yes | Partly: One slot | No | Partly: One slot |
| [Props with types and defaults](https://kilnlang.com/docs/tags/props/) | Yes | Partly: Types aren't checked | No | No | No |
| [Includes isolated by default](https://kilnlang.com/docs/tags/include/#isolated-by-default) | Yes | Partly: With only | No | Partly: With render | No |
| [Render a single block](https://kilnlang.com/docs/api/rendering/#rendering-one-block) | Yes | Yes | No | No | No |

## Expressions

| Feature | Kiln | Twig | Nunjucks | LiquidJS | Handlebars |
| --- | --- | --- | --- | --- | --- |
| [Your own filters and functions](https://kilnlang.com/docs/api/extending/) | Yes | Yes | Yes | Partly: Filters only | Partly: Helpers |
| [Arrow functions](https://kilnlang.com/docs/language/expressions/#arrow-functions) | Yes | Yes | No | No | No |
| [Null coalescing with ??](https://kilnlang.com/docs/language/expressions/#operators) | Yes | Yes | No | No | No |
| [Missing variables are errors by default](https://kilnlang.com/docs/language/strict-mode/) | Yes | Partly: Option | Partly: Option | Partly: Option | Partly: Option |

## Escaping and safety

| Feature | Kiln | Twig | Nunjucks | LiquidJS | Handlebars |
| --- | --- | --- | --- | --- | --- |
| [Output escaped by default](https://kilnlang.com/docs/language/escaping/) | Yes | Yes | Yes | Partly: Option | Yes |
| [Escaping for attributes, JavaScript, CSS and URLs](https://kilnlang.com/docs/language/escaping/#strategies) | Yes | Yes | No | No | No |
| [Safe for templates you didn't write](https://kilnlang.com/docs/api/safety/) | Yes | Partly: Opt-in sandbox | No | Yes | Partly: Blocks prototypes |
| [Limits on steps, output and depth](https://kilnlang.com/docs/api/safety/#limits) | Yes | No | No | Yes | No |

## Data and output

| Feature | Kiln | Twig | Nunjucks | LiquidJS | Handlebars |
| --- | --- | --- | --- | --- | --- |
| [Async data](https://kilnlang.com/docs/language/async-data/) | Yes | No | Partly: Callback API | Yes | No |
| [Streaming](https://kilnlang.com/docs/api/streaming/) | Yes | Yes | No | Partly: Node streams only | No |
| [Server islands](https://kilnlang.com/docs/tags/island/) | Yes | No | No | No | No |
| [Fragment caching](https://kilnlang.com/docs/tags/cache/) | Yes | Partly: Extension | No | No | No |
| [Number and date formatting with Intl](https://kilnlang.com/docs/filters/numbers-and-dates/) | Yes | Partly: Extension | No | Partly: Dates only | No |
| [Plurals for any locale](https://kilnlang.com/docs/filters/numbers-and-dates/#plural) | Yes | No | No | No | No |
| [Lines up indentation](https://kilnlang.com/docs/language/syntax/#indentation) | Yes | No | No | No | No |

## Running and tooling

| Feature | Kiln | Twig | Nunjucks | LiquidJS | Handlebars |
| --- | --- | --- | --- | --- | --- |
| [Runs on Cloudflare Workers](https://kilnlang.com/docs/installation/#cloudflare-workers) | Yes | No | Partly: Precompiled only | Yes | Partly: Precompiled only |
| [Precompile at build time](https://kilnlang.com/docs/api/precompiling/) | Yes | Yes | Yes | No | Yes |
| [Types generated from templates](https://kilnlang.com/docs/api/types/) | Yes | No | No | No | No |
| [Formatter and language server](https://kilnlang.com/docs/tooling/formatting/) | Yes | Partly: Third party | Partly: Third party | Partly: Third party | Partly: Third party |

## About this comparison

- **Versions.** Checked in October 2026 against Twig 3, Nunjucks 3.2, LiquidJS 10.29 and Handlebars 4.7.
- **Built in only.** A tick means the feature ships with the language. "Extension" means an official package you install as well. "Third party" means someone outside the project maintains it.
- **Twig runs on PHP.** The others run on JavaScript. [Twing](https://www.npmjs.com/package/twing) is a JavaScript port of Twig.
- **Kiln leaves some of Twig out on purpose.** For example `use`, custom delimiters and bitwise operators. See [Coming from Twig](https://kilnlang.com/docs/coming-from-twig/#removed) for the full list.
- **Speed.** See the [benchmarks](https://kilnlang.com/docs/benchmarks/) for how fast each engine renders real pages.

If something here is wrong or out of date, please [open an issue](https://github.com/buildlucid/kiln/issues).
