A self-contained JavaScript wiki for the browser, Node.js, AWS Lambda etc.
Find a file
Jeremy Ruston 5d1c1eaf87
Introduce multi-valued variables and let filter run prefix (#8972)
* Introduce let filter run prefix for assigning filter run result to a variable

* Get rid of the special behaviour for all[]

Not needed because the input to the filter run is available

* Fix tests

* Fix tests

* Cleanup

* Support for saving result lists in a variable

Extend let filter run prefix to store list of results, and add varlist operator for accessing variables as a list.

We already had partial support for variables returning a list of values in order for functions to work, now we extend it so that any variable can be used to store a list

We should extend the set widget so that it returns a result list that can be accessed with the varlist operator

* Docs update

* Introduce letlist widget for assigning lists to variables

Terrible name. Annoyingly, we can't overload the existing let or set widgets.

* Docs update

* Update DefaultTiddlers to highlight the new docs

* Fixed varlist crash with empty parameter

* Switch to triple brace syntax for assigning filtered lists

* Docs update

* Test for multivalued functions

* varlist operator: fixed crash accessing non-existent variable

See https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972#issuecomment-2712068743

* Dispense with the letlist widget

What this PR actually does is rename the letlist widget to "let". The result is the same as using the letlist widget, but it is backwards compatible by virtue of the fact that all existing ways to access variables will only see the single value for the variable.

* Refactor the let filter run prefix to assign the input list to the variable named by the filter run

These semantics are much simpler, and allow the variable name to be computed.

* Missed off 211b135265

* Docs update

* Bug fix

* Introduce round brackets for multi-valued filter operands

Allowing us to drop the varlist operator

* Introduce => as a shortcut syntax for the let filter run prefix

Also relax the requirement for a filter run prefix to be followed by an opening square bracket

* Fix bug exposed in "Filter Operators" tiddler

See https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972#issuecomment-2740003414

* Fix bug with missing variable attributes

See https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972#issuecomment-2752792329

* Fix bug with round brackets for 2nd parameter onwards

* Allow functions to take multivalued parameters

* Simplify title operator

* Extend title operator to allow negated form to use multi-valued variables

* Remove duplicate test

* Update action-log widget to log multi-valued attributes

* Docs updates

* Fix typos

* Happy linter happy life

* Fix version numbers of from-version procedures

* Another incorrect version number

* Add change note

* Fix filenames of tests

* Typo

* Update let.js

* Docs updates
2025-11-22 12:29:42 +00:00
.github Update PR validator to v6 (#9434) 2025-11-12 17:47:50 +00:00
bin Revert "Bot to remind of change note (#9407)" 2025-11-11 09:19:57 +00:00
boot Preserve the module insertion order in forEachModuleOfType (#9305) 2025-10-21 11:37:55 +01:00
community Revert "Create LinOnetwo.tid (#9425)" (#9428) 2025-11-12 12:23:05 +01:00
core Introduce multi-valued variables and let filter run prefix (#8972) 2025-11-22 12:29:42 +00:00
core-server Get-file web server route now support streaming (#9078) 2025-10-23 11:55:30 +01:00
editions Introduce multi-valued variables and let filter run prefix (#8972) 2025-11-22 12:29:42 +00:00
languages Update chinese language files (#9375) 2025-10-30 09:11:36 +01:00
licenses Signing CLA (#9086) 2025-10-28 22:15:04 +01:00
plugins/tiddlywiki Fix/serialize close html tag (#9437) 2025-11-14 21:33:45 +00:00
themes/tiddlywiki Replace CSS property macros in Snow White theme (#9243) 2025-10-29 11:07:37 +00:00
.gitignore Add StoryList to gitignore (#8013) 2024-02-28 11:27:00 +00:00
.jshintignore Ignore any node_modules directory 2015-12-19 18:47:58 +00:00
.npmignore Ignore any node_modules directory 2015-12-19 18:47:58 +00:00
code-of-conduct.md Add code-of-conduct.md to root of repo 2024-08-07 14:36:11 +01:00
contributing.md More rename Jermolene/TiddlyWiki5 to TiddlyWiki/TiddlyWiki5 2024-07-25 17:44:52 +01:00
eslint.config.mjs Fix (eslint): removes unneeded dependencies (#9332) 2025-10-11 14:11:21 +01:00
license Update for 2025 2025-01-05 14:35:27 +00:00
package.json Fix (eslint): removes unneeded dependencies (#9332) 2025-10-11 14:11:21 +01:00
playwright.config.js Add support for running in-browser tests via playwright in GitHub CLI (#7820) 2023-10-29 09:05:24 +00:00
readme.md Update readme and release note for v5.3.8 2025-08-07 09:00:32 +01:00
tiddlywiki.js Make require() compliant with CommonJS Modules/1.1 2013-10-12 13:44:09 -04:00

Welcome

Welcome to TiddlyWiki, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation.

TiddlyWiki is a complete interactive wiki in JavaScript. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable WikiText.

Demo

Learn more and see it in action at https://tiddlywiki.com/

Developer Documentation

Developer documentation is in progress at https://tiddlywiki.com/dev/

Pull Request Previews

Pull request previews courtesy of Netlify

Deploys by Netlify

Join the Community

Official Forums

https://talk.tiddlywiki.org/

The new official forum for talking about TiddlyWiki: requests for help, announcements of new releases and plugins, debating new features, or just sharing experiences. You can participate via the associated website, or subscribe via email.

talk.tiddlywiki.org is a community run service that we host and maintain ourselves. The modest running costs are covered by community contributions.

Google Groups

For the convenience of existing users, we also continue to operate the original TiddlyWiki group (hosted on Google Groups since 2005): https://groups.google.com/group/TiddlyWiki

Developer Forums

GitHub Stats

There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development.

Other Forums

Documentation

There is also a discussion group specifically for discussing TiddlyWiki documentation improvement initiatives: https://groups.google.com/group/tiddlywikidocs


Installing TiddlyWiki on Node.js

TiddlyWiki is a SingleFileApplication, which is easy to use. For advanced users and developers there is a possibility to use a Node.js client / server configuration. This configuration is also used to build the TiddlyWiki SinglePageApplication

  1. Install Node.js
    • Linux:
      Debian/Ubuntu:
      apt install nodejs
      May need to be followed up by:
      apt install npm
      Arch Linux
      yay -S tiddlywiki
      (installs node and tiddlywiki)
    • Mac
      brew install node
    • Android
    • Other
  2. Open a command line terminal and type:
    npm install -g tiddlywiki
    If it fails with an error you may need to re-run the command as an administrator:
    sudo npm install -g tiddlywiki (Mac/Linux)
  3. Ensure TiddlyWiki is installed by typing:
    tiddlywiki --version
    • In response, you should see TiddlyWiki report its current version (eg "5.3.8". You may also see other debugging information reported.)
  4. Try it out:
    1. tiddlywiki mynewwiki --init server to create a folder for a new wiki that includes server-related components
    2. tiddlywiki mynewwiki --listen to start TiddlyWiki
    3. Visit http://127.0.0.1:8080/ in your browser
    4. Try editing and creating tiddlers
  5. Optionally, make an offline copy:
    • click the save changes button in the sidebar, OR
    • tiddlywiki mynewwiki --build index

The -g flag causes TiddlyWiki to be installed globally. Without it, TiddlyWiki will only be available in the directory where you installed it.

Warning
If you are using Debian or Debian-based Linux and you are receiving a node: command not found error though node.js package is installed, you may need to create a symbolic link between nodejs and node. Consult your distro's manual and whereis to correctly create a link. See github issue 1434.

Example Debian v8.0: sudo ln -s /usr/bin/nodejs /usr/bin/node


Tip
You can also install prior versions like this:
npm install -g tiddlywiki@5.1.13

Using TiddlyWiki on Node.js

TiddlyWiki5 includes a set of commands for use on the command line to perform an extensive set of operations based on TiddlyWikiFolders, TiddlerFiles.

For example, the following command loads the tiddlers from a TiddlyWiki HTML file and then saves one of them in static HTML:

tiddlywiki --verbose --load mywiki.html --render ReadMe ./readme.html

Running tiddlywiki from the command line boots the TiddlyWiki kernel, loads the core plugins and establishes an empty wiki store. It then sequentially processes the command line arguments from left to right. The arguments are separated with spaces.

Introduced in v5.1.20 First, there can be zero or more plugin references identified by the prefix + for plugin names or ++ for a path to a plugin folder. These plugins are loaded in addition to any specified in the TiddlyWikiFolder.

The next argument is the optional path to the TiddlyWikiFolder to be loaded. If not present, then the current directory is used.

The commands and their individual arguments follow, each command being identified by the prefix --.

tiddlywiki [+<pluginname> | ++<pluginpath>] [<wikipath>] [--<command> [<arg>[,<arg>]]]

For example:

tiddlywiki --version
tiddlywiki +plugins/tiddlywiki/filesystem +plugins/tiddlywiki/tiddlyweb mywiki --listen
tiddlywiki ++./mygreatplugin mywiki --listen

Introduced in v5.1.18 Commands such as the ListenCommand that support large numbers of parameters can use NamedCommandParameters to make things less unwieldy. For example:

tiddlywiki wikipath --listen username=jeremy port=8090

See Commands for a full listing of the available commands.

Upgrading TiddlyWiki on Node.js

If you've installed TiddlyWiki on Node.js on the usual way, when a new version is released you can upgrade it with this command:

npm update -g tiddlywiki

On Mac or Linux you'll need to add sudo like this:

sudo npm update -g tiddlywiki

Also see

This readme file was automatically generated by TiddlyWiki