TiddlyWiki
# TiddlyWiki

TiddlyWiki ist eine freie Webanwendung, die ein Wiki innerhalb eines einzelnen HTML-Dokuments realisiert.

## Charakteristik

Ein leeres TiddlyWiki hat inklusive des eingebundenen JavaScript- und CSS-Codes eine Größe von etwa 2,1 Megabyte (Version 5.1.19). Es wird durch JavaScript gesteuert und benötigt in seiner einfachsten Version – Speichern durch Speichern Unter- Funktion des Webbrowsers – keine Serveranwendung. Sämtliche Daten werden innerhalb des Dokuments gespeichert. Dadurch eignet es sich als portable Informationssammlung, die in allen Browsern, auf allen Betriebssystemen geöffnet, bearbeitet und gespeichert werden kann. Es sind jedoch auch viele alternative Speichermethoden verfügbar, etwa mittels via Node.js-basiertem Webserver oder mittels Browser-Plug-in.

### Tiddler

Die einzelnen „Seiten“ des Wikis werden innerhalb des Dokuments in div-Blöcken verwaltet, die per DHTML angezeigt und versteckt werden können. Diese Informationsblöcke werden Tiddler (Knirpse) genannt. Sie bestehen standardmäßig aus Titel, Datum, Tag-Zeile und Textbereich. Mittels Tags können (neben normaler Wiki-Verlinkung) inhaltlich zugehörige Tiddler verknüpft werden. Es sind auch Tag-Hierarchien möglich.

### Import und Export

Der Austausch von Tiddlern zwischen Wikis mittels Drag & Drop oder eine Synchronisation zwischen verschiedenen TiddlyWiki-Dateien wird nativ unterstützt. Das Wiki oder ausgewählte Tiddler können von und in verschiedene Formate importiert und exportiert werden, standardmäßig CSV, JSON, oder das für TiddlyWiki optimierte TID Format. Letzteres sind menschenlesbare Text-Dateien mit der Endung '.tid' (Abkürzung für Tiddler).

### Wiki-Syntax

TiddlyWiki verwendet wie die meisten Wikis eine eigene Wiki-Syntax, die entfernt vergleichbar ist mit der von klassischen MediaWikis. Mittels des Plug-ins Markdown parser kann man Tiddler auch in Markdown erstellen.

Es werden standardmäßig 26 verschiedene, per Button oder manuell hinzufügbare Formatierungen, Textschnipsel und Makros unterstützt, u. a. Textabsätze, verschiedene Inline-Formatierungen, Links, Bilder, Listen, Tabellen, Zitate und vorformatierter Text. Ferner können HTML-Konstrukte, SVGs, CSS-Stile, JavaScripte und Makros verwendet werden. Es können eigene Textschnipsel erstellt und gespeichert werden. Auch können andere Tiddler, dargestellt durch nutzerdefinierte Templates, transkludiert werden. Der eingegebene Text kann mittels Livevorschau betrachtet werden. Standardmäßig wird eine Vorschau und Diff unterstützt. Mittels des Plug-ins Tools for exploring the internals of TiddlyWiki können auch das generierte HTML sowie JSON-artige Parse-Trees betrachtet werden.

### Such-Syntax

TiddlyWiki verfügt über eine eigene Such-Syntax, welche Listen von Tiddlern zurückgibt. Beispielsweise findet [all!is[system]sort[created]] alle vom Nutzer erstellten Tiddler, sortiert nach Erstelldatum. Die Such-Syntax kann vom Nutzer zum Suchen nach Tiddlern verwendet werden, aber sie ist auch ein integraler Bestandteil der Kernfunktionalitäten des Wikis. Ebenfalls wird sie in Makros verwendet, z. B. für das Erstellen von Link-Listen, TOCs oder Tab-Gruppen. Mit dieser Such-Syntax kann auch auf sogenannte Tiddler-Attribute zugegriffen werden, welches nutzerdefinier- und modifizierbare Schlüssel-Wert-Felder sind, die Tiddlern zugeordnet sind.

## Anpassbarkeit

TiddlyWiki ist modular aufgebaut: Die meisten Funktionen des Wikis sind selbst in Tiddlern definiert. Die Ausnahme sind Kern-Funktionen, die zum Starten des Wikis benötigt werden. Diese Kern-Funktionalitäten werden in TiddlyWiki-Lingua als Kernel bezeichnet. Zusätzliche Funktionen können in Form von eigenen Tiddlern hinzugefügt werden.

