A bit over five years ago, I announced Chrysalis on these forums. We’ve come a long way since, and there’s a tremendous amount of work ahead still. However, my brain decided to go on an adventure today, and came up with something that I believe will be as useful as Chrysalis turned out to be, something that would complement it quite well: a Kaleidoscope Firmware Builder.
An application that lets you build custom firmware easily. Not a firmware editor, not an IDE. A very simple tool: drop a sketch onto it, press a button, wait a bit, and get a built firmware back. No additional setup necessary, the tool does everything else. Cross-platform and all that.
The working title - and probably the final title too, because I liked it a lot - is Puparium (thanks @liw!).
There is no code yet, nothing to try, and it will be a while until I get to a stage where there’s something even worth trying, because this is a low priority task, something I do on the side to satisfy my curiosity, and calm my brain’s desire to do it. But there is a roadmap!
The short version of it is this:
- Initially, the app will only support local building, and will require Docker to do so. But it will set up everything nicely, including the container it uses for the build, so as long as Docker is installed, the app will Just Work™.
- At first, you’ll need to give it a single-file sketch (an
.ino
file), and it will spew out compiled firmware which you can flash with Chrysalis. - Later on, I’ll teach it to be able to enable/disable a selected subset of plugins, so you can customise the firmware to some extent.
- Once those things are working reasonably well, I’ll build a little service that can compile firmware online. Puparium will then be able to send your sketch over, have it compiled there, and download the result. This makes Docker an optional dependency.
- Once that works reasonably well too, I’ll decouple the UI from the app, and make it possible to host the UI on any webserver.
- Every part is free software and self-hostable. (AGPL-3.0-only)
Non-goals:
- It will not become a complete firmware builder/customiser like ZSA’s Oryx.
- It will not be a part of Chrysalis, and will not replicate features that exist there (such as flashing). It complements Chrysalis, and does not replace it.
I’ll be writing the whole thing in Rust, the frontend, the backend, and the compile service too - all of it. The application itself will use Tauri to bundle things together into a neat little app.
Feedback on the roadmap, ideas, wishes are most welcomed.