NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #898 most downloaded on crates.io
Handlebars templating implemented in Rust.
Last release 1 months ago
12 Aug 2026
Release timing varies
gaps range from 3 weeks to 10 months
Nearly every release is documented
notes for 55 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
12 years old
187 releases · first in 2014
test: add shared TestHandlebars helpers and adopt across render tests by @sunng87 in #771
Full Changelog: v6.4.3...v6.4.4
One column per quarter.
preserve_json_order as a default feature. Users
who need this can still enable it for handlebars-rust, or enable
preserve_order for you serde_json.chore: drop pprof dev-dependency to remove vulnerable quick-xml by @sunng87 in #769
else if chain tags by @sunng87 in #768Full Changelog: v6.4.2...v6.4.3
~) on an else if
chain tag, e.g. {{~else if cond}}. The leading tilde is now handled
consistently with {{~else}} [#766]preserve_json_order feature flag that gates serde_json's
preserve_order feature. Enabled by default to keep insertion-order key
iteration; disable with default-features = false to restore alphabetical
JSON object key ordering. [#767]pprof dev-dependency (and its inferno /
quick-xml transitive deps) from benchmarks. This removes the vulnerable
quick-xml 0.26 transitive dependency ([#764], [#765]); the upgrade was
blocked upstream because pprof pins inferno 0.11. Benchmarks now use
plain criterion without in-repo flamegraph generation.chore: Release handlebars version 6.4.2
chore: Release handlebars version 6.4.2
@key, @index, etc. in #with and
partial block [#758]preserve_order feature. JSON objects are now
iterated in insertion order (matching Handlebars.js semantics) instead of
alphabetical key order. This fixes index-key ordering for array contexts
converted into objects by partial hash parameters (e.g. "10" no longer
sorts before "2").chore: Release handlebars version 6.4.1
chore: Release handlebars version 6.4.1
@partial-block with block include and fallback template [#752]fix: allow colons in identifier by @sunng87 in #706
-Zminimal-versions by @ppentchev in #723Full Changelog: v6.3.2...v6.4.0
recursive_lookup mode [#730]fix: partial context with literal parameters by @sunng87 in #695
Full Changelog: v6.3.1...v6.3.2
Fix documentation typo by @Flamenco in #690
chore(deps): update thiserror requirement from 1 to 2 by @dependabot in #683
Full Changelog: v6.2.0...v6.3.0
and and or helper now accepts multiple parameters [#687]chore(deps): bump serve-static and express in /playground/www by @dependabot in #675
Full Changelog: v6.1.0...v6.2.0
@index variable for object iteration [#682]docs: fix code examples formatting by @mrnossiom in #668
Full Changelog: v6.0.0...v6.1.0
[Fixed] Various indent issue with partials, empty lines and helpers [#646] [#654] [#658]
PathSeg [#656]BlockContext [#655]From<RenderError> for RenderErrorReason [#644]non_exhaustive attribute to all public memebers [#647]RenderContext API and improved performance for partial rendering
[#661] [#662][Changed] Improved error message and syntax rule naming [#638]
heck to 0.5 [#635][Changed] Turned off pub access of chain in HelperTemplate
chain in HelperTemplate[Added] Chained else if block support [#629]
else if block support [#629][Added] public mutable access to local variables in BlockContext [#533]
BlockContext [#533]Helper, ScopedJson and some
other related types and functions. [#532]TemplateError to reduce its size. Direct field access is
removed in favor of access methodsRenderErrorReason for typed render errorregister_template_directory api for more customizations
#[610]Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[Added] New write_fmt function for Output [#522]
write_fmt function for Output [#522]reason() method for TemplateError to access underlying reason,
this replaces original direct .reason access.TemplateError's reason field is depreacted will
be removed in future.[Fixed] Disable partial expression indentation with {{~> partial}} to bring behavior closer in line with original javascript version. [#518]
{{~> partial}} to
bring behavior closer in line with original javascript version. [#518][Added] Render functions that reuse Context for custom std::Write: render_with_context_to_write and render_template_with_context_to_write
Context for custom std::io::Write:
render_with_context_to_write and render_template_with_context_to_write[Added] Added support for {{~{variable}~}} syntax [#509]
{{~{variable}~}} syntax [#509][Changed] update MSRV to 1.57 as rhai requires
{{> partial}}, which is introduced in 4.2.0. The new implementation is
aligned with original javascript version, that every text line
generated from partial are indented as {{> partial}}
does. prevent_indent will turn-off this feature. [#505][Fixed] Block param scope leaked into partials [#496]
[Fixed] Nested partial @partial-block referencing issue [#488]
@partial-block referencing issue [#488]rust-embed feature[Added] RustEmbed support for loading templates from [#484]
{{> partial}} as default in handlebarsjs. A new option prevent_indent
is provided on Handlebars to turn off this behaviour. [#486][Added] Create Context from owned serde_json::Value [#477]
Context from owned serde_json::Value [#477][Fixed] Single-quote string literal is supported, again [#475]
[Fixed] Corrected empty line stripping strategy [#473]
[Added] @last variable for each block with object [#466]
@last variable for each block with object [#466][Added] Support for generic types in handlebars_helper!.
handlebars_helper!.Engine from registry.dev_mode that it has to be enabled before
adding templates.[Changed] Update rhai to 1.0 [#455]
[Added] export StringOutput as requested in #442
StringOutput as requested in #442handlebars_helper! and
built-in helpers based on it.[Fixed] Each block render error with empty array or object [#445]
[Added] dev_mode for registry: templates and scripts loaded from file are always reloaded when dev mode enabled [#395]
dev_mode for registry: templates and scripts loaded from file are always
reloaded when dev mode enabled [#395]Clone [#395]len [#421]rhai to 0.19 and then 0.20 [#391]#each helper now renders else block for non-iterable data [#380]TemplateError and ScriptError is now a cause of RenderError [#395]RenderContext::get_partial now returns Option<&Template>HtmlExpression and IoError based on clippy recommendations [#424]call_inner from HelperDef to avoid misleading [#437]null, true and false were parsed incorrectly [#382]@partial-block [#401]{{(parent)}} can no longer access parent field of the context object, use
{{lookup this "parent"}} instead. This change applies to partial inclusion, too.TemplateFileError and TemplateRenderError are removed and merged into
TemplateError and RenderError [#395]Nothing published for this version
Nothing published for this version
[Fixed] Panic on reporting invalid tag name [#427]
[Fixed] Json string literal with escape char [#422]
[Fixed] value access issue when upper block has a base value [#419]
[Fixed] allow / as trailing separator on Windows, backported from master [#405]
/ as trailing separator on Windows, backported from master [#405][Fixed] dir source path separator bug on windows [#389]
[Changed] #each helper now renders else block for non-iterable data [#380]
#each helper now renders else block for non-iterable data [#380]null, true and false were parsed incorrectly [#382][Added] Debug log that can be turned on by using envlog or other implementation, to trace data resolution during rendering [#369]
., escape [] and string '' name=, \ and ``` [#366][Added] Added two new APIs to reuse Context for rendering [#352]
Context for rendering [#352][Fixed] block context leak introduced in 3.2.0, #346 [#349]
[Added] API to register an pre-processed template [#331]
$ expression that is part of mustache.js [#339]each [#344][Added] All new rhai script helper
Send and Sync are not required for RenderContext local helper [#319]Nothing published for this version
Nothing published for this version
[Fixed] Slash in partial path causing syntax error #313
[Changed] Added lifetime specifier to Handlebars structure allowing helper definition to have non-static borrowed data #282
Handlebars structure allowing helper definition to have non-static borrowed data #282dir_source were turned off by default. #289RenderContext API to improve performance up to 5x over 2.0BlockContext API for helper developer to store block scope state #307RenderError should be Send and Sync #304Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →