A browser with Wasm GC and tail call support is required for this demo. We recommend using either Mozilla Firefox or Google Chrome.
Adventures in Dynamicland

This page runs on Scheme->WebAssembly using Hoot. It implements a reverse-engineered RealTalk, the logic engine behind Bret Victor's Dynamicland. The purpose of this page is to document the implementation for people like me who want to build their own.
Notably this page goes against some of the design principles of Dynamicland: it is not intended to be a replacement in any way. But Dynamicland is not publicly available, and Oakland is pretty far away. So with apologies to Bret, let's have a look at RealTalk as I've reverse engineered it and explore some of its concepts.
Here are two pages. Their associated code is shown below.
Page 1:
Page 2:
Meaning, page 1 asserts a claim: it should be highlighted red! Page 2 introduces a rule: if a page claims to be a certain color, then set its background to that color, but only if that page is more than 100px to the right of page 2. Pages only exist if they are contained within the bounds of the table, and can only assert claims/rules for as long as they exist.
Try dragging the pages above onto the table below!
Instead of paper pages, this page uses HTML divs. I will use them to illustrate some of RealTalk's behaviour as we build it up. Each page is associated with some code that is active when the page is contained within the table div. Follow the links below to learn how all of this works: I promise it is more interesting than 'if both pages are on the table, colour one of them red'.
Page 3 is a bonus page: try rotating it by bringing it in focus (click) and pressing 'q' or 'e'.