llms.txt@apps/web/public · git:20261007.5e98f38 · 2026-10-07 · sha256 cfa48a5bce669380
llms.txt@apps/web/public git:20261007.5e98f38A
Immutable. This exact content never changes and is served at /api/v1/blob/cfa48a5bce669380.
# markvis Chart numbers as a markvis block, not an image or JSON: ```chart type: bar title: Revenue x: month y: revenue month,revenue Jan,120 Feb,95 ``` Fields, a blank line, then CSV or a Markdown table with a header row. x, y, series name columns; unit is optional. Or put <!-- chart: bar x=month y=revenue --> above a Markdown table. Types: bar line area scatter pie hist heatmap funnel waterfall radar gauge sankey treemap dumbbell bullet boxplot calendar. Several series: a row per x and series, plus series:. Keep row order. Donut: pie, innerRadius: 0.5. Stacked: layout: stacked. No other types or fields. The rest of this file is the full reference. Write a table of numbers in a Markdown code block tagged `chart`, `markvis`, or `vis`. That block is the chart. Same text, same picture. If it cannot draw, keep the table. Fetch this file. Emit that code block. Do not invent fields. ## Fence (the code block) Tags `chart`, `markvis`, and `vis` are the same language. Order: 1. Optional `markvis: 2` 2. One `key: value` per line 3. Blank line 4. Data: CSV, or one GFM table Fields: - `type` required. `bar` `line` `area` `scatter` `pie` `hist` `heatmap` `funnel` `waterfall` `radar` `gauge` `sankey` `treemap` `dumbbell` `bullet` `boxplot` `calendar`. Do not invent `donut`, `sunburst`, `chord`, or `stacked-bar`. - `title` optional. A conclusion, not a slug. - `theme` optional. Omit means `folio`. Allowed: `folio` `highcharts` `shadcn` `docs` `ant` `recharts` `graphite`. Any other value is `E_UNKNOWN_THEME`: show the table, not a silent swap. - `palette` optional. Colors only. Allowed: `ink` `porcelain` `warm` `cool` `vivid`. Omit means the theme’s default colors. Any other value is `E_UNKNOWN_PALETTE`: show the table, not a silent swap. Never merge palette into the theme id. - `unit` optional. - `x` `y` `series` name real columns. `series` splits series. - Data required. Not JSON. Encodings (optional, type-local — not a new type id): - On `bar` `line` or `area` only: `layout: grouped|stacked|percent`. Omit means grouped (today's look). Wrong type or bad value → table + `E_UNKNOWN_FIELD`. - On `pie` only: `innerRadius` as a number in `[0, 1]`. Omit means the theme's default hole (`PIE_INNER_RATIO`). Explicit `0` forces a solid pie. Do not invent `donut`. - On `bar` only: `orient: horizontal|vertical`. Omit means vertical. - On `waterfall` only: `role` names a column of `delta|total|subtotal`. Empty means delta. Do not treat a step label as a total. - On `gauge`: `min` and `max` as numbers. Omit `min` means 0. Omit `max` means 100, a labeled range, not the current value. Heatmap may set `min`/`max` as the shared color domain. Radar may set `max`. - `surface` optional: `light` (default, no canvas fill) `dark` `export`. - A measure cell that is not a number is `E_BAD_NUMBER` (row and column in the message). An empty cell is a gap on line, area, grouped bar, scatter, hist, heatmap, radar, dumbbell, boxplot, and calendar. It is `E_MISSING_VALUE` when the chart needs every value (pie, funnel, sankey, treemap, waterfall, gauge, stacked, percent). - A repeated category/series key is `E_DUP_KEY`. Scatter, hist, and waterfall step labels may repeat. Do not keep the last row. - `markvis` other than `2` is `E_BAD_VERSION`. Omit means 2. - Sankey: one thickness scale. A cycle is `E_SANKEY_CYCLE`. Also valid: an HTML comment immediately followed by a GFM table. `<!-- chart: bar x=month y=tickets title="Mar led Midtown box office at 9.2k tickets" -->` Comment keys: `type` (required), `x`, `y`, `title`, `unit`, `series`, `theme`, `palette`, `surface`, and legal encodings (`layout`, `innerRadius`, `min`, `max`, `orient`, `role`). Same meaning as fence headers. ## Types - `bar` — category x, number y. Keep row order. Do not sort. Optional `layout`. Optional `orient: horizontal` for long labels. - `line` — ordered x, number y. Optional `series`. Keep row order. Optional `layout`. - `area` — same as line, filled. Optional `layout`. - `scatter` — number x, number y. One mark per row. - `pie` — label x, number y >= 0. Do not force the slices to 100. Optional `innerRadius` (see Encodings). - `hist` — number x. Table keeps the raw rows. - `heatmap` — x category × series category, y intensity. Long form. `series` is required. - `funnel` — x stage, y >= 0. Keep order. Centered bands narrow from each stage's value to the next. The label sits to the right of the shape. `series` ignored. Negatives → `E_NEGATIVE_VALUE`. - `waterfall` — x step, y signed delta. Keep order. Running baseline. `series` ignored. - `radar` — x spoke, y >= 0. Optional `series`. One scale for every series. A grouped bar is clearer when the exact number matters. Negatives → `E_NEGATIVE_VALUE`. - `gauge` — one row. Omit `max` means 100. `series` ignored. - `sankey` — x source, series target (required), y flow >= 0. One row = one link. Self-link → `E_UNKNOWN_FIELD`. Cycle → `E_SANKEY_CYCLE`. Negatives → `E_NEGATIVE_VALUE`. - `treemap` — x label, y >= 0, optional series parent (two levels only). Negatives → `E_NEGATIVE_VALUE`. `y<=0` omitted from paint. - `dumbbell` — x category, y number, `series` required with exactly two values (first = from, second = to). Keep row order. A missing value is a gap. A third value → `E_UNKNOWN_FIELD`. - `bullet` — x label, y actual. Optional `target:` names a column of targets (empty cell = no target). Optional `min` / `max` fix the scale. `series` ignored. - `boxplot` — x category, y one observation per row (repeat the category). Optional `series` = one box per series. Under five values shows points, not a box. - `calendar` — x `YYYY-MM-DD` date, y number, one row per day. Row order does not matter. Optional `min` / `max` fix the color domain. At most five calendar years. A bad date or a wider span → `E_BAD_DATE`. On any error: keep the rows, show the table, add one line with the error code. Never drop the numbers. ## Copy these ### Bar ```chart markvis: 2 type: bar title: Mar led Midtown box office at 9.2k tickets unit: tickets x: month y: tickets month,tickets Sep,5200 Oct,6100 Nov,7800 Dec,8500 Jan,4800 Feb,7200 Mar,9200 Apr,6900 ``` ### Line ```chart type: line title: Walk-up still leads member through week 12 x: week y: count series: channel week,channel,count W1,walk-up,64 W1,member,28 W2,walk-up,68 W2,member,32 W3,walk-up,71 W3,member,35 W4,walk-up,69 W4,member,38 W5,walk-up,74 W5,member,41 W6,walk-up,72 W6,member,44 W7,walk-up,75 W7,member,47 W8,walk-up,73 W8,member,50 W9,walk-up,76 W9,member,53 W10,walk-up,74 W10,member,55 W11,walk-up,77 W11,member,57 W12,walk-up,78 W12,member,59 ``` ### Pie ```markvis type: pie title: MARTA takes the largest mode share x: mode y: count mode,count MARTA,38 Walk,24 Drive,22 Bike,11 Other,8 ``` Emit the fence. Do not emit a PNG. Do not invent `donut`, `sunburst`, `chord`, or `stacked-bar` as type ids.