Skip to main content


Templates can accept parameters which is the preferred way to get data into them. Parameters can be either declared directly in a template or using a from declaration.

There are two types of parameter declarations: required and optional. Required parameters cannot define a default value, but optional parameters can. If a required parameter is not provided when a template is used the compiler will show an error.

Parameters can either define a new field on a template or use a feature called from to alias another expression.

Required parameters must be defined before optional ones. The order in which you define your parameters is also the order in which a caller must provide them if not explicitly referring to them by name. When using implicit parameter passing, the rules follow those of C# Named Arguments except that we use an = instead of : like C# does.

template ParameterExample {

required Vector3 vec; // define a required parameter
optional float value; // define an optional parameter
optional string name = "EvolveUI"; // define an optional parameter with a default value

optional float valueX from stateVector.x; // map this parameter to stateVector's x field
optional float valueY from stateVector.y = 3.14159f; // map this parameter to stateVector's y field, with a default value
state Vector3 stateVector;

// private parameters are not visible outside of the template definition. A caller can still pass them
// into the template but they cannot be used with the `sync` or `onChange` declarations and cannot be extruded
optional:private string secret;


template ParameterUsage {

render {
// with explicit parameter passing
ParameterExample(vec = new Vector3(), valueX = 10, valueY = 11);
// with immplicit parameter passing (vec3, value, then explicitly valueY because it skips over other optional parameters)
ParameterExample(new Vector3(), 10f, valueY = 11);