Bonito 5.0 is out, a big release focusing on stability and performance.
Most of the work went into networking, session handling and serialization. Talking to the browser is now noticeably faster and more stable.
Performance. HTTP/2 transport plus a reworked serialization protocol. ~3× WebSocket throughput, ~2.8× faster serialization on large payloads with a fraction of the allocations. Under load with many concurrent connections, ~30× more updates/sec than 4.2. Benchmarks in the blog post.
New docs system. A drop-in replacement for a Documenter build: keep your existing make.jl and markdown, swap in format = Bonito.DocumenterBonito(), and the whole site is rendered by Bonito. VitePress-style theme, search, version switcher and an (experimental) blog with RSS. The linked blogpost and new Bonito docs are build with it!
BonitoWidgets.jl. New companion package: tabs, resizable splits, collapsibles, floating windows, a VSCode-style Workspace. Panels stay mounted, so a WGLMakie figure keeps its WebGL context and camera through any layout change.
Dark-mode-aware widgets. Built-ins follow the OS light/dark setting and can be restyled via CSS variables.
Remote apps. Drive an app running in one Julia process from another. Groundwork for remote BonitoBook workers.
Under the hood:Session split into RootSession + sub-sessions (finalizers replaced with refcounting), a single error boundary that surfaces render/init errors instead of killing the session, KeyedList, ANSI + CommonMark terminal output, asset-server range requests and caching, plus a lot of reconnect/race/thread-safety fixes and new tests.
Requires Julia 1.11 and HTTP.jl 2.4. Session/SubConnection internals changed.
Amazing stuff, looking forward to taking this for a spin! Any thoughts about where the GUI future of Makie is going? Will bonito+wgl be the way forward for complex apps with panels, or will some of this functionality make it into GLMakie?
Thank you for Bonito! We’ve been using it for a year on an internal website, and on the whole it’s been a pleasant experience. The end result looks great, very responsive! We used it to drive an interactive MTK simulation in the browser, smooth as butter.
Will bonito+wgl be the way forward for complex apps with panels, or will some of this functionality make it into GLMakie?
The pipe dream is to kind of merge them!
I have a html render prototype for GLMakie which can render Bonito apps with Makie, and if we can start to use Julia callbacks instead of JS via wasm compilation, we could even run most callbacks with GLMakie.
The more reasonable plan is, to share API’s for Button/Menu/Tabs etc, so one can somewhat comfortably switch between a GLMakie and Bonito app.
Btw, there’s a big release coming adding more widgets to Makie, including tabs, tables, and some other improvements for GUIs, so they should both grow to allow more and more complex GUIs.
Sounds great! That sounds like it will let Makie cover a lot of typical GUIs. At least for us, tabbing/scrolling will make it much easier to set up tidy interfaces.
Though to be more precise, he pushed to finalize the latest features to make Pluto as stable as possible and then moved it to an organization with other maintainers, so it’s not that Pluto is going to die, it simply means that @fonsp is moving on with new adventures.
That being said, it’s very exciting to see all new recent development on notebook-like environment like Bonito, SpaceStation and KaimonSlate!
Thank you for the excellent work! I am working on Kaimon Slate (GitHub - kahliburke/KaimonSlate.jl · GitHub), and have added support for Bonito based plotting with the previous version. I would guess that upgrading that to the new version will probably go pretty smoothly as well.