A Jupyter Notebook is an open-source web application that allows you to create and share documents that contain
live code,
equations,
visualizations and
narrative text.[1]
In this sense the notebooks are similar to Active Essays kept in a Smalltalk based Dynabook.
Notebook documents contain the inputs and outputs of a interactive session as well as additional text that accompanies the code but is not meant for execution. In this way, notebook files can serve as a complete computational record of a session, interleaving executable code with explanatory text, mathematics, and rich representations of resulting objects.
The notebook documents are saved in JSON files (examples).
The file extension is .ipynb. As JSON is a plain text format (https://jupyterlab.readthedocs.io/en/latest/ed) the file can be version-controlled and shared with colleagues. [2], [3], [4].
Jupyter notebooks were originally only Python based but now the Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across dozens of programming languages.[5], [6]
The execution of scripts in a particular programming languages is done in a 'kernel'. There is a project to implement a Pharo Smalltalk kernel (JupyterTalk [7]). A kernel needs to implement the Jupyter messaging protocol.
The notebook is read and the code executed through a web client based front-end. "nteract" [9],[10] is a front-end based on the electron framework (HTML,CSS,JS). It is a stand-alone client which also includes a JavaScript kernel, thus the notebooks may contain text and JavaScript code.
JupyterLab is a browser based solution which needs a server.[11]
The client communicates with the server using a JSON based protocol [12].
A survey [13] shows how Jupyter notebooks are used in courses.