Repository navigation
Custom fields
Declare task fields in fields. Ordryn stores values as {extension id}.{field key} (for example severity.level) and renders them in the task sidebar, list, and/or kanban. No ui.js is needed.
Personal tasks (no project) never get custom fields. Values apply only when the extension is site-enabled and project-enabled.
{
"id": "severity",
"name": "Severity",
"version": "1.0.0",
"host_api": 1,
"fields": [
{
"key": "level",
"type": "enum",
"label": "Severity",
"description": "How bad it is if this work slips.",
"show_on": ["sidebar", "kanban"],
"options": [
{ "value": "low", "label": "Low" },
{ "value": "medium", "label": "Medium" },
{ "value": "high", "label": "High" },
{ "value": "critical", "label": "Critical" }
]
}
]
}That stores as severity.level. Safe to enable alongside other field extensions as long as storage keys differ (estimate.points vs severity.level).
| Field | Required | Notes |
|---|---|---|
key |
yes | Local key. Pattern ^[a-z][a-z0-9_-]{0,32}$. Combined with the extension id for storage. |
type |
yes | One of string, number, boolean, enum, url, user, date, markdown. |
label |
yes | Sidebar / badge label. |
description |
no | Help text under the control. Max 400 characters. |
required |
no | If true, the value cannot be cleared once set. |
show_on |
no | Surfaces: sidebar, kanban, list. Defaults to ["sidebar"]. |
options |
enum only | Non-empty list of { "value", "label?", "color?" }. Duplicate values are rejected. Empty label falls back to value. |
show_on controls where the host UI shows the value:
-
sidebar— editor on the task detail sidebar (always the place to set it). -
kanban— badge on board cards. -
list— badge on list rows.
| Type | Stored as | Validation |
|---|---|---|
string |
trimmed string | Empty clears the field. |
number |
JSON number | Must be numeric. |
boolean |
JSON boolean | Must be true or false. |
enum |
option value
|
Must match an option. |
url |
string |
http or https with a host. |
user |
project member user id | Must belong to the project. |
date |
string |
YYYY-MM-DD. |
markdown |
string | Max 8000 characters. |
Clear a value with JSON null or an empty string (except required fields).
fields-demo registers one of each:
| Key | Type | Typical show_on
|
|---|---|---|
ticket |
string |
sidebar, list
|
score |
number |
sidebar, kanban
|
blocked |
boolean |
sidebar, kanban
|
size |
enum |
sidebar, kanban
|
spec |
url |
sidebar |
owner |
user |
sidebar, list
|
review_on |
date |
sidebar, list
|
notes |
markdown |
sidebar |
See also severity (kanban badge enum), estimate (Fibonacci points enum), and callback-bot (date + markdown plus a panel).
Field values can appear on outbound JSON as fields (for example {"severity.level": "high"}). Hook extensions can filter on them with a field_filter setting. See Delivery and Settings and controls.