MATERIA-TEMPLATES

Author

stryan

Published

January 1, 2026

Name

materia-templates - Variables, functions, and snippets accessible within Materia template execution

Description

Materia uses the standard Go templating engine for executing resources that end in the .gotmpl file type.

To access a attribute within a templated resource, use the standard Go Template method of accessing variables: { .containerTag } will resolve to the containerTag attribute.

Besides normal attributes insertion, Materia also supports macros and snippets.

Macros

Macros are privileged functions available to Materia while executing a resource. They are not user-modifiable.

Macros are accessed the same way as any other Go Template function: { macro_name }.

Macros with arguments should have the arguments passed in quotes.

Macro List

m_dataDir “component_name”

Reference the components data directory. Often used for templating bind mounts

Example: Volume={{ m_dataDir "component" }}/config.yaml:/config.yaml will be templated as Volume=/var/lib/materia/components/component/config.yaml:/config.yaml

m_facts “fact_name”

Lookup a fact about the host.

The following facts are available: hostname: Return the hostname of the target host. interface: Return information about the provided interface. interface.eth0 would return all IP addresses for the interface eth0 interface.eth0.ip4 or interface.eth0.ip6 would return all IPv4 or IPv6 addresses for the interface eth0. interface.eth0.ip4.0 Would return the first IPv4 address for the interface eth0

Example: PublishPort={{ m_facts "interface.tailscale0.ip4.0" }}:{{.port}}:{{.port}} would template as PublishPort=<tailscale interface IP address>:<port attribute>:<port attribute>

m_default “attribute” “value”

Return a attribute’s value or the provided value if the attribute is not defined

exists “attribute”

Returns true if the attribute is defined, otherwise false

snippet “snippet_name” “argument”

Special macro, see the Snippets section below

secretEnv “attribute name” “TARGET (OPTIONAL)”

Access a Materia attribute that is specified as a podman secret in the component manifest. The “attribute name” should be as specified in the secrets = ["attribute_name"]. Optionally, provide the target as defined in the Podman manual

secretMount “secret name” “ARGS (OPTIONAL)”

Same as secretEnv but accesses the secret as a file mount. Optionally, provide additional arguments as defined in the Podman manual

Snippets

Snippets are pre-made blocks of templated text that can be inserted with the snippet macro. Some come with materia, while others are defined in a component manifest or Repository manifest.

Snippets are not designed for highly-dynamic text, but can take one value as an argument.

Snippets are an experimental feature

Built-in Snippets

autoUpdate

Label=io.containers.autoupdate=<update_source>