Appendix B — Built-in catalogues
Contents of DISL 0.6
| Element | Default |
|---|---|
| Node | rect, 120 × 60, fill token color.surface (#FFFFFF), stroke token color.border (#5F5E5A) width 1, one centered label bound to labelAttribute, word wrap, font 14 px system-ui |
| View-only node | as node, with dashed stroke |
| Container node | as node, with a 24 px header band holding the label; children laid out freely |
| Relation (directed) | straight line, width 1, color token color.border, targetMarker: "arrowFilled", no labels, unless the relation has a name attribute, which is shown middle/above |
| Relation (undirected) | as directed, without markers |
| Port | 8 × 8 rect, fill color.surface, sides by direction |
| Selection | 1.5 px outline in token color.accent (#534AB7), 8 screen-px square handles |
invalid state |
stroke token color.danger (#E24B4A), finding badge top-right |
warning state |
stroke token color.warning (#BA7517), warning badge top-right |
dropTarget / dropReject |
fill token color.accent.soft / stroke color.danger dashed |
Standard theme tokens. Runtimes provide these tokens with light and dark values, and specifications may override them: color.canvas, color.surface, color.surface.alt, color.text, color.text.muted, color.border, color.border.strong, color.accent, color.accent.soft, color.danger, color.warning, color.success, color.info, font.body, font.mono, size.stroke, size.corner, size.font.
| Shape | Parameter defaults |
|---|---|
roundedRect |
radius: 8 |
triangle |
apex: 0.5, direction: up |
parallelogram |
skew: 0.2, direction: right |
trapezoid |
inset: 0.2, direction: up (narrow side at the top) |
hexagon |
inset: 0.25, orientation: flat |
octagon |
inset: 0.29 |
polygon |
sides: 5, rotation: 0 |
star |
points: 5, innerRadius: 0.5, rotation: 0 |
cross |
thickness: 0.33 |
cylinder |
cap: 0.15 × height, orientation: vertical |
person |
radius: 8 |
document |
wave: 0.1 |
multiDocument |
wave: 0.1, offset: 6, count: 3 |
note |
fold: 12 |
folder |
tabWidth: 0.4, tabHeight: 12, tabPosition: left |
frame |
tabWidth: 0.35, tabHeight: 20 |
cloud |
bumps: 8 |
process |
inset: 10 |
manualInput |
slope: 0.25 |
offPage |
pointer: 0.25 |
callout |
pointerX: 0.2, pointerY: 1.3, pointerWidth: 0.15, radius: 6 |
blockArrow |
direction: right, headLength: 0.35, shaftThickness: 0.5, doubleHeaded: false |
chevron |
depth: 0.25, direction: right |
bracket |
side: left, curl: 0.15 |
superellipse |
exponent: 4 (at least 2; 2 is an ellipse) |
image |
fit: contain |
Fractions refer to the bounds' width (horizontal parameters) or height (vertical parameters).
Sizes are for a line width of 1 and scale with the stroke unless scaleWithStroke is false. "Hollow" markers are filled with background by default, and "filled" markers with stroke.
| Marker | Default length × width | Geometry |
|---|---|---|
arrow |
10 × 8 | Open V, 2 strokes, angle 30° |
arrowFilled |
10 × 8 | Filled triangle |
arrowHollow |
12 × 10 | Hollow triangle (generalisation) |
arrowConcave |
12 × 10 | Filled, swept-back base |
arrowThin |
8 × 6 | Open V, angle 20° |
arrowDouble |
16 × 8 | Two filled triangles in sequence |
halfArrowTop, halfArrowBottom |
10 × 5 | One barb only |
arrowCircle |
14 × 8 | Filled triangle followed by a hollow circle |
diamond / diamondFilled |
14 × 8 | Rhombus |
circle / circleFilled |
8 × 8 | Circle, tangent to the end point |
square / squareFilled |
8 × 8 | Square |
dot |
4 × 4 | Filled circle centered on the end point |
triangle / triangleFilled |
10 × 10 | Equilateral |
bar |
0 × 10 | Perpendicular line |
doubleBar |
4 × 10 | Two perpendicular lines |
cross |
8 × 8 | × |
slash |
6 × 10 | Oblique line |
erOne |
8 × 12 | One perpendicular bar |
erOnlyOne |
12 × 12 | Two perpendicular bars |
erMany |
12 × 12 | Crow's foot |
erZeroOrOne |
18 × 12 | Bar and hollow circle |
erOneOrMany |
16 × 12 | Crow's foot and bar |
erZeroOrMany |
20 × 12 | Crow's foot and hollow circle |
ballSocketBall |
10 × 10 | Hollow circle on a short stem |
socket |
10 × 12 | Half circle open towards the end |
containment |
10 × 10 | Circle with a plus |
ground |
6 × 14 | Three bars of decreasing length |
fork |
10 × 10 | Two short diverging lines |
| Rule | Numeric | Time | Ordinal | Angular | Sizes |
|---|---|---|---|---|---|
grid |
✓ | – | – | ✓ | ✓ |
values |
✓ | ✓ | – | ✓ | ✓ |
calendar |
– | ✓ | – | – | ✓ (durations) |
ticks |
✓ | ✓ | ✓ | ✓ | – |
bands |
– | – | ✓ | – | ✓ (number of bands) |
divisions |
✓ | – | – | ✓ | ✓ |
ratio |
– | – | – | – | ✓ |
cel |
✓ | ✓ | ✓ | ✓ | ✓ |
byZoom |
✓ | ✓ | ✓ | ✓ | ✓ |
plugin |
✓ | ✓ | ✓ | ✓ | ✓ |
Units ($defs/TimeUnit): millisecond, second, minute, hour, day, week (starts on firstDayOfWeek), month, quarter, year, decade, century, millennium (the last three start on years divisible by 10, 100 and 1000 in astronomical numbering, 5.5). Date format patterns follow Unicode LDML (yyyy, MM, MMM, MMMM, d, EEE, w, HH:mm); on yearMonth axes u is the signed astronomical year and y is not allowed (5.5). Number patterns follow ICU (#,##0.00, #0%).
Runtimes provide these monochrome icons under std.: add, remove, delete, edit, copy, link, unlink, lock, unlock, eye, eye-off, info, warning, error, check, x, plus, minus, arrow-right, arrow-left, arrow-up, arrow-down, flag, key, database, table, user, users, clock, calendar, message, note, folder, file, image, code, play, pause, stop, settings, search, filter, star, bolt, circle, circle-dot, square, square-rounded, diamond, triangle, hexagon. Specifications may also reference icon sets by prefix (tabler:database, material:table_chart) when the runtime supports them.
| Attribute type | Widget |
|---|---|
string |
text (combobox if extensible enum) |
text |
textarea (markdown if markup: "markdown") |
int, number |
number (slider if both min and max are set and the range is at most 100 steps) |
bool |
checkbox |
date, datetime, time, duration |
date, datetime, time, duration |
yearMonth |
month |
color |
color |
uri |
link |
expression |
code with language: "cel" |
json |
code with language: "json" |
binary |
file |
| enum (≤ 4 values) | segmented |
| enum (> 4 values) | select |
| data type (struct) | struct |
| reference | reference |
many primitive |
tags for strings, list otherwise |
many struct |
table |
many reference |
references |
language.requires.features uses these identifiers: axis.log, axis.time, axis.time.collapse, axis.ordinal, axis.angular, system.polar, system.nested, placement.bound, placement.computed, placement.stack, snap.calendar, snap.byZoom, snap.objects, shape.custom, shape.composite, shape.handles, shape.nineSlice, stroke.effect, stroke.sketch, stroke.flow, edge.jumps, edge.bezier, edge.metro, marker.custom, marker.stack, label.rich, label.parse, node.variants, node.lod, form.embedded, layout.elk, collab.crdt, persist.yaml, persist.split, persist.perElement, export.pdf.
DISL 0.2 adds: view.viewer (viewer state, 11.6), canvas.filters (6.13.1), canvas.notices (6.13), canvas.chrome (title, header, empty message and a legend from what is drawn, 6.13), canvas.stretch (6.13), viewpoint.variants (3.5), limits.budgets (3.2.1), anchor.part and anchor.sides (6.9, 6.10), edge.stub (6.10), edge.bezierLoop (6.10), node.badgeLayout (6.9), axis.ranges (5.3), axis.yearMonth (5.5), ruler.adaptive (5.13), snap.byGesture (5.9) and text.metric (6.5). A runtime that lacks one degrades as 15.2 says.
DISL 0.3 adds: bounds.neighbour (4.3), ruler.minUnit (5.13), shape.partTooltip (6.8), anchor.drawnFrom (6.9), edge.connectPointer (6.10), label.editText (6.12), drop.placement (7.2, 9.1), form.parse and form.typeField (7.5), layout.rowPacked, layout.rows and layout.tidyTree (10.1 to 10.3), persist.typeMap (11.2) and plugin.plans (13.1); by the ruling of 2026-10-06, menu.group (7.3), form.rowId (7.5), builtIn.oncePerGroup (8.1) and constraints.order (8.6).
The built-in constraints of 8.7, in the order of its table, with who raises them. Findings of the four the reader raises come first, in reading order; the others follow in this order (8.6). Each can be re-rated, switched off, and given a code and a message in constraints.builtIn (8.1).
| Id | Raised by | Default severity / enforcement | Since |
|---|---|---|---|
std.required |
the metamodel (required) |
error / report | 0.1 |
std.facets |
the metamodel (facets) | error / report, prevent in forms | 0.1 |
std.unique |
the metamodel (unique) |
error / report | 0.1 |
std.multiplicity |
the metamodel (bounds) | warning / report below, error / prevent above | 0.1 |
std.endpoints |
the metamodel (relation ends) | error / prevent | 0.1 |
std.containment |
the metamodel (children, slots) |
error / prevent | 0.1 |
std.acyclic |
the metamodel (acyclic, with subtypes) |
error / prevent | 0.1 |
std.references |
references to missing elements | error / report | 0.1 |
std.axisBounds |
axis and system bounds | error / prevent | 0.1 |
std.typeExists |
unknown types in a stored diagram | error / report | 0.1 |
std.unparseable |
the reader, per file that does not parse | error / report | 0.2 |
std.unreadableEntry |
the reader, per entry that cannot become an element | warning / report | 0.2 |
std.missingId |
the reader or runtime, per element without a usable id | warning / report | 0.2 |
std.duplicateId |
the reader or runtime, per second and later holder of an id, or once per id with oncePerGroup (0.3) |
warning / report | 0.2 |
std.mixedPrecision |
the runtime (samePrecisionAs) |
warning / report, prevent in forms | 0.2 |
std.ephemeralViewData |
the runtime, per stored data keyed by an ephemeral id | info / report | 0.2 |
std.pluginMissing |
the runtime, per absent plugin whose functions are called | warning / report | 0.2 |
std.derivedFailed |
the runtime, per derived type that fails to compute | warning / report | 0.2 |
std.derivedId |
the runtime, per derived id already in use | warning / report | 0.2 |
std.derivedEnds |
the runtime, per derived relation type with ends that do not fit | warning / report | 0.2 |
The algorithms whose results DISL defines (DISL 0.3). Every other name of section 10 is passed to a layout engine, and its result is the engine's.
| Algorithm | Options property | Moves | Writes the model | Section |
|---|---|---|---|---|
rowPacked |
rowPacked |
the main-axis position, within each row | no | 10.1 |
rows |
rows |
nothing but the attributes in writes |
yes, writes only, as one undo step |
10.2 |
tidyTree |
tidyTree |
both axes, from containment and model order | only by a drag: order, and stored rows with rows.stored |
10.3 |
(DISL 0.4) force with tiers (10.4) is not in this table: its result must have the properties 10.4 lists, but the positions themselves are the runtime's.