# Down the Rabbit Hole This is a major refactoring of the TiddlyWiki5 code to introduce a plugin module architecture. The work has been done by creating a new boot kernel architecture and then methodically transliterating the core TiddlyWiki5 code to fit into that architecture. The work hasn't completely caught up with the old code, and so the two code bases will live alongside one another for a little while the new code is built out. ## Try it out The easiest way to try out the code is to visit http://tiddlywiki.com/tiddlywiki5/ For trying it out under `node.js`, two batch files are provided: * `run.sh` boots the kernel and loads the core modules and then outputs the `$tw` global for inspection * `bld.sh` builds the new TiddlyWiki 5 HTML file (placed in the `tmp/tw5/` directory by default) ## Boot Kernel The file `core/boot.js` is a barebones TiddlyWiki kernel that is just sufficient to load the core plugin modules and trigger a startup plugin module to load up the rest of the application. The kernel includes: * Eight short shared utility functions * Three methods implementing the plugin module mechanism * The `$tw.Tiddler` class (and three field definition plugins) * The `$tw.Wiki` class (and three tiddler deserialization methods) * Code for the browser to load tiddlers from the HTML DOM * Code for the server to load tiddlers from the file system Each module is an ordinary `node.js`-style module, using the `require()` function to access other modules and the `exports` global to return JavaScript values. The boot kernel smooths over the differences between `node.js` and the browser, allowing the same plugin modules to execute in both environments. In the browser, `core/boot.js` is packed into a template HTML file that contains the following elements in order: * Ordinary and shadow tiddlers, packed as HTML `