Templates
Templates are optional. A project works fine with free-text properties. Templates help when you want consistency, for example every Device having a serial number, a model, and a firmware version.
A template is a named list of fields. Each field has a key and a type:
| Type | Example value | Notes |
|---|---|---|
string |
Bay 3 |
Any text. |
number |
42 |
|
boolean |
true |
|
date |
2026-10-27 |
|
version |
v2.1.0, 5.0.2-build17 |
Any non-empty label. Deliberately not limited to semantic versioning, since vendors don’t follow it. |
enum |
In service |
One of a list of options you define. |
reference |
another node | Points at another node in the project, such as the rack a cable connects to. |
Fields can be marked required. A missing required value shows a warning rather than blocking you, and the inventory filters can list every node missing one.
How templates are stored
Section titled “How templates are stored”The types live once in the project’s template list. Each node just records which template it uses, and its property values stay plain values in the file. That keeps Layertrail.layertrail readable: a firmware version is stored as "5.0.2", not wrapped in type metadata.
Properties that aren’t in a node’s template are still allowed and stay free text.
Templates and history
Section titled “Templates and history”Template edits are real project changes. Adding a field or changing an enum’s options shows up in comparisons, alongside node changes.