Skip to content

chore(deps): update rust crate minijinja to v2#2548

Merged
albertlockett merged 1 commit intomainfrom
renovate/minijinja-2.x
Apr 6, 2026
Merged

chore(deps): update rust crate minijinja to v2#2548
albertlockett merged 1 commit intomainfrom
renovate/minijinja-2.x

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate bot commented Apr 6, 2026

This PR contains the following updates:

Package Type Update Change
minijinja workspace.dependencies major 12

Release Notes

mitsuhiko/minijinja (minijinja)

v2.19.0

Compare Source

  • Fixed strict undefined behavior for comparison operators (such as ==), string concatenation (~), and undefined needles in the in operator to better match Jinja2. #​886 #​888
  • Fixed the default filter in strict undefined mode so an explicitly passed undefined fallback argument errors instead of being treated like a missing argument. #​887

v2.18.0

Compare Source

  • Added keyword argument support (width, first, blank) to the indent filter for Jinja2 compatibility in Rust and Go. #​864
  • Added support for dotted integer lookup (for example foo.0) in Rust and Go for Jinja compatibility. #​881
  • Added support for dotted filter and test names (including foo . bar . baz) for Jinja compatibility. #​879
  • Fixed string escape handling to preserve unknown escapes (such as \s) for Jinja compatibility in Rust and Go. #​880
  • Improved generic performance across template parsing, compilation, and rendering.
  • Fixed minijinja-cabi ownership and pointer-safety issues that could leak mj_value
    values on error paths.
  • Added high-priority minijinja-cabi APIs for callback-based functions/filters/tests,
    globals, loaders, path joining, auto-escape configuration, and fuel limits.
  • Switched minijinja-cabi header maintenance to manual source-based syncing and
    removed cbindgen-based generation tooling.
  • Added lightweight C smoke tests for minijinja-cabi (via make -C minijinja-cabi test)
    with coverage across all exported C ABI functions, and wired them into top-level
    testing and CI.
  • Added render_captured and render_captured_to methods on Template which
    return a Captured type holding the rendered output and the template state.
  • Added into_output method on Captured to consume and return the output string.
  • Deprecated render_and_return_state, eval_to_state, and render_to_write
    in favor of the new render_captured / render_captured_to / Captured API.

v2.17.1

Compare Source

  • Re-release of 2.17.0 to fix release automation.
  • Switched npm publishing to trusted publishing (OIDC/provenance) and removed token-based auth from CI.
  • Prevented duplicate crates.io publish attempts by skipping slash-prefixed tags in crates publishing.

v2.17.0

Compare Source

  • Added 'c' (character) format type support for format filters and str.format-style formatting. #​868
  • Added prebuilt minijinja-cli release targets for aarch64-pc-windows-msvc (Windows ARM64) and armv7-unknown-linux-gnueabihf.
  • Fixed strict and semi-strict undefined handling so string-coercing filter/function arguments also fail for nested Rest<String> and Vec<String> conversions. #​877
  • Fixed Python CI/build compatibility with newer maturin by moving stripping from global config to release wheel build arguments.

v2.16.0

Compare Source

  • Added musllinux wheel builds for Python release artifacts.
  • Fixed |escape to honor custom formatters. #​861
  • Aligned undefined behavior handling in the Go port with Rust.
  • Removed non-Rust keys and values filters from the Go port for parity. #​863

v2.15.1

Compare Source

  • Re-release of 2.15.0 because of a bad release.

v2.15.0

Compare Source

  • Added py.typed marker for PEP 561 typing support in Python bindings. #​853
  • Added optional default argument to map.get() method in pycompat. #​852
  • Added a go language port. #​854
  • Fixed stability guarantees for the |sort filter when using reverse=true. #​856
  • Fixed missing SemiStrict undefined mapping in Python bindings. #​859

v2.14.0

Compare Source

  • Added support for tuple unpacking in {% set %} statements. #​847

v2.13.0

Compare Source

  • Added multi-key support to the |sort filter. #​827
  • Added format filter and str.format method for pycompat. #​835
  • Fix not undefined with strict undefined behavior. #​838
  • Added support for free threading Python. #​841
  • Added setLoader and setPathJoinCallback to the JavaScript bindings. #​842

