One of the interesting alternatives to Jupyter Notebook outside of the Jupyter space are Observable notebooks. As these are 100% JS-only, there are some design choices that we could not easily make in the Jupyter ecosystem. However, there are also some features that we could borrow, and some that aren’t inspired by Observable. I’d like to discuss both of these below.
Part of the argument against doing interactive markdown in the kernel is that it’s not that nice to hide code cells in Jupyter. Compare Observable:
The Jupyter implementation leaves a large ellipsis in the notebook view, which interrupts the flow of the prose. Inverting the input-output order would help here, but I think we need to go further — the ellipsis says (to me) this is important, but hidden, whereas the Observable hidden cell is not visible unless you go looking for it.
This is off-topic of “interactive” markdown cells, but worth raising here.
In Observable, cell outputs are rendered above the source that generated them. Given that (all?) modern languages read top-down, if we want to promote narrative within the notebook, then I feel that outputs should come first. In my experience, where both output and cell source are visible, I want to look at the output first, and maybe the source that generated it thereafter. In a hand-wavy sense my thinking is:
What does this graph say?
How was this graph generated?
Here’s how this looks in Observable:
Note the prose above “New York City weather forecast”, which belongs to a separate cell.
I’d be interested to hear from developers and users as to whether they like these changes, or have other suggestions to make!