NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3632 most downloaded on crates.io
Procedural macro package for Askama
Last release 1 months ago
04 Sep 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 9 of 9 stable releases
Nothing withdrawn
no release was ever pulled
9 months old
9 releases · first in 2025
One column per month.
docs: explain how to install by enabling feature specific for each framework by @pinage404 in #742
let/set block type by @GuillaumeGomez in #760Full Changelog: v0.16.0...v0.16.1
This new release increases compatibility with jinja language, add support for more rust expressions in the templates. Take a look at the book for the
This new release increases compatibility with jinja language, add support for more rust expressions in the templates. Take a look at the book for the migration guide.
(❗ = breaking change)
❗Add support for let blocks by @GuillaumeGomez in #697
Implement compound assignments (e.g. {% mut a += 1 %}) by @Kijewski in #685
Add support for tuple, array and slice in type generics by @GuillaumeGomez in #721
Add support for macro args type annotations by @GuillaumeGomez in #722
Add support for caller() in variable declaration by @GuillaumeGomez in #724
Add glob support for dirs in config file by @GuillaumeGomez in #731
size_hint is collected by @Kijewski in #700dyn instead of plain generic bounds by @GuillaumeGomez in #726std::path::absolute to avoid symlinking template paths by @kaepr in #720config by @GuillaumeGomez in #732Template trait methods can return Err by @GuillaumeGomez in #730Ty generics by @GuillaumeGomez in #723complex-expression benchmark by @Kijewski in #691Cargo.toml files by @GuillaumeGomez in #696rand+rand_xoshiro dev-dependencies by @Kijewski in #701trybuild version to 1.0.116 to enforce diagnostics width by @GuillaumeGomez in #718Full Changelog: v0.15.4...v0.16.0
Correctly handle non-ident item in block error by @GuillaumeGomez in #717
.clone() by @jplatte in #716SyntaxAndCache by @jplatte in #714winnow to 1.0 by @jplatte in #715Full Changelog: v0.15.5...v0.15.6
parser: reject non-ASCII characters in byte literals by @Kijewski in #694
Full Changelog: v0.15.4...v0.15.5
Improve function call handling by @Kijewski in #684
Full Changelog: v0.15.3...v0.15.4
Update book links (askama.rs) by @Kijewski in #678
Full Changelog: v0.15.2...v0.15.3
Correctly handle local variables in extends blocks by @GuillaumeGomez in #670
extends blocks by @GuillaumeGomez in #670#[filter_fn] by @Kijewski in #655salvo by @Kijewski in #659Upgrading to new versions chapter in the askama book by @GuillaumeGomez in #665extends by @GuillaumeGomez in #666where bounds in #[filter_fn] by @Kijewski in #672filters chapter by @Tirka in #673filters chapter examples (by making us of defined_or filter) by @Tirka in #675Full Changelog: v0.15.1...v0.15.2
Fix broken intra-doc links by @GuillaumeGomez in #645
call_site for code generated by the derive proc-macro by @sehnryr in #647Full Changelog: v0.15.0...v0.15.1
The main breaking change is about custom filters, they now require the filter_fn attribute. More information about it in the askama book .
The main breaking change is about custom filters, they now require the filter_fn attribute. More information about it in the askama book.
(❗ = breaking change)
reject filter❗ by @GuillaumeGomez in #430|default, |assigned_or and |defined_or❗ by @Kijewski in #425askama::filter_fn proc-macro for custom filters with named/optional arg support❗ by @seijikun in #545enum variants by @Kijewski in #255[<element_expr>; <cnt_expr>] by @seijikun in #626Improve error location to give better errors:
TokenStream rather than a String by @GuillaumeGomez in #558LocatingSlice<&str> instead of &str by @Kijewski in #560Parser::[with_]span() to get byte range and use byte range for proc_macro::Span by @Kijewski in #571filesizeformat with proper accuracy❗ by @seijikun in #568linebreaks, paragraphbreaks and linebreaksbr only need core by @Kijewski in #486ref documentation by @sinder38 in #456performance.md by @zamazan4ik in #188mdbook version and highlight jinja blocks by @Kijewski in #544{# comment #} parsing by @Kijewski in #488Expr::Attr into Expr::AssociatedItem by @GuillaumeGomez in #499Expr variants by @Kijewski in #498|filter and {% filter %} parsing by @Kijewski in #500if-let-chains by @Kijewski in #527if-let by @Kijewski in #532#[inline] annotations by @Kijewski in #421indent Filter Implementation by @strickczq in #466wordcount filter work with core only by @GuillaumeGomez in #480Expr::Call handling for {{ expressions }} and remove parentheses by @Kijewski in #540Expr/Node with Box<Expr>/Box<Node> by @Kijewski in #542punction() finding by @Kijewski in #543loop.first is known by being at index == 0 by @Kijewski in #436impl FastWritable for Cow by @C0D3-M4513R in #432unicode-ident to determine what is an identifier by @Kijewski in #443__askama by @Kijewski in #444crate to be used as identifier by @GuillaumeGomez in #450LoopItem::index to LoopItem::index0 by @Kijewski in #481U+10FFFF is the highest Unicode codepoint by @Kijewski in #484{% raw %} and Lit::parse() without skip_till by @Kijewski in #489{% raw %} for delimiters starting with - by @Kijewski in #491suffix# by @Kijewski in #496check_expr() recursion by @Kijewski in #519EvaluatedResult know its unknown result by @Kijewski in #538r#self is not a valid raw identifier in macro calls by @Kijewski in #553:: by @GuillaumeGomez in #569lib.rs by @Kijewski in #573r#_ is not a valid identifier by @Kijewski in #579block calls are done by @GuillaumeGomez in #580safe filter in template_syntax.md by @FalkWoldmann in #587syn stack overflow by @GuillaumeGomez in #611Full Changelog: v0.14.0...v0.15.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →