That’s great, thank you in advance. I’ve tried it, got a lot of questions, and decided to wait, and try again after there is something like a manual. Presumably there are things which are obvious to users of Pluto and/or Jupyter, but I had little experience with these.
I’ve used Pluto and Jupyter a lot and i find one striking obstacle in Pluto to doing larger projects involving collaboration. As Pluto reruns everything when you open it, and doesn’t embed results, it is limited as a collaborative research tool, you can’t just share with a colleague or student and start discussing results. I also don’t find hidden state an issue. Pluto is great for teaching, but my ideal notebook for research would have package management, non reactive execution, and results embedding. Does bonitobook embed results like Jupyter?
Edit - my impression is “yes”. Looks very promising!
This is really cool, Simon,. I was wondering whether there are any immediate plans of supporting ProgressMeter.jl for long-running computations?
Yeah, there is already a big loading bar for internal use (e.g. export) which i wanted to hook up with progressmeter as well
Hi!
I am trying to play a bit with BonitoBook.jl, but I’m not sure how I can make it play with a project. For example, I have a DrWatson.jl project with a bunch of files that define convenience functions in my src directory. Typically I would expect that I can do include("convenience.jl") in my notebook, but I’m hit with
LoadError: UndefVarError: `include` not defined in `Main.var"##BonitoBook#277"
How would you proceed for this kind of use case?
ah yeah I still need to fix that.
I’ve been thinking to also allow some kind of include folder, where you can have Julia files which always get included into the book (for features like that I introduced the folder format).
Is it possible to make presentations like the presentation mode of Pluto or directly to do slides (like Quarto)
That’s great! I think it could be super cool to allow the folders inside the hidden folder to be symlinks, that way we can cook something such that you can keep your data in a DrWatson.jl-like layout but when you export the notebook in a zip file, you can embed the required data files.
Hi, congrats on an excellent and beautiful package. I have been playing around with it and have some points that reflect the first contact a newbie would have with your package.
- Cell management: Is it possible to move a cell (or a group of cells) within the notebook? I tried, but I couldn’t figure out how.
- LaTeX: Is it possible to insert an equation in display mode and have a tag attached? The double $…$ works OK in line mode, but I tried the usual LaTeX ways to put an equation in display mode and was not successful. On the other hand, the rendered output of the LaTeX code BonitoBook looks different from the usual aspect of other editors. For example, I tried an equation with \hat{}, and it became difficult to read. Something like: \hat{y}_t=\hat{c}_t\left(\frac{c^{\star}}{y^{\star}}\right)+\hat{i}_t\left(\frac{i^{\star}}{y^{\star}}\right). The hats are poorly positioned and the parenthesis are not OK (not like we see it displayed here in this thread).
- Python integration. I see from the examples available on the BonitoBook website that integrating Python code looks easy and smooth. I have Python v3.13.3 installed on a Windows 11 machine, and it works without problems in VSCode and marimo (a reactive notebook developed for Python). However, I was unable to run Python code (or open a new Python cell) in the BonitoNotebook I am using. I did my best to follow the instructions available on this topic, but had no success. Firstly, I installed PythonCall.jl and CondaPkg.jl on a specific Julia environment I created for this testing (I installed them via the REPL). Then I execute
using PythonCallin a notebook cell, and it works. But if I execute
import numpy as np
data = np.random.randn(1000, 2) # Generate data in Python
labels = ["x", "y"]
I get the following error:
No evaluator for language 'python' found. Install and import PythonCall.jl and CondaPkg.jl packages to enable Python support
What mistakes am I making?
As far as I have been practicing, BonitoBook is user-friendly, has a nice look, and is very versatile. I love the style.jl template approach to manage its configuration and the automatically rendered markdown code. I know the love-and-hate relationship people may have with reactivity in notebooks. However, for teaching, reactivity is a winning characteristic in this type of document. Take the example of marimo, a recently developed reactive notebook in Python: in one single year, it achieved more stars than the entire old Jupyter project, which is more than 10 years old. As far as I am concerned, I feel OK with both reactivity and the lack of it in a modern, nice notebook.
Great to hear ![]()
- This is planned!
- I’m not sure what you mean with “display mode was not succesful”. I have these tests in BonitoBook:
I did a few fixes for this in the last weeks, so make sure to be on the newest Bonito + BonitoBook version. If that doesn’t render correctly, it’s likely that KaTex is configured incorrectly? If that’s the case, please open an issue, with how to reproduce it and what’s wrong/whats expected. - You need to do
using PythonCall, CondaPkg, BonitoBook, usingPythoncCallandCondaPkgin the book itself is too late. The Python integration is still a bit experimental, though.
Reactivity is actually planned as a plugin:
I am currently using Bonito 4.1.8 and BonitoBook 0.2.0. Sorry for not being very clear about what I meant by “LaTeX display mode”. By “display mode”, I mean some math expression isolated in one single line, with (possibly) a number or a name attributed to such an object.
Probably, I had some trouble rendering LaTeX correctly in BonitoBook because I copied and pasted some LaTeX code into a notebook Markdown cell and ran it. In the MWE below, I exemplify how I do it in Pluto and Marimo. In Pluto, the code that produces the first image below is the following:
md"""
Pluto. This is some maths in line mode: $E = mc^2$. And this is maths in display mode with an equation tag:
$$\hat{y}_t=\hat{c}_t\left(\frac{c^{\star}}{y^{\star}}\right)+\hat{i}_t\left(\frac{i^{\star}}{y^{\star}}\right) \tag{1}$$
And Pluto accepts some fancy LaTeX environments like `align`
$$\begin{align}
\hat{y}_t & =\mathbb{E}_t \hat{y}_{t+1}-\frac{1}{\sigma} \left(i_t-\mathbb{E}_t \pi_{t+1}-r_t^n \right)&& \tag{IS}\\
\pi_t &=\kappa \hat{y}_t+\beta \cdot \mathbb{E}_t \pi_{t+1}&&\tag{AS}\\
\end{align}$$
"""
For Marimo, the notebook supports a larger set of LaTeX tricks. The second image below is the output of Marimo of a similar list of objects as above, and the Markdown code that produced such output is next:
Marimo. This is some maths in line mode: $E=mc^2$. And this is maths in display mode with an equation tag given manually:
$$
\hat{y}_t=\hat{c}_t\left(\frac{c^{\star}}{y^{\star}}\right)+\hat{i}_t\left(\frac{i^{\star}}{y^{\star}}\right) \tag{1}
$$
Tag given automatically:
\begin{equation}
y_t = \alpha + \mathbb{E}_t y_{t+1}
\end{equation}
And more displayed equations with tags:
$$\begin{align}
\hat{y}_t & =\mathbb{E}_t \hat{y}_{t+1}-\frac{1}{\sigma} \left(i_t-\mathbb{E}_t \pi_{t+1}-r_t^n \right)&& \tag{IS}\\
\pi_t &=\kappa \hat{y}_t+\beta \cdot \mathbb{E}_t \pi_{t+1}&&\tag{AS}\\
\end{align}$$
Sorry about the fancy equations in the post, but copying something is always faster than writing it from scratch (even for simple things).
Hi @sdanisch, I have been experimenting with the new versions of the following notebooks “intro”, “slides”, and “book” (after your upgrade a couple of days ago). I have a few points (and a question) that I would like to point out:
-
Python integration. In previous versions of the notebooks (before your recent upgrade), the Julia session crashed whenever I tried to embed Python code in a BonitoBook notebook; not anymore, after your recent upgrade. Now, everything regarding this issue runs smoothly.
-
Hide/show code (output). In the “slides” notebook, the show/hide buttons are working well. In the “intro” notebook, only the hide-output button is working. I looked at the “style.jl” file and could not find a way to turn that button on (but maybe I did not look hard enough). The hide/show code is a must-have in a notebook, and its absence in a standard notebook is a critical issue.
-
Table of contents. The TOC in the “book” notebook is not working correctly. The TOC is visible and reactive, but when we click one of its entries, the TOC vanishes from the screen (the main document’s pane reacts to the selection and scrolls down, while the TOC remains stuck at the top of that pane, nowhere to be seen). There is no TOC in the “intro” notebook, which is a must-have. So I tried to import some code from the “book”-style file into the “intro”-style file, but eventually I just crashed the document.
-
Major taskbar: strange behavior. I do not have any clue about what is happening with the “intro” notebook regarding its main taskbar, but this is a critical issue in the package. When I start a BonitoNotebook server session, everything runs perfectly with the “intro” notebook. All the buttons in the primary taskbar are working: I can “Run all cells in sequence”, “Export the notebook to HTML”, “Export to PDF”, and so on. Please see the first figure below: the taskbar is visible and operational! However, after a while, the taskbar vanishes: it is nowhere to be seen (see second image below). Obviously, none of the functions performed by such a taskbar will be accessible after it disappears from the browser window. I have no clue what triggers such a disappearance. Is it some cell that, when it is run, triggers some reaction? I do not know. I suspected it could be caused by the computer recovering from a sleep interruption, but that turned out to be wrong.
-
Plotting packages. The only plotting packages that work well in the BonitoBook notebooks are Makies in Julia and Matplotlib in Python. They work well, and the graphics are displayed correctly in the notebook’s pane, as one would expect in a modern document of this nature. I also tried Plots.jl. It renders the graphics in the notebooks pane, but the image looks a bit blurred (at least in my session). I experimented with Plotly.py, Bokeh.py, and Altair.py. In the first two cases, no errors are thrown, but I could only see the plots in an external window, which is a significant drawback in a notebook. As far as Altair.py is concerned, the notebook not only fails to render the plots but also spits out an error that does not appear in Jupyter or Marimo. I understand very well that primacy should be given to the Makie plotting system in a notebook developed by the developers of the former system. However, suppose most other plotting packages continue to have issues when used with BonitoBook. In that case, this will be highly detrimental to the notebook itself rather than fostering the use of Makie as a primary plotting tool in modern IDEs.
-
Slides. I tried the “slides” notebook, and I have two immediate points: (i) how do I insert a new cell? (ii) How do I change from the editing mode to the display mode? In the latter case, if I press F11 in the browser, the slides are displayed at the same size as when I am editing them. I looked in the style file, but was not able to understand what I should change to correct the previous problem
Finally, I have a question. On some occasions in this thread, you mention something like “[the package] does have an open license for non-commercial use and will be registered.” Please clarify that if we do NOT use the package for commercial purposes, we can use it free of charge, including for teaching activities and the like.
@VivMendes, thank you for the thorough review!
- Yay

- oh, this must be a style.jl mismatch. How did you run it?
- I guess this was more of a quick “we can do this” demo, than a polished implementation of a TOC. Once there’s enough demand, we should try to get an optional polished TOC for all notebooks.
- I did run into this too, I think it’s relatively new - still need to be able to reproduce this to see what’s actually going on (pretty strange to be honest, but I think I have an idea).
- I think the Plots.jl issue is a know issue Plots.jl has with most other notebooks - at least I’ve seen people report this quite often here for other notebooks…
Supporting every imaginable plotting library will be possible, but certainly will need a large amount of effort - note, that I’m currently working on BonitoBook in my free time - I guess better support will come once someone paying needs it or someone makes a PR. Also note that especially for plotting out of Python, the work will likely need to happen in PythonCall.jl. - The slide feature is also a proof of concept, and will only improve over time - I guess for my next presentation I will have to improve it.
Free of Charge: yes all non-commercial usage is free and always will be as well as the package will always stay open source.
The missing menu should be fixed:
Yes, I can confirm that the buttons for hiding/displaying code and output are now working well in the “intro” notebook as well. I don’t know why, but lately the main taskbar has stayed open even when the notebook is left idle for quite a long time.




