From a90b1dbb496075606be936fbddafd251f0107fb5 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 9 Mar 2024 14:24:42 +0000 Subject: [PATCH] Docs for bags and recipes Prompted by https://talk.tiddlywiki.org/t/whats-a-bag-and-whats-a-tiddlywebadaptor/9278 --- .../tiddlers/concepts/Bags and Recipes.tid | 42 +++++++++++++++++++ .../tiddlers/definitions/TiddlyWeb.tid | 5 +-- .../tiddlers/definitions/TiddlyWebAdaptor.tid | 9 ++++ 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 editions/tw5.com/tiddlers/concepts/Bags and Recipes.tid create mode 100644 editions/tw5.com/tiddlers/definitions/TiddlyWebAdaptor.tid diff --git a/editions/tw5.com/tiddlers/concepts/Bags and Recipes.tid b/editions/tw5.com/tiddlers/concepts/Bags and Recipes.tid new file mode 100644 index 000000000..19c4f6149 --- /dev/null +++ b/editions/tw5.com/tiddlers/concepts/Bags and Recipes.tid @@ -0,0 +1,42 @@ +created: 20240309135835396 +modified: 20240309142156125 +tags: Concepts +title: Bags and Recipes +type: text/vnd.tiddlywiki + +The bags and recipes model is a reference architecture for how tiddlers can be shared between multiple wikis. It was first introduced by TiddlyWeb in 2008. + +The principles of bags and recipes can be simply stated: + +# Tiddlers are stored in named "bags" +# Bags have access controls that determines which users can read or write to them +# Recipes are named lists of bags, ordered from lowest priority to highest +# The tiddlers within a recipe are accumulated in turn from each bag in the recipe in order of increasing priority. Thus, if there are multiple tiddlers with the same title in different bags then the one from the highest priority bag will be used as the recipe tiddler +# Wikis are composed by splicing the tiddlers from the corresponding recipe into the standard TW5 HTML template + +A very simple example of the recipe/bag model might be for a single user who maintains the following bags: + +* ''recipes'' - tiddlers related to cooking recipes +* ''work'' - tiddlers related to work +* ''app'' - common tiddlers for customising TiddlyWiki + +Those bags would be used with the following recipes: + +* ''recipes'' --> recipes, app - wiki for working with recipes, with common custom components +* ''work'' --> work, app - wiki for working with work, with common custom components +* ''app'' --> app - wiki for maintaining custom components + +All of this will work dynamically, so changes to the app bag will instantly ripple into the affected hosted wikis. + +A more complex example might be for a teacher working with a group of students: + +* ''student-{name}'' bag for each students work +* ''teacher-course'' bag for the coursework, editable by the teacher +* ''teacher-tools'' bag for custom tools used by the teacher + +Those bags would be exposed through the following hosted wikis: + +* ''student-{name}'' hosted wiki for each students work, including the coursework material +* ''teacher-course'' hosted wiki for the coursework, editable by the teacher +* ''teacher'' hosted wiki for the teacher, bringing together all the bags, giving them an overview of all the students work + diff --git a/editions/tw5.com/tiddlers/definitions/TiddlyWeb.tid b/editions/tw5.com/tiddlers/definitions/TiddlyWeb.tid index 02a335d7f..c3bae2b8a 100644 --- a/editions/tw5.com/tiddlers/definitions/TiddlyWeb.tid +++ b/editions/tw5.com/tiddlers/definitions/TiddlyWeb.tid @@ -2,8 +2,9 @@ created: 201308300841 modified: 20170127221451610 tags: Definitions title: TiddlyWeb +type: text/vnd.tiddlywiki -TiddlyWeb is a reference implementation for an interface to put [[Tiddlers]] on the web. +TiddlyWeb is a reference implementation for an interface to put [[Tiddlers]] on the web using the [[Bags and Recipes]] model. It was created by a team led by Chris Dent at [[Osmosoft]] under [[BT]] from 2008 to 2012. @@ -16,5 +17,3 @@ Other implementations of the API include: * [[TiddlyWiki App Engine Server|https://github.com/rsc/tiddly]], a 300-line Go implementation from Russ Cox * [[TiddlyWiki 5 server module|https://github.com/Jermolene/TiddlyWiki5/blob/master/core/modules/commands/server.js]], the bare-bones subset of the API implemented in TiddlyWiki version 5 for Node.js * [[tiddly-wiki-server|https://github.com/nathanielknight/tiddly-wiki-server]], an implementation based on Rust and SQLite - -As of early 2017, none is currently as complete as TiddlyWeb itself. diff --git a/editions/tw5.com/tiddlers/definitions/TiddlyWebAdaptor.tid b/editions/tw5.com/tiddlers/definitions/TiddlyWebAdaptor.tid new file mode 100644 index 000000000..74043c438 --- /dev/null +++ b/editions/tw5.com/tiddlers/definitions/TiddlyWebAdaptor.tid @@ -0,0 +1,9 @@ +created: 20240309100338678 +modified: 20240309135821423 +tags: Definitions +title: TiddlyWebAdaptor +type: text/vnd.tiddlywiki + +TiddlyWebAdaptor is a component of [[TiddlyWiki on Node.js]]. It provides the means to synchronise changes to tiddlers from the browser to a server, and from the server to the browser. It can be found in the plugin [[$:/plugins/tiddlywiki/tiddlyweb]]. + +TiddlyWebAdaptor was designed to be compatible both with TiddlyWeb and with TiddlyWiki's own built-in server mechanism. The [[Bags and Recipes]] model is fully supported by [[TiddlyWeb]], but TiddlyWiki's built-in server only supports a simplified model with a single bag and a single recipe.