lini 0.7.2

Pretty diagrams from plain text, with fine-grained control. Compiles to clean, themeable SVG.
Documentation
// Every built-in template — group, caption, footer, badge, note, row, column,
// table, link — on one captioned board, in palette colours.
{
  layout: column; gap: 22; padding: 26; font-weight: normal;

  |panel::group| {
    layout: column; gap: 10; padding: 14;
    fill: --gray-wash; stroke: --gray-soft; radius: 8;
  }
  |tile::box| { fill: --sky-soft; stroke: --sky-ink; color: --sky-ink; radius: 6; }
}

|plain| { font-size: 18; font-weight: bold; } "Templates"

upper |row| { gap: 22; align: start; } [
  // group with a caption (top edge) and a footer (bottom edge)
  profile |panel| [
    |caption| "Profile"
    name |tile| "Ada Lovelace"
    role |tile| { fill: --teal-soft; stroke: --teal-ink; color: --teal-ink; } "Engineer"
    |footer| "since 1843"
  ]
  // row + column nested inside a group
  nested |panel| { layout: row; gap: 16; } [
    |caption| "row + column"
    |row| [
      r1 |tile| { fill: --amber-soft; stroke: --amber-ink; color: --amber-ink; } "a"
      r2 |tile| { fill: --amber-soft; stroke: --amber-ink; color: --amber-ink; } "b"
    ]
    |column| [
      c1 |tile| { fill: --rose-soft; stroke: --rose-ink; color: --rose-ink; } "p"
      c2 |tile| { fill: --rose-soft; stroke: --rose-ink; color: --rose-ink; } "q"
    ]
  ]
]

lower |row| { gap: 22; align: start; } [
  // a box whose content is text + a badge
  svc |tile| { width: 150; height: 70; fill: --teal-soft; stroke: --teal-ink; color: --teal-ink; } [
    "Service"
    |badge| "NEW"
  ]
  |note| "Sticky note"
  // a table draws dividers and flows bare text into its tracks
  basket |table| { columns: 80 56 70; stroke: --gray-ink; } [
    "Fruit" "Qty" "Note"
    "Apple" "12" "fresh"
    "Mango" "3" "ripe"
  ]
  // link wraps a shape in <a href>
  docs |tile| { link: "https://example.com"; width: 96; height: 70; fill: --purple-soft; stroke: --purple-ink; color: --purple-ink; } "Docs"
]