Skip to main content

Services

A service is a container the generated stack can run alongside the Ignition gateways: a database, an MQTT broker, an identity provider, a simulator, or an automation engine. Each one is a self-contained entry in the catalog under templates/services/<name>/, carrying its own manifest, compose fragment, and seed assets. Adding or changing a service is a data change, not a code change; see Adding a service.

The catalog

ServiceKindImageProvides
Postgresdatabasepostgres:18.1sql-database, postgres-compatible
MySQLdatabasemysql:9sql-database, mysql-compatible
MariaDBdatabasemariadb:11sql-database, mysql-compatible
MongoDBdatabasemongo:7document-store
Keycloakidpquay.io/keycloak/keycloak:26.6.2oidc-idp
Chariotmqtt-brokercirruslink/chariot:3.0.0mqtt-broker
HiveMQmqtt-brokerhivemq/hivemq-ce:2025.5mqtt-broker
EMQXmqtt-brokeremqx/emqx:6.2.0mqtt-broker
RabbitMQmqtt-brokerrabbitmq:4.3.1-managementmqtt-broker
Kafkastreamingconfluentinc/cp-kafka:8.2.1kafka-broker
OPC-UA simulatorsimulatormcr.microsoft.com/iotedge/opc-plc:2.9.9opcua-server
Modbus simulatorsimulatoroitc/modbus-server:2.2.0modbus-server
n8nautomationn8nio/n8n:2.23.0automation

Every image is pinned and overridable through an .env key (for example POSTGRES_IMAGE); each service page lists its own.

How services reach a stack

  • Databases are chosen at the wizard's database prompt: Postgres (the default), MySQL, MariaDB, MongoDB, or none. The non-interactive --arch path uses Postgres.
  • n8n is added as a service, optionally paired with the Ignition MCP module drop-in (mcp_dropin).
  • Dependencies are pulled in by the resolver. A service that requires a capability gets it satisfied automatically: Keycloak requires sql-database, so it brings in Postgres (and a dedicated keycloak logical database) when none is present.

The brokers, the Kafka broker, the simulators, and Keycloak are full catalog entries: each ships a manifest, a compose fragment, seed assets, and a golden snapshot under tests/golden/services/. They are composed into a stack through the project's resolved services list, which the generation engine and resolver act on.

Capabilities and dependencies

Services describe themselves with two capability lists in their manifest:

  • provides: the capabilities a service offers (Postgres provides sql-database).
  • requires: the capabilities it needs from the rest of the stack (Keycloak requires sql-database).

The resolver matches requires against provides and adds whatever is missing, so a dependency never has to be selected by hand. It also applies one imperative coupling: selecting MySQL attaches the mysql-jdbc driver to every gateway, because Ignition ships no MySQL driver built in.

Seeding and post-setup

Most services run the moment their container is up, but the gateway-side connection often cannot be fully baked into the seed. Postgres is the exception: it file-seeds a working gateway db-connection and its secret. The other services declare the connections they defer to POST-SETUP.md, and each service page lists them. The seeding matrix is the underlying contract for what is file-seedable on Ignition 8.3 and what is not.