Notebook based interactive document system

Notebooks mix code (Python, Javascript, CSS, HTML, GLSL) with rich text, that can be used to document the code that surrounds it.

Projects organise notebooks as modules within a package hierarchy, similar to that of a normal Python program. This allows the functionality of a large program to be split among several notebooks in a way familiar to most Python developers.

Live documents

Ubiquitous Larch can be used to create live, interactive documents. You can create a project that contains a set of pages, that can hyperlink to eachother and can contain interactive, visual content; mix the best rich text, spreadsheet style computation, visuals and Python all in one.

Real-time collaboration

Put Ubiquitous Larch on a server accessible to the internet and invite your friends to join. When you are all looking at the same document, you should all click the LIVE button on the top right to enable live updates. As a consequence, changes made to the code, or actions performed on interactive components generated by the Notebook will be seen by everyone.

You can develop your own Python-based collaborative GUIs with very little additional code (or no additional code at all in many cases) and share them with your collaborators simply and easily.

Rich, interactive output

In addition to the standard text-based output (e.g. stdout) that is familiar to Python programmers, output may include:

  • images (e.g. plots generated by matplotlib)
  • components created by Javascript libraries (e.g. diagrams generated by d3.js)
  • 3D graphics rendered using WebGL
  • GUI controls generated by jQuery

User actions received by your output will generate events that can be handled by your code, in order to drive updates and add interactivity.

Live object system

The Ubiquitous Larch programming environment is built from live Python objects; much like Smalltalk, the GUI is built from live objects whose visual presence updates in response to changes. You can inspect an interact with these objects through the GUI they display or with code.

Display Python objects visually

Python objects can define rich, interactive presentations that can include text, GUI controls, and diagrams (or anything else that the browser can produce) by defining a __present__ method; a rich visual equivalent of __str__. This, in combination with type coercion makes defining a visual, interactive presentation for an object as easy as writing it out.

The operation of Ubiquitous Larch can be likened to that of Smalltalk; you are interacting with a collection of live objects, whose visual representations update in response to state changes.