Unfortunately, it turns out there's some significant limitations to Decker, and Lilt even moreso. I'm sure most of these are deliberate, to keep Decker's API easy to learn and implementation easy to maintain, and to stick firmly within the "ditherpunk" aesthetic it's going for, but they caught me by surprise, so I wanted to make note of them.
- Although Lilt can do everything Decker can do (you can literally load a Decker deck, send it events which can trigger arbitrary code, and read back the results), most of that functionality is not available to Lilt itself. For example, in Decker you can plop a Canvas widget on a card and then write code to manipulate it, but you can't create a "headless" Canvas widget in Lilt, short of loading a deck that already has one.
- Although GIF files are limited to 256 colours, on import Decker dithers them to black-and-white, or posterises them to a 16-colour palette. Lilt can read GIF files, but it's even more limited - it only supports Decker's default 16-colour palette, it doesn't let you choose a different one.
- Like widgets and palettes, fonts are only available within the context of a deck. Since my whole goal was to make an image with text labelling buttons, this was a show-stopper.