Auf diese Weise ist es z. B. möglich, Sprachdateien hinzuzufügen, die die englischsprachigen Bedienelemente in eine andere Sprache übersetzen. Auf die gleiche Weise kann das Design angepasst werden, z. B. mittels Veränderung des HTMLs eines zugrundeliegenden Template Tiddlers oder mittels Hinzufügen von CSS- oder JavaScript-Tiddlern. Auch die sogenannten System-Tiddler oder Shadow-Tiddler können modifiziert werden. Dabei werden diese nicht überschrieben, sondern es wird eine Kopie mit gleichem Namen erstellt, die dann bearbeitet wird. Löscht man die Kopie, wird wieder der darunterliegende originale System-Tiddler hergestellt.

### Erweiterungen

Auf die gleiche Weise funktionieren Plug-ins. Diese sind Gruppen von Tiddlern, welche vorhandene System-Tiddler duplizieren und abändern oder eigene neue Tiddler hinzufügen. Sie enthalten neben ausführbarem JavaScript-Code in der Regel auch die Dokumentation des Plug-ins sowie oft Konfigurationsmöglichkeiten. Auch diese Tiddler können wie alle anderen vom Nutzer modifiziert werden. TiddlyWiki ist also hochgradig 'hackbar'.

Basierend auf diesem Plug-in-Mechanismus wurden viele Erweiterungen für TiddlyWiki veröffentlicht, z. B. ein Aufgabenplaner von Simon Baird namens mGSD, der auf dem Modell Getting Things Done von David Allen aufsetzt. Ebenfalls über die Plug-in-Schnittstelle wird der Hosting-Service TiddlySpot realisiert, der das Wiki nach (zunächst nur lokal vorgenommenen) Änderungen durch einen erneuten Upload zum Hosting-Server allgemein verfügbar macht.

Spezielle Laufzeitumgebungen für TiddlyWiki ermöglichen die Benutzung auf Smartphones oder Tablets unter iOS, webOS oder Android.

## Vor- und Nachteile

TiddlyWiki ist sehr kompakt und findet inklusive der im Wiki bereitgestellten Informationen problemlos auf einem USB-Speicherstick Platz. Da TiddlyWiki Programmcode und Textinhalte in einer einzelnen Datei speichert, können so vollständige Präsentationen in dieser einen Datei weitergegeben und in jedem JavaScript-fähigen Browser angezeigt werden.

Da alle Tiddler innerhalb einer HTML-Seite angezeigt werden, ist es möglich, auch während der Bearbeitung eines Tiddlers weiterführende Informationen innerhalb des Wikis nachzuschlagen, ohne das Browserfenster wechseln zu müssen. Durch gezieltes Wegklicken oder Zusammenklappen unerwünschter Tiddler und Sortieren der Tiddler durch Drag&Drop können mehrere Tiddler untereinander betrachtet werden und so temporäre Kontext-Ansichten auf ein Themengebiet erzeugt werden. Für diese Ansichten können mittels Knopfdruck Permalinks erstellt werden.

Der kompakte Aufbau ist zugleich auch Hauptmanko: Zur Darstellung werden nicht nur die aktuell angeforderten Informationen an den Browser übermittelt, sondern prinzipiell immer die Gesamtheit der im Wiki gespeicherten Inhalte. Daher belasten auch Daten, die möglicherweise vom Benutzer gar nicht abgefragt werden, Übertragungskapazitäten und Hauptspeicher. Es gibt zwar die Möglichkeit, Tiddler erst dann ins Dokument zu laden, wenn sie tatsächlich geöffnet werden (Lazy Loading), aber dies ist mit Einschränkungen verbunden: Dies geht nur mit Node.js als Backend und beispielsweise können auf Tags basierende Übersichten nicht dargestellt werden, da diese noch nicht alle geladen sind. Zudem ist bei einer Bereitstellung im Netz der Server nur mit der Auslieferung der Datei befasst; Rechenzeit für die gesamte Programmlogik muss vom Client bereitgestellt werden, was aber heute selbst für leistungsschwächere Smartphones kein Problem mehr darstellt. Auch für die Bereitstellung via Internet nach Änderungen ist immer die Übertragung der gesamten Datei zum Server erforderlich. Somit eignet sich TiddlyWiki nur für kleine bis mittlere Datenmengen. Bei mehreren tausend Tiddlern kann man allerdings das Wiki nach Kernthemen in mehrere Wikis teilen.

TiddlyWiki verfügt über keine herkömmliche Bearbeitungshistorie. Bei einer Änderung wird eine Kopie der gesamten Datei mit einem Timestamp gespeichert. Mit Plug-ins lässt sich jedoch eine Timeline für die Tiddlers anzeigen. Diese Option lässt sich auch ausschalten.

## TiddlyWiki5

Am 20. September 2014 ist eine vollständig neu programmierte Nachfolgeversion auf Basis von HTML5 erschienen, die node.js verwendet. Die ursprüngliche Version TiddlyWiki Classic wird derweil immer noch von zahlreichen Anwendern genutzt.