v2.12.0

Compare Source

  • Item or attribute lookup will no longer swallow all errors in Python. #​814
  • Added |zip filter. #​818
  • Fix break_on_hyphens for the |wordwrap filter. #​823
  • Prefer error message from unknown_method_callback. #​824
  • Ignore .jinja and .jinja2 as extensions in auto escape. #​832

v2.11.0

Compare Source

  • Fixed incorrect joining of leading undefineds or empty
    strings in the |join filter. This was inconsistent with
    Jinja2 and the filter itself for undefineds in other
    positions. #​794
  • Allow negative arguments to range function and change
    range to isize. #​799
  • Allow isize as argument type. #​799
  • MiniJinja now correctly handles \x escape sequences in strings
    as well as octals. #​805
  • Added a new |chain filter. #​807

v2.10.2

Compare Source

  • Fixed an issue with the function bounds that caused the
    next-generation trait resolver to fail. #​787

v2.10.1

Compare Source

  • Re-release of 2.10.0 because of a broken release process.

v2.10.0

Compare Source

  • Fix incorrect permissions when --output is used in the CLI. #​772
  • Added mj_err_get_debug_info to the C-ABI. #​775
  • Modules now capture their output like they do in Jinja2. This
    means that if you do {% import 'template.j2' as x %} and you
    then render {{ x }} the output of template.j2 is rendered as
    if it was included. #​778
  • Improved compatibility with Jinja2 for slicing. Negative steps
    are now correctly handled. Additionally slicing on bytes now
    correctly handles steps other than 1. #​781

v2.9.0

Compare Source

  • Do not panic if too large templates (too many lines or too many
    columns) are loaded. The error reporting will be wrong in those
    cases but the templates will load. #​742
  • Fixed a bug that caused unknown method callbacks to not get
    proper error reporting if they cannot find a method. #​743
  • Added merge_maps which is a dynamic version of the context!
    merge feature, and fixed enumeration behavior when non-map objects
    are attempted to be merged. #​745
  • Added mj_value_new_bytes to the C-ABI. #​749
  • Added mj_value_as_bytes to the C-ABI to borrow from strings or
    byte values. #​750
  • Fixed buggy mj_err_get_detail and mj_err_get_template_name. These
    did not work correctly. To fix them the return value now needs to be
    freed. #​754
  • Fix a compilation issue on 32bit systems when AtomicU64 is
    not available in minijinja-contrib. #​755
  • Correctly handle with context and without context for
    imports. #​759
  • The default filter is now also registered as d for Jinja2
    compatibility. #​763
  • The default filter now accepts a second argument to enable lax
    defaulting. #​764
  • Added a striptags filter to the contrib module. #​765
  • Enable pycompat by default for the Python bindings and register
    the default contrib filters and tests. #​767

v2.8.0

Compare Source

  • Added SemiStrict undefined mode that is like strict but allows
    to be checked for truthiness. Additionally an if expression without
    an else block will always produce a silent undefined object that
    never errors for compatibility with Jinja2. #​687
  • Make the trait bounds of ViaDeserialize stricter. Now the type
    can only be constructed if the type implements DeserializeOwned.
    This is not a new requirement for passing the function to
    add_function but bad code will now error earlier for better
    error reporting. #​689
  • Raise MSRV to 1.70.
  • The contrib crate now uses a basic xorrand implementation instead
    of depending on all of the rand module. #​696
  • Added temps, a way to stash away temporary state during rendering. #​697
  • Fixed a bug that caused the random functions in the contrib crate
    to not advance the RNG between calls. #​698
  • Added Environment.undeclared_variables_in_template and
    Environnent.undeclared_variables_in_str to Python binding. #​699
  • Enable loop_controls for Python in-line with the CLI. #​704
  • Fixed a panic when comparing plain objects. #​705
  • Added Object::custom_cmp to allow objects to influence how they
    compare against themselves. This also fixes Python objects in the
    Python binding not to compare correctly. #​707
  • Fixed a bug where undeclared_variables would incorrectly handle
    variables referenced by macros. #​714
  • Fixed a deadlock in the Python binding when multiple threads were
    rendering from the same environment at once. #​717
  • The Python bindings handle __bool__ correctly now for custom
    objects in if-conditions and filters. #​719
  • Fixed a bug where }} caused a syntax error in expressions with
    open parentheses, braces or brackets. #​723
  • Added State::known_variables to return a list of known variables
    and Environment::globals. #​724
  • Fixed an issue with undeclared variables not handling caller. #​725
  • Removed unnecessary Filters and Tests traits. They remain as
    hidden aliases to Function. #​726
  • Fixed a bug that caused implicit string concatenation to not correctly
    handle escapes. #​728
  • Implemented constant folding in the code generator. #​731
  • Improved error reporting for bad loop recursion calls. #​734
  • The engine now uses smaller integers to represent columns, line numbers
    and addresses. This cuts down on the memory usage needed for debug
    information. #​735
  • Added load_from_path to python. #​736
  • Added JavaScript bindings. #​737

