Plugins

Nodes come from plugins. noodlelab ships with its own (units, uncertainty, maths, science, engineering, geo, machine learning…), and anyone can write more and publish them from a git repository, without asking anyone.

A plugin is an ordinary Python package with:

  • a noodlelab.nodes entry point, whose name prefixes its node ids (thermo.rankine_cycle);

  • a manifest, noodlelab-plugin.toml, that names it, states the plugin API it was written for, the other plugins it needs and what it does besides computing;

  • code that uses noodlelab only through noodlelab.plugin, the public API.

Plugins are versioned as a whole, with git tags (v1.4.2, semantic versioning). A plugin can require others (requires = { maths = ">=1.2,<2" }): adding it adds them. Every run’s provenance records each plugin’s version and the git commit it was built from, and every saved graph records the plugins it needs, so it can be opened elsewhere with the same code.