CatColab v0.6: Starling

CatColab
Author
Published

2026-06-01

Abstract

Another few months, another CatColab release! In this post I’ll speak about some new features and fixes found in v.06: Starling.

You can find the changelog and complete release notes on GitHub:

CatColab is a collaborative environment for formal, interoperable, conceptual modeling. For an introduction to CatColab, visit the help page.

Major new features

Compositional stock-flow diagrams

The previous release added the ability to compose Petri nets by sharing places. This release continues in that vein, adding the ability to compose stock-flow diagrams by sharing stocks. As a result, all logics in CatColab now support composing models in the variable sharing paradigm.

With all this composition, we might need something to make sense of the compositional structures that we can now create…

Composition pattern visualisation

… and that’s what a new analysis lets us do. The composition pattern analysis visualises the way in which your notebooks have been composed, as an undirected wiring diagram. A composition pattern gives a high-level summary of how a model is constructed from components.

The composition pattern analysis for a two-level predator prey causal loop diagram, built from two copies of a positive/negative loop motif. It shows that RG.Prey is tied to Grass, both RG.Predator and FR.Prey are tied to Rabbit, and FR.Predator is tied to Fox.

The composition pattern analysis for a two-level predator prey causal loop diagram, built from two copies of a positive/negative loop motif. It shows that RG.Prey is tied to Grass, both RG.Predator and FR.Prey are tied to Rabbit, and FR.Predator is tied to Fox.

Systems of polynomial ODEs

Quantitative analyses of models are important, whence our efforts to implement and extend well known ones such as Lotka–Volterra, Kuramoto, and mass action. However, in keeping with the core design decisions of CatColab itself, we want users to be able to define their own ODE semantics.

The first step towards this is to be able to treat systems of ODEs as models of a theory in their own right, giving ODE systems first-class status in CatColab. The mathematical details of this idea are sketched out in RFC-0001 (more on RFCs below!), but the short story is that you can now build arbitrary systems of polynomial ODEs as models, compose them, view the derived equations, and simulate them.

As a toy example, we can “define” \sin and \cos as solutions to a system of two polynomial ODEs:

Defining sine and cosine as a model of the theory of systems of polynomial ODEs. We define two variables (implicitly treated as functions of time), and then two terms (“contributions”) in the system of ODEs governing them. For example, one term is called sin'=cos and gives the equation \frac{\mathrm{d}}{\mathrm{d}t}\sin = \lambda\cos; setting \lambda=1 will recover one of the two usual constraints defining sine and cosine as solutions to ODEs, namely that \sin'=\cos.

Defining sine and cosine as a model of the theory of systems of polynomial ODEs. We define two variables (implicitly treated as functions of time), and then two terms (“contributions”) in the system of ODEs governing them. For example, one term is called sin'=cos and gives the equation \frac{\mathrm{d}}{\mathrm{d}t}\sin = \lambda\cos; setting \lambda=1 will recover one of the two usual constraints defining sine and cosine as solutions to ODEs, namely that \sin'=\cos.

We can then use compositionality of models to “import” these trigonometric functions into a new model, which is an ODE model of an entirely fictional system that I made up with very scientific names and equations:

Left: An ODE model for a fictional system, given by defining the variables and then the “contributions” to the ODEs. Right: An analysis of the model, showing the composition pattern as well as the generated equations and a numerical simulation.

Left: An ODE model for a fictional system, given by defining the variables and then the “contributions” to the ODEs. Right: An analysis of the model, showing the composition pattern as well as the generated equations and a numerical simulation.

Backend for Julia and AlgebraicJulia

AlgebraicJulia is an ecosystem of packages for category-theoretic modeling and simulation, building on the Julia programming language. In this release, we added a Julia compute service to our backend infrastructure. At this time, the Julia service is exercised only by a proof-of-concept analysis that converts a diagram over a schema into a tabular instance by invoking machinery in Catlab.jl. In the future, we will use the Julia service to provide advanced simulation capabilities, such as for agent-based models (AlgebraicABMs.jl) and partial differential equations on manifolds (Decapodes.jl).

Notebook history

When you made changes to your notebook, snapshots are now stored of the notebook history. This means that you can undo/redo changes, as well as view the entire history and jump back and forwards between time-stamped edits.

The notebook history sidebar, with buttons for undo/redo as well as the full timestamped edit history.

The notebook history sidebar, with buttons for undo/redo as well as the full timestamped edit history.

Public RFCs

Those interested in the development of CatColab can already follow our pull requests and issues on GitHub, as well as our conversations on our Zulip. But sometimes the best format for a discussion is closer to that of a blog post, or extended abstract, where a single author describes their vision for a feature, and often the mathematics supporting it, and then shares it with the rest of the team (and the wider community). Such discussions are now recorded as requests for comment (RFCs) and can be found at next.catcolab.org/rfc. To quote from that page:

A distinctive feature of RFCs compared to other kinds of documentation is that they represent a design at a particular point in time, as envisioned by a particular person. Thus, an RFC should have a date and an author, and there is no expectation that an RFC will be updated over time as its implementation inevitably evolves.

The format of an CatColab RFC is not yet standardized. In organizing the RFCs written so far, we’ve been inspired by the RFC template used by the Rust language.

Other improvements and fixes

  • Instantiating models is now done using a new widget that lets you search over existing models, rather than having to copy and paste a URL.
  • Experimental: Petri nets created in Petrinaut and exported as JSON can be imported into CatColab.
Leaving a comment will set a cookie in your browser. For more information, see our cookies policy.