v2.7.0

Compare Source

  • Removed string interning. #​675
  • loop.nextitem is now a lazy operation. This prevents issues when
    iterating over one-shot iterators combined with {% break %} and
    it now ensures that the iterator is not running "one item ahead". #​677
  • Fixed an issue that caused loop aliasing not to be supported for
    recursive loops. #​678
  • CLI moved from serde_yml to serde_yaml. #​684
  • Improved undefined error reporting. Undefined values will now in most
    cases point to exactly where the error happened. #​686
  • Allow newer notify dependency versions (up to 8.x) for the autoreload
    crate. #​688

v2.6.0

Compare Source

  • Added sum filter. #​648
  • Added truncate filter to minijinja-contrib. #​647
  • Added wordcount filter to minijinja-contrib. #​649
  • Added wordwrap filter to minijinja-contrib. #​651
  • Some tests and filters now pass borrowed values for performance reasons
    and a bug was fixed that caused undefined values in strict undefined
    mode not to work with tests. #​657
  • Fixed an error reporting issue for some syntax errors. #​655
  • Removed an unsafe code block from the Kwargs type internally
    which was probably unsafe. #​659
  • Fix a regression with latest serde that caused internals to leak
    out when flattening on value handles is used. #​664
  • Added Value::make_object_map to create projections from object
    into maps, similar to how it was already possible to create
    iterators that were projected from objects. #​663
  • The |items filter will no longer allocate a list and instead
    return an iterator. #​665
  • Fixed a bug that caused lstrip_blocks to act too eager. #​674

v2.5.0

Compare Source

  • minijinja-cli now supports preservation of order in maps. #​611
  • Fixed an issue where CBOR was not correctly deserialized in
    minijinja-cli. #​611
  • Added a lines filter to split a string into lines.
  • Bytes are now better supported in MiniJinja. They can be created from
    Value::from_bytes without having to go via serde, and they are now
    producing a nicer looking debug output. #​616
  • Added the missing string filter from Jinja2. #​617
  • Reversing bytes and convergint them implicitly to strings will now work
    more consistently. #​619
  • Added type hints for the Python binding and relaxed maturin constraint. #​590
  • minijinja-cli now allows the template name to be set to an empty
    string when --template is used, to allow suppliying a data file. #​624
  • Added the missing sameas filter from Jinja2. #​625
  • Tests can now support one argument without parentheses like in Jinja2
    (1 is sameas 1). #​626
  • Added error context for strict undefined errors during template
    rendering. #​627
  • Syntax errors caused by the lexer now include the correct position of
    the error. #​630
  • minijinja-cli now has all features enabled by default as documented
    (that means also shell completion and ini). #​633
  • minijinja-cli now does not convert INI files to lowercase anymore. This was
    an unintended behavior. #​633
  • Moved up MSRV to 1.63.0 due to indexmap. #​635
  • Added argument splatting support (*args for variable args and **kwargs
    for keyword arguments) and fixed a bug where sometimes maps and keyword
    arguments were created in inverse order. #​642

