All notable changes to MiniJinja are documented here.
- Filters, tests and other functions can now be registered with a dynamically allocated name. (#146)
- Added
State::current_call
which exposes the name of the currently called item. (#150) - Introduced revamped object model with
SeqObject
andStructObject
. (#148) - Removed
Value::as_slice
- Introduced
Value::as_seq
andValue::as_struct
. - Introduced
Value::from_seq_object
andValue::from_struct_object
. - Added the ability for function arguments to be of type
&dyn SeqObject
. - Renamed
Iter
toValueIter
. - Added
Environment::render_named_str
. (#149)
- The
Object
model changed signficantly in this release. It's now possible for objects to have different shapes (structs or sequences today). As a resultSeqObject
andStructObject
were added to the API. For changing your objects over have a look at the new documentation forObject
. - The
Iter
type is now calledValueIter
.
- Changed
Object::attributes
to being an iterator. (#138) Arc<T: Object>
now implementsObject
. (#139)- Aligned semantics of top-level template code after
extends
with Jinja2. (#140) - Exposed value creation from Arcs. (#141)
- Performance improvements for value conversions and object creation. (#142)
- Align iteration behavior of dynamic objects with maps.
- The
attributes
method on objects now returns iterators. To make the transition easy change[..]
toBox::new([..].into_iter())
.
- Added support for recursive macro invocations. (#133)
- Added optional unicode identifier support. (#134)
- Catch divisions by zero.
- Correctly render
inf
floats. - Enforce a maximum recursion depth during parsing.
- Added
Value::try_iter
to iterate over maps and sequences. (#132)
- Added
Value::from_function
. (#121) - Fixed incorrect location information with blocks.
- Fixed broken nested
super()
calls. - Improve error reporting for failures in blocks and trying to
super()
when there is no parent block. - Performance improvements.
- Added support for
{% import %}
/{% from .. import .. %}
and{% macro %}
. (#123) - Added
Value::is_kwargs
which disambiugates if an object passed to a function or filter is a normal object or if it represents keyword arguments. - Added the ability to call functions stored on objects.
- Added
macros
andmulti-template
features to disable some of the heavier pieces of MiniJinja. - Fixed an issue that caused trailing commas not to work in lists.
- Fixed an incorrect manifest for
minijinja-autoreload
.
- Add
defined
andundefined
tests to always be included. - Removed
Source::load_from_path
. - Added
Source::from_path
.
- Removed
Source::load_from_path
. UseSource::with_loader
instead.
- Added custom autoescape settings.
- Added custom formatters.
- Restructured engine internals for greater clarity.
- Added support for rendering to
io::Write
. (#111) - Make it impossible to implement
Fitler
,Test
orFunction
from outside the crate by sealed the traits. (#113) - Added support for remaining arguments with
Rest
. (#114) - Filters, tests and functions can now borrow arguments. (#115)
- Added
Value::as_slice
andValue::get_get_item_by_index
. - Added support for span error reporting. (#118)
- Greatly improved handling of nested errors. (#119)
ImpossibleOperation
is nowInvalidOperation
.- Added support for slice syntax. (#120)
Filter
,Test
andFunction
are now sealed traits.ErrorKind::ImpossibleOperation
is nowErrorKind::InvalidOperation
.- Moved up MSRV to 1.61.0 due to bugs on older rust versions related to HRTBs.
- Remove internal refcounts from environment.
- Changed
Object
andFunctionArgs
interface to take arguments by reference. (#101) sync
mode is now always enabled. (#104)- Removed meta API. (#105)
- Error no longer implements
PartialEq
. - Simplified the function interface. Filters, tests and global functions can now directly return values instead of results. (#107)
- MiniJinja no longer silently iterates over non iterable values.
- The
meta
API is gone without replacement. Object::call_method
andObject::call
now take the arguments as&[Value]
instead ofVec<Value>
.Object::call_method
,Object::call
andFunctionArgs::from_values
now take the arguments as&[Value]
instead ofVec<Value>
.- The error object used to implement
PartialEq
but this was implemented by comparing the error kind instead. Explicitly use the.kind()
method of the error if you want the same behavior. DebugInfo
is no longer exposed. This might come back if a better API can be found.
- Fixed binary subtraction operator requiring a space. (#94)
- Fixed trailing commas not working in function calls. (#95)
- Small internal improvements to context creation. (#79)
- Add support for JSON/YAML/JavaScript Escaping. (#82)
- Add missing escape support for single quotes (
'
). (#81) - Added support for newlines in string literals. (#85)
- Added support for block assignment syntax. (#86)
- Added string concatenatino with
+
for Jinja compat. (#87) - Enable debug mode by default in debug builds. (#88)
- Added
render!
macro andrender_str
. (#89) - Fixed an issue where trailing whitespace removal did not work on blocks. (#90)
- Added
loop.changed()
method. (#91)
- Fixed a bad dependency declaration.
- Improved debug printing of context.
- Added
-
,_
and.
to set of unescaped characters inurlencode
. (#72) - Bumped
v_htmlescape
dependency. (#74)
- Added support for
{% raw %}
. (#67) - Minimum Rust version moved up to 1.45.
- Added support for
{% set %}
. (#70)
- Added support for unpacking in
with
blocks. (#65)
- Bumped minimum version requirement to 1.43.
- Internal refactorings.
- Added support for fully dynamic loading via
Source::with_loader
. - Renamed
get_source
tosource
.
- Fixed
or
expressions not working properly.
- Added
bool
filter. - Added
meta
API. (#55) - Added support for
ignore missing
in include tags. (#56) - Added support for choices in include tags. (#57)
- Removed deprecated functionality.
- Fix an panic in debug error printing. (#49)
- Deprecated
Primitive
andas_primitive
. - Deprecated
as_f64
. - Truthiness of values is now checking container length. Previously containers were always true, now they are only true if they are not empty.
- Strings and safe strings no longer compare the same.
- Changed list and map string output to have delimiters and debug printing.
- Added
batch
andslice
filter. - Added the new
items
filter. - Removed value internal distinction between maps and structs.
- Added
list
filter. - Added
first
andlast
filters. - Added
round
andabs
filters. - Implemented integer division operator (
//
) and changed division to always return floats like documented and to match the Jinja2 implementation. To make this more convenient whole integer floats are now handled like integers in some situations. - Added
recursive
support to for loops. - Merged
builtin_filters
,builtin_tests
andbuiltin_functions
features intobuiltins
. - Added
value::serializing_for_value
to check if serialization is taking place for MiniJinja. - The
Value
type now supports deserialization. This feature can be disabled by removing the defaultdeserialization
feature. - Removed optional
memchr
dependency as it does not appear to be useful.
Yanked — this was a release from the wrong branch
- Restructured the value type internally to be simpler and not use unsafe at the cost of slightly larger memory footprint. (#30)
- Added
debug
support. If the debug mode is enabled, errors now carry a lot of useful debug information and an alternative representation when formatted into strings that show the context of the template where it went all wrong. (#31) - Added automatic string interning of object/map keys in values. This feature can
be disabled by removing the default
key_interning
feature. (#35) - Removed deprecated
Single
type.
- Remove one trailing newline to be consistent with Jinja2.
- Resolved a bug where borrowed keys on dynamic objects could not be looked up. (#29)
- Restored unconditional compatibility with 1.42.
- Turned on all features for the docs on docs.rs
- Added
context!
and deprecateSingle
. - Correctly report template file names in errors.
- Added the
source
method on templates. - Introduced
State
type and changed parameter to functions from&Environment
to&State
. - Added
debug
global. - Added
tojson
filter. - Added
urlencode
filter.
- Made the
source
method on error be bound toSend
andSync
.
- Added
default
filter. - Added
startingwith
andendingwith
tests. - Added global variables and function support.
- Added
range
function. - Added
dict
function. - Fixed panic caused by
super()
calls outside of blocks. - Added
Error::with_source
method. - Added
object
abstraction. - Added keyword arguments to function and filter invocations.
- Added Jinja2 filter aliases
e
,d
andcount
.
- Added support for rustc 1.41.0
- Added
v_htmlescape
feature to turn on a faster HTML escaping. - Export
HtmlEscape
helper. - Also escape
/
in HTML escaping likev_htmlescape
does. - Changed return value type of
get_template
to be a result rather than an option. - Added
Source
behind thesource
feature to support loading of templates at runtime without lifetime complications. - Initial auto escaping decision is now made when the template is loaded from the environment and not when they are added.
- The environment can now be cloned.
- Added
sync
feature that can be disabled to disable the ability to send objects to other threads where that comes at a cost. safe
andescape
are now always provided as filters.- Added support for
self.block_name()
. - Fixed incorrect behavior where
super()
did not allow filters. - Added
{% filter %}
blocks. - Added
value::Single
type to render simple templates with a single value passed.
- Added the ability to roundtrip arbitrary values via the serialize interface.
- Added support for tuple unpacking in lists.
- Added dictsort filter.
- Introduced a new trait
ArgType
to handle argument conversions for filters and tests so optonal arguments can exist. - Renamed
ValueArgs
trait toFunctionArgs
. - Added
reverse
filter. - Added
trim
filter. - Added
join
filter. - Added
number
test. - Added
string
test. - Added
sequence
test. - Added
mapping
test. - Added
builtin_filters
andbuiltin_tests
features to disable the built-in filter and test functions. - Added
is not
syntax for negated tests. - Added
else
block to for loops. - Added
if
condition expression to for loops. - Fixed a bug that caused or/and not to evaluate correctly in certain situations.
- Added
in
andnot in
expressions. - Added inline
if
expressions.
- Added support for
{% include %}
- Resolved a bug that caused
with
blocks to fully shadow the outer scope. - Improved documentation in the crate.
- Added support for rustc versions down to 1.42.0
- Initial release of the library