[ANN] Bonito@v5

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.

Full write-up and benchmarks: Bonito 5.0 | Bonito

Thanks to ReynKo for funding a big part of this.

Stay tuned for new updates to BonitoBook, WGLMakie compile time improvements, and WASM support, which I plan to release in the coming weeks!

Timely and especially welcome since the Pluto maintainer just announced he’s dropping the project.

Oh no! That’s a real shame!

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.

Cool! Any preview you can share?

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.

I just got around to make one :wink:

I dont think that covers all new features, but quite a few already :wink:
#5702

I think I am not the only one when I say this is gonna improve my analysis scripts a lot, thank you very much for your efforts!

What? Where did you find this information?

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!

Thanks for reading beyond the headline!

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.

Wow! Looks amazing. Any chance those tables would be able to be an input table that you could paste into?