v2.4.0

Compare Source

  • Updated version of minijinja-cli with support for better documentation,
    config file and environment variable support. #​602
  • minijinja-cli now supports template source passed by parameter for
    simple cases. #​606
  • minijinja-cli now has a --syntax-help argument that prints out the
    primer on the syntax. #​607
  • minijinja-cli now installs to ~/.local/bin by default. #​608
  • Made the c-bindings compatible with wasm compilation. #​603
  • String/Cow<str> argument types will no longer implicitly convert
    keyword arguments to string form. This was an unintended foot gun. #​605

v2.3.1

Compare Source

  • Fixes a regression in PartialEq / Eq in Value caused by changes
    in 2.3.0. #​584

v2.3.0

Compare Source

  • Fixes some compiler warnings in Rust 1.81. #​575
  • Fixes incorrect ordering of maps when the keys of those maps
    were not in consistent order. #​569
  • Implemented the missing groupby filter. #​570
  • The unique filter now is case insensitive by default like in
    Jinja2 and supports an optional flag to make it case sensitive.
    It also now lets one check individual attributes instead of
    values. #​571
  • Changed sort order of Ord to avoid accidentally non total order
    that could cause panics on Rust 1.81. #​579
  • Added a Value::is_integer method to allow a user to tell floats
    and true integers apart. #​580

v2.2.0

Compare Source

  • Fixes a bug where some enums did not deserialize correctly when
    used with ViaDeserialize. #​554
  • Implemented IntoDeserializer for Value and &Value. #​555
  • Added filesizeformat to minijinja-contrib. #​556
  • Added support for the loop_controls feature which adds
    {% break %} and {% continue %}. #​558
  • Iterables can now be indexed into. It was already possible previously
    to slice them. This improves support for Jinja2 compatibility as Jinja2
    is more likely to create temporary lists when slicing lists. #​565

v2.1.2

Compare Source

  • Flush filter and test cache when processing extended template.
    This fixes a bug that caused the wrong filters to be used in some
    cases. #​551

v2.1.1

Compare Source

  • Added indent parameter to tojson filter. #​546
  • Added randrange, lipsum, random, cycler and joiner to
    minijinja-contrib. #​547
  • Added the ability to use &T and Arc<T> as parameters
    to filters and functions if T is an Object. #​548
  • minijinja-cli now also enables the datetime, timezone and rand features. #​549
  • Aligned the behavior of the int filter closer to Jinja2. #​549

v2.1.0

Compare Source

  • minijinja-cli now supports .ini files. #​532
  • Fixed a bug that caused cycle detection to trigger incorrectly when an included
    template extended from another template. #​538
  • Bumped the minimum version of self_cell to 1.0.4. #​540
  • MiniJinja will now warn if the serde feature is disabled. This is in
    anticipation of removing the serde dependency in the future. #​541
  • Improved an edge case with State::resolve. It now can resolve the
    initial template context in macro calls even if no closure has been
    created. #​542

v2.0.3

Compare Source

  • Added new methods to pycompat: str.endswith, str.rfind,
    str.isalnum, str.isalpha, str.isascii, str.isdigit,
    str.isnumeric, str.join, str.startswith. #​522
  • Added the missing tests boolean, divisibleby, lower and upper. #​592
  • minijinja-cli now supports YAML aliases and merge keys. #​531

v2.0.2

Compare Source

  • Implemented sequence (+ some iterator) and string repeating with the *
    operator to match Jinja2 behavior. #​519
  • Added the new minijinja::pycompat module which allows one to register
    an unknown method callback that provides most built-in Python methods.
    This makes things such as dict.keys work. Also adds a new
    --py-compat flag to minijinja-cli that enables it. This improves
    the compatibility with Python based templates. #​521
  • Added a new |split filter that works like the .split method in Python. #​517

v2.0.1

Compare Source

  • Fixed an issue that caused custom delimiters to not work in the Python
    binding. #​506

v2.0.0

Compare Source

This is a major update to MiniJinja that changes a lot of core internals and
cleans up some APIs. In particular it resolves some limitations in the engine
in relation to working with dynamic objects, unlocks potentials for future
performance improvements and enhancements.

