Deflist
A definition list rendered via the SPEC-079 definition-list layout primitive. Each list item starting with **Term:** becomes a <dt> / <dd> pair; the layout stacks dt above dd by default and flows into multiple columns at wider widths via grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)).
Use it for option references, glossaries, attribute tables, recipe details, character stats — any term/description pair set. Composable inside any container rune, identical DOM to a projected metadata zone using the same layout primitive.
Basic usage
A markdown list where each item starts with bold-text-plus-colon.
{% deflist %}
- **Priority:** {% badge sentiment="caution" %}high{% /badge %}
- **Complexity:** moderate
- **Assignee:** @alice
- **Milestone:** v0.18
{% /deflist %}<dl data-rune="deflist" data-zone-layout="definition-list">
<div data-name="row">
<dt data-meta-label="">Priority</dt>
<dd>
<span class="rf-badge" data-rune="badge" data-meta-sentiment="caution" data-meta-type="tag">high</span>
</dd>
</div>
<div data-name="row">
<dt data-meta-label="">Complexity</dt>
<dd>moderate</dd>
</div>
<div data-name="row">
<dt data-meta-label="">Assignee</dt>
<dd>@alice</dd>
</div>
<div data-name="row">
<dt data-meta-label="">Milestone</dt>
<dd>v0.18</dd>
</div>
</dl>- Priority
- high
- Complexity
- moderate
- Assignee
- @alice
- Milestone
- v0.18
<dl data-zone-layout="definition-list" class="rf-deflist" data-rune="deflist" data-density="full">
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Priority</dt>
<dd>
<span class="rf-badge rf-badge" data-meta-sentiment="caution" data-meta-type="tag" data-rune="badge" data-density="full">high</span>
</dd>
</div>
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Complexity</dt>
<dd>moderate</dd>
</div>
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Assignee</dt>
<dd>@alice</dd>
</div>
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Milestone</dt>
<dd>v0.18</dd>
</div>
</dl>Inline composition
Inline runes inside the value (after **Term:**) compose naturally. Use {% badge %} for sentiment-coloured chips, {% ref %} for entity links, inline code for identifiers.
{% deflist %}
- **Status:** {% badge sentiment="positive" %}accepted{% /badge %}
- **Version:** `v0.16.2`
- **Released:** 2026-01-15
{% /deflist %}<dl data-rune="deflist" data-zone-layout="definition-list">
<div data-name="row">
<dt data-meta-label="">Status</dt>
<dd>
<span class="rf-badge" data-rune="badge" data-meta-sentiment="positive" data-meta-type="tag">accepted</span>
</dd>
</div>
<div data-name="row">
<dt data-meta-label="">Version</dt>
<dd>
<code>v0.16.2</code>
</dd>
</div>
<div data-name="row">
<dt data-meta-label="">Released</dt>
<dd>2026-01-15</dd>
</div>
</dl>- Status
- accepted
- Version
v0.16.2- Released
- 2026-01-15
<dl data-zone-layout="definition-list" class="rf-deflist" data-rune="deflist" data-density="full">
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Status</dt>
<dd>
<span class="rf-badge rf-badge" data-meta-sentiment="positive" data-meta-type="tag" data-rune="badge" data-density="full">accepted</span>
</dd>
</div>
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Version</dt>
<dd>
<code>v0.16.2</code>
</dd>
</div>
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Released</dt>
<dd>2026-01-15</dd>
</div>
</dl>Fallback for items without a bold prefix
If a list item doesn't start with **Term:**, the rune emits an empty <dt> plus the full content in <dd> and prints a build-time warning naming the line. Prefix every item with bold-term-colon to label it properly.
{% deflist %}
- **Term:** With prefix renders as dt + dd.
- This item lacks a prefix — empty dt, full content as dd.
{% /deflist %}<dl data-rune="deflist" data-zone-layout="definition-list">
<div data-name="row">
<dt data-meta-label="">Term</dt>
<dd>With prefix renders as dt + dd.</dd>
</div>
<div data-name="row">
<dt data-meta-label=""></dt>
<dd>This item lacks a prefix — empty dt, full content as dd.</dd>
</div>
</dl>- Term
- With prefix renders as dt + dd.
- This item lacks a prefix — empty dt, full content as dd.
<dl data-zone-layout="definition-list" class="rf-deflist" data-rune="deflist" data-density="full">
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label="">Term</dt>
<dd>With prefix renders as dt + dd.</dd>
</div>
<div data-name="row" class="rf-deflist__row">
<dt data-meta-label=""></dt>
<dd>This item lacks a prefix — empty dt, full content as dd.</dd>
</div>
</dl>Aliases
The rune is also registered as definitions and terms for authoring preference. All three names produce identical DOM.
{% definitions %}
- **Foo:** bar
{% /definitions %}
{% terms %}
- **Foo:** bar
{% /terms %}
Output
The identity transform emits a <dl> with one <div data-name="row"> per item containing a <dt> / <dd> pair:
<dl data-rune="deflist"
data-zone-layout="definition-list"
class="rf-deflist">
<div data-name="row">
<dt data-meta-label>Priority</dt>
<dd><span class="rf-badge" data-meta-sentiment="caution">high</span></dd>
</div>
<div data-name="row">
<dt data-meta-label>Complexity</dt>
<dd>moderate</dd>
</div>
</dl>
The row wrappers carry no semantic role on their own — they exist so the dt/dd pair can be styled as a unit (the stacked layout uses display: flex; flex-direction: column on each row).
Responsive layout
The Lumina default is stacked-then-multi-column:
[data-zone-layout="definition-list"] {
display: grid;
grid-template-columns: 1fr; /* stacked: 1 column, dt above dd per row */
gap: 0.75rem 1.5rem;
}
[data-zone-layout="definition-list"] > [data-name="row"] {
display: flex;
flex-direction: column; /* dt stacks above dd */
gap: 0.125rem;
}
@media (min-width: 48rem) {
[data-zone-layout="definition-list"] {
grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
}
}
The behaviour follows container width, not authoring choice — the same {% deflist %} reads stacked on narrow screens and multi-column on wider ones. If you need explicit "force stacked" or "force grid" control, a sibling definition-grid primitive is the right place to add it (not yet implemented).
See also
- Blocks & layout — the spec this rune projects.
{% bar %}— sibling composable rune for thebarlayout primitive.{% badge %}— the chip primitive used inside sentiment-mapped<dd>cells.