First off, Jupyter notebooks requires setup often unrelated to your work. Adopting the typical open source workflow is daunting: downloads, installs, upgrades, etc. Also, data files live outside notebooks and often not stored or tracked well. This breaks down quickly when you want to share or collaborate on a document.
Nextjournal runs in a hosted environment and works in any modern browser. Data files are stored and tracked alongside articles. Any article you can read, you can run — no setup required.
Hosted Jupyter environments exist. However, to guarantee that a notebook works for anyone, anywhere, it should lock dependencies all the way down to the operating system. A notebook should use the same execution environment to guarantee the same results.
Jupyter uses kernels — packages that guarantee little more than the version of the target language. Dependencies on your host system can change without notice. Kernels need to be downloaded and can become unsupported or disappear over time.
In Nextjournal, every code cell runs inside Docker container: a snapshot of an entire operating system plus all dependencies needed for the language and its packages to function. This file for building our python2 Docker image should give you an idea easy it is to build images. Docker images are unchangeable and always available. You can use a custom one for your article.
Also, Jupyter cells do not track dependencies between each other. So it’s easy to end up with stale or unexpected results while editing code.
For example: create a python cell containing
x = 2, execute the notebook, then delete that cell. In another, later cell,
x will still have the value of
2. Also, code must always execute top to bottom, restricting how you author your article. Read more about this problem here. Finally, cells which have no knowledge of their own dependencies cannot be reused outside of the document.
In Nextjournal, each cell runs in an isolated environment. So variables are not automatically inherited. Instead, you explicitly reference variables from other cells — even between different languages. You can reference cells anywhere in your article. Furthermore, this system will allow authors to reference code in other documents as functions. We hope this approach encourages more data model sharing and less copy/paste.
Lastly, we take after Medium in defending default readablility: larger text sizes, limits on line length and whitespace. We want articles to look good and be suitable for publication at any stage.
We intend to open source parts of Nextjournal. We’ll post when we have more news about tha and our business plans soon.
Thanks for asking!