Components
A component is a physical object type on the table — a meeple, a card,
a die, a wooden cube. One entry describes one type, and it is an infinite
template: it has no count of its own. Physical copies come from where it is
placed — a setup placement count, or a
deck member quantity. taybl never spawns, scores, or removes
components on its own: players pick them up and move them by hand, exactly
as at a real table.
Every component has a kind — the discriminant that decides which extra
fields it carries:
- Piece (
kind: piece) — meeples, minis, pawns, markers. - Card (
kind: card) — anything that flips between a front and a shared back. - Die (
kind: die) — a randomiser with two or more faces. - Token (
kind: token) — chips, cubes, coins, counters.
Pick the kind by what the object is at the table, not by what it does in the rules — a "resource cube" is a token, a "hero figure" is a piece, even if the rulebook treats them similarly.
How to edit in the Studio
Open your game → Layout tab. Click a component on the table to open the component inspector on the right. There you set the Name, Behaviors, and the kind-specific extras; the inspector also shows the derived number of copies (read-only). Front and back art are set through the face slots (upload or replace inline). How many copies appear is set on the setup placement that places the component (its Count, plus Per player for one set per seat), or — for a deck — on each card's quantity in its group. Cards are grouped into decks from the Component Groups section — see decks.
To add a new type, use Add component in the Layout toolbar; to retire one
without deleting it, toggle hidden (below).
Fields shared by every kind
| Field | Values | Default | What it does |
|---|---|---|---|
kind | piece card die token | — | The discriminant; picks the kind-specific fields |
id | lowercase snake_case | — | Unique id, referenced by setup and zones |
name | text | — | Human label shown in the inspector and hover preview |
faces | FaceBinding per side | .optional() (required on card) | Art bindings — see shapes, behaviors & value bindings and below |
size | { w, h, thickness } | .optional() | Size in abstract table units — only the ratio to the table matters. Absent → sized from the host zone box (whose fitContents scales the contents to the box — see layout) |
properties | record of string / number / boolean | .optional() | Free-form data tags (suit, faction, point value) — never enforced |
hidden | true | .optional() | Skip this type during setup and hide it from pickers. The type stays in the GDL so flipping it back re-enables it |
Face bindings
Art is bound through a FaceBinding — faces.front and faces.back. A
binding is format-agnostic: { image } for the current 2D renderer,
{ model } reserved for a future 3D renderer, { color } as a flat-colour
fallback or tint. Components reference assets by id only, so adding 3D
later is purely additive.
| Field | Values | Default | What it does |
|---|---|---|---|
image | asset id | .optional() | 2D sprite, drawn by the current renderer |
model | asset id | .optional() | 3D model id, reserved for a future renderer |
color | colour string | .optional() | Flat-colour fallback / tint when no art is bound |
Related
- Pieces —
kind: piece - Cards —
kind: card - Dice —
kind: die - Tokens —
kind: token - Shapes, behaviors & value bindings —
shape,footprint,behaviors,valueBinding,attachable - Decks — grouping cards into a deck
- Uploading assets — where face art comes from