Skip to content

Custom attributes

Templates and workflows can only use metadata DeltaVault models for you, until you add your own. Custom attributes let your organization define typed metadata elements (retention windows, masking rules, load tiers, sensitivity flags) once, set values per table and per column, and reference them anywhere templates render.

  1. Open the Custom Attributes screen at /toolkit/custom-attributes. It is not listed in the Toolkit group in the rail yet, so reach it by address for now. Definitions are branch scoped: switch to a feature branch to edit.
  2. Select New.
  3. Choose a key: lowercase snake_case, for example retention_days. The key is what templates reference (table.custom.retention_days) and cannot be changed after creation. Create a new definition instead of renaming.
  4. Choose a value type: Text, Number, Boolean, or Select (a single pick from options you declare). The type is also fixed after creation.
  5. Pick what it applies to: tables, columns, or both.
  6. Optionally set a default value. Objects without an explicit value fall back to the default at render time.
  • Tables: open a table in the catalog and switch to its Custom Attributes tab. One field per table-applicable definition. Unset fields show the default as a hint (for example “default: 30”); use the clear control to return a field to the default.
  • Columns: open a column’s edit dialog. The Custom Attributes section lists every column-applicable definition.

Values are validated on save: a Number attribute only accepts numbers, and a Select attribute only accepts one of its configured options.

Values appear under the custom namespace in every rendering context: table templates, staging, workflow authoring, orchestration, and previews.

{{ table.custom.retention_days }}
{% if column.custom.is_sensitive %}
-- masked column handling here
{% endif %}

An attribute with no value and no default is absent from the namespace, so {% if table.custom.x %} behaves sensibly. Previews show real values while you author, so you can confirm an attribute resolves before committing.

  • Branch scoped: definitions live on your branch like macros do. Create or edit them on a feature branch, then commit. Definition files serialize to your git repository alongside the rest of your metadata.
  • Deletion previews its impact: deleting a definition shows how many tables and columns carry the key, then removes those values on your branch. Templates that referenced the key stop resolving it.
  • Select options can change safely: editing a Select definition’s options never breaks existing renders. Values no longer in the list still render, and the editor flags them.