Quickstart

Stable

The five-minute tour — a sample project, block by block.

Opening the editor first asks you to choose or import a project. This page uses the original Monster sample as a compact tour of the Goblin language; it is documentation, not an automatically loaded starter. Open the editor alongside, choose a project, and adapt the examples as you read — everything recompiles about a third of a second after you stop typing.

1. An Enum — a fixed set of options#

Enum: Suit
  case Rock
  case Paper
  case Scissors

Enums do two jobs: they can type a spreadsheet column (its cells become dropdowns), and they can drive card generation via loop: — one card per case.

2. A Sheet — the spreadsheet's columns#

Sheet: Monsters
  column name: Text
  column cost: Number
  column health: Number
  column count: Number

A Sheet declares a tab in the spreadsheet panel and the columns on it. Column types are Text, Number, or any Enum you declared. The code owns the columns; you own the rows. Add a column here and it appears in the grid; rename one and the data follows it.

More in Sheets and data.

3. A Template — what a card looks like#

Template: MonsterFront
  Rectangle: "Banner"
    x: 0
    y: 0
    width: full
    height: 3
    color: if [current_suit] == Suit.Rock then grey
           else if [current_suit] == Suit.Paper then gold
           else mediumpurple
  Text: "Title"
    x: middle
    y: 0.7
    size: 1.6
    color: black
    text: [name]
  Repeat: [health] as i
    Icon:
      x: 1.5 + [i] * 2
      y: 25
      size: 1.8
      color: red
      code: "HEARTS"

A template is a drawing: shapes listed top to bottom, later ones drawn on top.

  • [name] and [health] pull from the spreadsheet row of whichever card is being drawn.
  • [current_suit] comes from the Card's loop: (below).
  • Repeat: is the one to notice. It draws its children N times — here, one heart per point of health, each placed by index math ([i] counts 0, 1, 2…). One number in a cell becomes a row of hearts.

The demo's full template also has a cost label and a suit icon. A back is just another template:

Template: PlainBack
  Rectangle:
    x: 0
    y: 0
    width: full
    height: full
    color: teal

More in Templates and shapes.

4. A Card — tie it together#

Card: Monster
  sheet: Monsters
  size: poker
  x_units: 20
  y_units: auto
  loop: Suit as current_suit
  count: [count]
  Front: MonsterFront
  Back: PlainBack

A Card block says which sheet feeds it, the physical size, the coordinate grid, and which templates draw the front and back.

Cards are generated as rows × loop options × count. With 2 rows, 3 suits, and counts of 2 and 1, you get 2 × 3 = 6 distinct faces and 9 physical cards. Omit loop: for one card per row; omit Back: for a plain white back.

More in Cards and generation.

5. Try changing things#

Each of these exercises a different part of the pipeline:

ChangeWhat should happen
Set Dragon's health to 7Every Dragon card grows to 7 hearts
Set a cost cell to abcThat cell flags red; only that row's cards become placeholders
Delete the else mediumpurple lineA squiggle appears; the preview freezes on the last good render
Change then gold to then hotpinkPaper banners recolor
Set Dragon's count to 5The deck grows from 9 to 18 cards
Change "SWORDS" to "D6"The icon swaps glyph

Then hit Export PDF in the preview toolbar to get it on paper — see PDF export.