library for immutable notebook operations


7.4.618 days ago5 years agoMinified + gzip package size for @nteract/commutable in KB



Commutable is a package to represent a Jupyter notebook document, as well as operations on the notebook, as a series of immutable notebooks, each one with its own state at a point in time.

This package follows the principles below, based on Tom MacWright's outline for practical undo.

  • A notebook document is immutable. The notebook document's representation is never mutated in-place.
  • Changes to a notebook document are encapsulated into operations that take a previous version and return a new version of the notebook without modifying the old version.
  • History is represented as a list of states, with the past on one end, the present on the other, and an index that can back up into 'undo states'.
  • Modifying a notebook document causes any future states to be thrown away.


$ yarn add @nteract/commutable
$ npm install --save @nteract/commutable


The example below shows how we can create an empty Markdown cell in our nteract notebook application. We use the emptyMarkdownCell immutable object exported from this package to represent a new empty Markdown cell in a notebook document.

import { emptyMarkdownCell } from "@nteract/commutable";

export default () => (


You can view the reference documentation for @nteract/commutable in the package docs.


If you experience an issue while using this package or have a feature request, please file an issue on the issue board and, if possible, add the pkg:commutable label.



If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.