This page is part of a static HTML representation of the TiddlyWiki at https://tiddlywiki.com/

TiddlyWiki Pre-release

31st July 2023 at 12:21pm

This is a pre-release build of TiddlyWiki provided for testing and review purposes.

Please don't try to depend on the pre-release for anything important – you should use the latest official release from https://tiddlywiki.com.

All of the changes in this pre-release are provisional until it is released and they become frozen by our backwards compatibility policies. This is the perfect time to raise questions or make suggestions. Please open a ticket at GitHub or make a post at https://talk.tiddlywiki.org/.

The pre-release is also available as an empty wiki ready for reuse.

Release 5.4.0

Updated: 1st September 2025 at 12:00am

See the detailed change history on GitHub and other releases.

Release v5.4.0 deliberately and forensically loosens backwards compatibility to clear the path for significant new features and fundamental improvements to be made in the future.

Please note that there are some changes that do not yet change notes, please see the change history on GitHub for the full list of changes.

See the project plan for full details.

EnhancementHackabilityDynamic parameters for macro/procedure/function calls

GitHub:

This PR extends the handling of macro/procedure/function made via the <<..>> syntax to allow parameters to be specified dynamically instead of just as static strings. To indicate the new syntax the colon that usually separates a parameter name from its value is replaced by an equals sign.

For example, by it is now possible to do things like this:

<<mymacro param={{Something}}>>

Or even this:

<div class=<<mymacro param={{Something}}>>>

Or this:

<div class=<<mymacro param={{{ [<myvar>addprefix[https:] }}}>>>

Parameters can also be specified for the inner call:

<div class=<<mymacro param={{{ [<innermacro p={{Something}}>addprefix[https:] }}}>>>

The extended syntax can be used in three different settings:

  • As a standalone construction
  • As a widget attribute value
  • As a filter operand value

In all cases, it is now possible to use an equals sign instead of a colon to allow parameter values to be passed as a transclusion, filter expression or nested call.

EnhancementHackabilityBackground actions and media query tracking

GitHub:

Introduces Background Actions that are triggered whenever there is a change to the results of a specified filter.

Building on that, it also introduces a new Media Query Tracker Mechanism that can track the results of any CSS media query (not just dark mode), storing the results in a shadow $:/info/... tiddler

These improvements were cherrypicked from #8702 - Colour Handling Improvements when it was deferred until v5.5.0.

EnhancementHackabilityMulti-valued variables and let filter run prefix

GitHub:

This PR introduces a new filter run prefix :let that assigns the result of the filter run to a variable that is made available for the remaining filter runs of the filter expression. It solves the problem that previously it was impossible to compute values for filter operator parameters; parameters could only be a literal string, text reference or variable reference.

This PR also introduces multi-valued variables, the ability to store a list of results in a variable, not just a single string. They can be assigned with the new :let filter run prefix, or the existing <$let> widget. The full list of values can be retrieved using round brackets instead of the usual angle brackets. In all other contexts only the first item in the list is used as the variable value.

Credits