Freewheeling Apps are a durable substrate for the future of software.

Easy to download. Easy to run. Easy to modify. Easy to share.

  • Free and open source. I'm not trying to make money from them, only meaning. I'm beholden to nobody. No dark patterns, ever. I'll never sell them to someone else; there's nothing to sell.
  • Built atop a small, secure and trustworthy platform I don't control. The download is 5MB. No install process on most OSs.
  • All apps contain their source code; you can always look inside the app you're running. You can always modify it using the same software you use to run it. Running your modifications takes a press of a button. Freewheeling apps reward curiosity.
  • Each app quickly stabilizes, and then seldom updates. Because timeless software is safer and more trustworthy (it can't change its mind). Definitely no auto-updates. I think I might be able to get to 50 years without an update. Join me on that voyage!
  • Individual apps stay simple; apps spawn forks and remixes rather than grow complex.

More details in this talk & transcript.

To start using your computer more freely and safely, try out one of these apps (the others can wait):

Coming soon: networking. Freewheeling Apps will become much more useful when you can use them to get your data out of other silos service providers.

Subscribe to the html journal (?)
Back to pre-LÖVE (2022)
Back to Mu epoch (2018-2021)
Apr 19, 2024
The kids got a choose-your-adventure Oregon Trail book from the library, and I got nerdsniped into making a map for it.

(It's easy to get me to do something if it involves opening

A tree summarizing a choose-your-adventure book. Each box has a page number, and you can visualize how the choices each page offers.

After finishing the map, I've been paying attention to the "meta game" of manually adjusting box positions and widths (height depends on amount of text) to make the arrangement pleasing to the eye. Constraints I've grown conscious of during this process:

  • Lining up child nodes vertically
  • Lining up nearby nodes. (imperfectly)
  • Avoiding long edges.
  • Keeping nearby edges approximately the same length.

I'd appreciate if anything seems jarring in this image, or if you have new OCD rules to infect me with :)

One frustration: I spent a while adjusting widths of boxes to not wrap lines within words, only to find that adjusting zoom messes things up again. This is an old problem: I can have precise scaling or crisp text, but not both. All my apps choose the latter.


* *
Apr 15, 2024
I'm reading a paper on my phone in bed and see this problem:

Convolving a list with itself. Given a list [x1, x2, ..., xn−1, xn], where n is unknown, construct [(x1, xn), (x2, xn−1), ..., (xn−1, x2), (xn, x1)] in n recursive calls.

And I am able to switch apps and solve it right on my phone, without needing to get out of bed.

I do have to put up with some klunky syntax, though:


* *
Apr 13, 2024
New convivial platform just dropped

Looks like it's a fork of emscripten augmented to compile a whole OS kernel and userland. Includes raylib for graphics, and Lua bindings to it so I feel at home. Seems easy to build so I'm comfortable depending on the hosted version.

There's an app store anyone can publish apps to. Your changes remain in your browser's local storage until you publish them. All apps in the app store are mounted on the file system under /usr/store so it's easy to look at their source code.

Here's a port of one of my early LÖVE apps, for geometric constructions. It's on the app store so anyone should be able to run it just by clicking on this link.

Disclaimers. It's slow. Still lots of bugs. I had to reboot the VM several times while recording this video. Commands often hang or crash, then completely stop working until I reload. It's never lost my data, though. (Data is stored in local storage.)


* *
Apr 2, 2024
Drawing histograms

screenshot of Lua Carousel drawing some histograms


* *
Mar 29, 2024
The simplest possible dither

"Add noise then quantize."


* *
Mar 24, 2024
I've been thinking some more about handling what are essentially merge conflicts when editing my .love files.

As background, you can click 'edit' on my Carousel-based .love files…

… to edit their source code right on your device, whether it's a computer or mobile device.

The question is how to preserve your edits in the face of changes to lower levels: either the LÖVE app or the .love file you're making changes to.

It seems to me one essential constraint of my platform choice is: upgrading the LÖVE app on a mobile device will blow away all installed .love files. Nothing I can do about this, and luckily LÖVE upgrades rarely enough that maybe we can live with that.

But it does mean we can't get too comfortable making edits on a mobile device. With that in mind, I'm trying out the following flow:

  • When you edit a file in my Carousel-based multi-file apps like, it highlights the file in red to show that it has local modifications.

  • Later if you switch to a new version of, you can choose to 'revert' the file and blow away your changes.

  • You can also 'stash' the file so it won't run but you also still have access to it.

  • Stashed files receive an immutable version suffix, and get highlighted in a third color.

  • Stashed files can be unstashed if you want to try them out after making edits.

Still klunky, but feels like an improvement. And I'm trying to only show the new complexities when they're relevant, so most people won't have to care about them. Above all, the hope is that the red reminds people to not make too many changes on a mobile device.

And yes, I've been thinking about Ink & Switch all week. Perhaps this needs CRDTs and collaborative editing. But making it more friendly might encourage more changes than this platform can candidly handle, given the restrictions of mobile platforms.


* *
Mar 23, 2024
Of all the apps I've built, perhaps my favorite is, my box and line drawing tool. I use it constantly -- including for work. I have a terrible short term memory, and now I make quick mindmaps for every little situation where a full-screen IDE on a huge monitor is too tiny to show all the parts of the codebase I care about right now.

I seldom mess with it, but today I modified it to show gridlines any time I drag things around. Should lead to neater maps!


* *
Mar 22, 2024
All the 1-D cellular automata

Here's every possible rule for a one-dimensional (neighborhood-1) cellular automaton. All on a single infinite surface you can pan and zoom around on your touchscreen device. In 100 lines.


* *
Mar 17, 2024
This is quite amazing: a 2D shell

    Example graph showing how to compute commit stats from a git repo.

    git pipes to dgsh-tee pipes to A and B

    A: awk | sort | uniq | sort -rn
    B: awk | sort | uniq | sort -rn

    (The awk scripts are different.)

    The outputs of A and B go to the stdout (in order, without interleaving), separated by a couple of echo commands.


* *
Mar 16, 2024
A screenshot of a window showing a board for the game of Diplomacy. There are 7 players: Britain, France, Germany, Austria, Italy, Turkey and Russia. Squares are armies, and rectangles are fleets. There's a cryptic legend on the left showing the color and piece that can be added with a click of the mouse.


* *
RSS (?)
twtxt (?)
Station (?)