It's very likely that you will need to do changes to your code when upgrading,
particular when implementing dynamic objects. In short:

  • StructObject and SeqObject are gone. They have been replaced by improved
    APIs directly on Object. Please refer to the updated documentation to see
    how these objects behave now. For the most part code should become quite a bit
    clearer during the upgrade.
  • ObjectKind has been replaced by ObjectRepr. Rather than holding a reference
    to a StructObject or SeqObject this now is a simple enum that just indicates
    how that object serializes, renders and behaves.
  • Object no longer uses fmt::Display for rendering. Instead the new
    Object::render method is used which has a default implementation.
  • The Object trait has been completely transformed and the new type-erased type
    DynObject has been added to work with unknown objects. This trait has an
    improved user experience and more flexibility. It's now possible to implement
    any non-primitive value type including maps with non string keys which was previously
    not possible.
  • ValueKind is now non exhaustive and got a log of new value types. This resolves
    various issues in particular in relationship with iterators. As a result of this
    functions will no longer accidentally serialize into empty objects for example.
  • Value::from_iterator has been replaced by the new Value::make_iterable,
    Value::make_object_iterable and Value::make_one_shot_iterator. The direct
    replacement is Value::make_one_shot_iterator but for most uses it's strongly
    recommended to use one of the other APIs instead. This results in a much improved
    user experience as it's possible to iterate over such values more than once.
  • The Syntax type has been replaced by the SyntaxConfig type. It uses a builder
    pattern to reconfigure the delimiters.

For upgrade instructions read the UPDATING guide.

Other Changes:

  • Added a new Environment::templates method that iterates over loaded templates. #​471
  • Reverse iteration and slicing now return iterables instead of real sequences.
  • The engine no longer reports iterable as sequences.
  • The value iterator returned by Value::try_iter now holds a reference
    to the Value internally via reference counting.
  • DynObject now replaces Arc<Object>.
  • The debug printing of some objects was simplified.
  • Added the iterable test. #​475
  • The parser no longer panics when using dotted assignments in unexpected places. #​479
  • The CLI now enables unicode support by default.
  • Value::from_serializable is now Value::from_serialize.
  • Ranges are now iterables and no longer sequences and their maximum number of iterations
    was raised to 100000. #​493
  • Value::from is now implemented for Error as public API to create invalid values.
    Previously this behavior was hidden internally in the serde support. #​495
  • UndefinedBehavior::Strict now acts more delayed. This means that now value.key is defined will no longer fail.
  • Added support for line statements and comments. #​503
  • The CLI now accepts --syntax to reconfigure syntax flags such as delimiters. #​504

Configuration

📅 Schedule: Branch creation - "before 8am on Monday" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot added the dependencies Pull requests that update a dependency file label Apr 6, 2026
@renovate renovate bot requested a review from a team as a code owner April 6, 2026 04:30
@github-actions github-actions bot added the rust Pull requests that update Rust code label Apr 6, 2026
@codecov
Copy link
Copy Markdown

codecov bot commented Apr 6, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 88.34%. Comparing base (d8e64e0) to head (e8b5c78).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2548      +/-   ##
==========================================
- Coverage   88.34%   88.34%   -0.01%     
==========================================
  Files         613      613              
  Lines      222675   222675              
==========================================
- Hits       196731   196722       -9     
- Misses      25420    25429       +9     
  Partials      524      524              
Components Coverage Δ
otap-dataflow 90.24% <ø> (-0.01%) ⬇️
query_abstraction 80.61% <ø> (ø)
query_engine 90.74% <ø> (ø)
syslog_cef_receivers ∅ <ø> (∅)
otel-arrow-go 52.45% <ø> (ø)
quiver 91.92% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@albertlockett albertlockett added this pull request to the merge queue Apr 6, 2026
Merged via the queue into main with commit 53cf0f0 Apr 6, 2026
70 of 71 checks passed
@albertlockett albertlockett deleted the renovate/minijinja-2.x branch April 6, 2026 13:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update Rust code

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant