Skip to content

Views and the composer

How to give a definition more than one way of being read — choosing a starting template, composing the block tree, and what a view can and cannot change.

All documentation — Modelling the world
On this page

A view is a saved layout for a definition’s items. One definition can have several, and a reader picks between them.

What the four kinds are is on the entities reference. This page is how to make one.

The Views tab: the definition's four saved views listed on the left, the block palette of item parts and fields beneath them, and the composer canvas showing the layout being assembled.
The composer, mid-build.

Why bother

A character has a name, a portrait, six stats, three relationships and two pages of biography. The form that is right for writing that character is not the layout that is right for reading them mid-scene, and neither is the one you want when you are balancing all forty characters at once.

Views let one definition answer all three without duplicating a single field.

Make one

Open the definition and switch to its Views tab. The definition editor has exactly two: Fields and Views.

Every new definition already has one — a Form view, created automatically and set as the default. So the question is never how do I get a view; it is what do I want that the form does not do.

Pick a starting template

The New View gallery offers five cards:

CardWhat you get
FormThe item header, then one field grid at the definition’s column count. The classic entry form.
GridThe Form’s structure wearing an editorial reading-column style, with field labels off
CodexA hero band, then a 2:1 split — the description on the left with a lead paragraph and drop cap, an infobox of scalar values on the right, then tags and reference lists
SheetPortrait and title, a badge row, an Attributes grid drawing numeric fields as meters, then a 2:1 split with a Profile card
BlankOne empty section

Codex and Sheet are auto-derived, with no per-definition setup: they read your fields and lay themselves out. That makes them the cheapest thing to try first — take one and see whether it is already right.

Compose it

The composer is a WYSIWYG editor over the real renderer. The canvas is not a preview: it is the same renderer, drawing the view you are editing over a real item of yours — or a curated sample when the definition has no items yet.

The blocks

GroupBlocks
ItemItem header · Item name · Portrait · Description · Tags · Item color · Hero band
LayoutSection · Columns · Grid · Row · Tabs · Heading · Divider · Spacer · Callout

Field slots are deliberately not in that list — they come from the definition’s own effective fields, which is own fields plus inherited fields plus every applied trait’s.

Moving things

GestureWhat it does
ClickSelect a block
Drag by the bodyMove it
Drop on a band between two blocksInsert there
Drop on a block’s edge stripWrap the two into a side-by-side
Drop on a block’s bodySwap the two
Alt+↑ / Alt+↓Move up or down within its container
Ctrl+DDuplicate

Each selected block gets an inspector with its own settings.

How the layout actually works

A view is a tree of containers, not a canvas of coordinates.

BlockChild lists
Section, Row, GridOne
ColumnsOne per column
TabsOne per tab
Everything elseNone — they are leaves

CSS-grid auto-placement applies inside one Grid block only. If you want two independent grids, use two Grid blocks; a grid does not reach into a nested one.

How a field is drawn — variants

Every field slot has a variant, and auto picks one from the field’s type. Change it when the default reads wrong.

VariantWhat the reader sees
AutoResolved from the field’s type — the column below
ValueLabel and inline control; an em-dash when empty. Hides itself when empty and read-only.
StackedA key above a bordered input
StatA big-number card
MeterKey, value/max, and a bar. Uses the field’s own min and max.
PipsA level as a row of dots, one per unit of the range, filled up to the value — ●●○. Press a dot to set the level (the top-filled dot again steps it down). Offered on a number whose max is between 1 and 10
BadgeA coloured pill — options for a select, a switch for a boolean
ChipsA wrapping row of pills for a multi-select; None when empty
SwatchA colour chip at rest, a picker when editing
ProseA writing surface, rich for rich text
CodeA collaborative code editor — forced for any code field
ConditionThe visual condition builder — forced for any condition field
PortraitMedia tiles
ListRows of avatar, name and a jump arrow
CardsThe same as a wrapping grid of cards

What auto resolves to: text and number and date and vector3 → Value; rich text → Prose; boolean → Badge; a multi-select → Chips, a single select → Badge; asset → Portrait; entity → List; colour → Swatch; code → Code; condition → Condition; and every project reference — variable, tag, board, document, command call — → List.

The inspector only offers the variants that make sense for the field’s type, so you cannot set a meter on a colour.

Labels have three modes: Hide, Inline (a right-aligned key/value row that collapses when empty) and Above.

Style, and how it cascades

Nine settings decide how a view feels. Each can be set on the view, and then overridden on any container or any single block.

SettingOptionsDefault
Accent dotson / offoff
Accent stat numberson / offoff
Coloured pillsNever · Value colours · AlwaysValue colours
MetersNeutral · AccentNeutral
DensityComfortable · CompactComfortable
Prose at restEditorial · BoxedEditorial
Field labelsEditorial · FormEditorial
WidthColumn · Full — view-level onlyColumn
ControlsSeamless · BoxedSeamless

The cascade is nearest-wins: the view’s defaults, then every container between it and the block, then the block’s own. A setting you override shows a marker and a Reset to inherited button, so you can always tell what you changed from what you inherited.

Two presets seed the whole set at once: Neutral and Colourful.

Two of the nine are worth understanding rather than trying:

  • Field labels: Form adds the canonical label, its type icon, a required marker, and the field’s help text. Editorial drops all of that. It is the difference between a form to fill in and a page to read.
  • Controls: Boxed puts a visible control around every value, overriding the variant — except prose, meters, stats and pips, which keep their own shape.

Manage the set

From the same tab: rename a view, reorder the list, delete one, and star one as the default. You can also choose which of your items the composer previews against, which matters more than it sounds — a layout that looks right against your most-filled character often falls apart against your emptiest one.

Which view a reader gets

In this order:

  1. The view they last chose, remembered in their browser.
  2. The definition’s default.
  3. The first view.
  4. An empty state, if there are none.

So starring a default sets the first impression, not a permanent one: a reader who picks another keeps it.

Views are per definition, not per item. Every item of a definition shares the set — there is no “this one character gets a special layout”.

What a view cannot do

It cannotBecause
Add a fieldIt binds existing fields by id. Fields are the definition’s.
Store a valueIt is presentation only.
Change what a game receivesExports read customFields and the item’s data, never a view.
Change what the AI seesSame.
Vary per itemViews belong to the definition.

Limits

Nothing caps the number of views, blocks per view, or nesting depth. No guard reads such a number, on any plan, and views are not plan-gated.

What breaks

SituationWhat happens
A field bound by a view is deleted from the definitionThe view keeps its shape; the slot has nothing to draw
A field’s type changesThe view draws the new type; the old value is parked, not lost — see definitions
A definition imported with a legacy layout and no viewsIt has no view set until one is created. A development-only alignment script back-fills Form views, and it does not reproduce trait-instance grid offsets.
A definition has no itemsThe composer previews against a curated sample instead
Written for
Writers · Unity developers · Advanced integrators
Last updated