Updating module versions
Every third-party module and JDBC driver the CLI knows how to download, verify, and wire into a stack lives in one file: modules.yaml at the repo root. It is the single source of truth a maintainer bumps per Ignition release, validated against the Catalog schema in ignition_stack/catalog/schema.py at load. Bumping a module is a data edit to that file; you never touch engine code.
Bumping an entry for a new Ignition release
- Confirm the third-party module's compatibility with the target
Ignition 8.3.x (vendor matrix; for Cirrus Link,
docs.chariot.io). - Add the new version string to that entry's
ignition_versionslist. Resolution is exact-match, so do not drop the previous version until it falls out of support. - Download the artifact and compute the hash:
shasum -a 256 path/to/Module.modl
- Set
sha256to the lowercase hex value. The catalog's sentinel isUNPINNED;ignition-stack modules validaterejects any entry still carrying it, which is the gate that prevents shipping a half-bumped catalog. - If the download URL has changed (vendor changed their path layout),
update
download_url. Then:to confirm the URL is reachable and every pinned sha matches.ignition-stack modules validate
Module identifier vs install path
Each kind: module entry carries two distinct strings:
module_identifieris the fully-qualified Java identifier inside the.modl(e.g.com.cirruslink.mqtt.engine.gateway). It is what Ignition'sGATEWAY_MODULES_ENABLED,ACCEPT_MODULE_LICENSES, andACCEPT_MODULE_CERTSenv vars accept. Never a path.install_pathis the absolute path inside the gateway container where the.modlis mounted/copied. Modules go under/usr/local/bin/ignition/user-lib/modules/, JDBC drivers under/usr/local/bin/ignition/user-lib/jdbc/.
Confusing the two means the gateway places the file but refuses to auto-load it.
EA-gated modules
The MCP module is Early Access. Its entry has
requires_manual_download: true and no download_url. Maintainers who
have a copy from the EA survey can point local_source_path at the
file on their host; modules download will copy from that path into
the cache. End users without the file get a clear "skip + see
POST-SETUP.md" message; nothing breaks.
When the module reaches GA, flip requires_manual_download to false,
set download_url, pin the sha, and the entry becomes ordinary.