Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
bc7754f
fix: use Math.max for pyramid chart right-bar palette fallback
fix2015 Jul 27, 2026
7eec229
Merge pull request #77 from fix2015/fix/pyramid-palette-color-index
Chenglong-MS Jul 27, 2026
5999d65
minor fix
Chenglong-MS Jul 27, 2026
5671899
fixes for excel
Chenglong-MS Jul 27, 2026
9ce2eb4
histogram group
Chenglong-MS Jul 28, 2026
cd77a81
docs: quote pip extras install examples
nyxst4ck Jul 28, 2026
dc8984f
cleanup
Chenglong-MS Jul 28, 2026
52e3f18
Merge branch 'dev' into nyxst4ck/auto-quote-pip-extras-20260728-095216
Chenglong-MS Jul 28, 2026
ab6c514
Merge pull request #78 from nyxst4ck/nyxst4ck/auto-quote-pip-extras-2…
Chenglong-MS Jul 28, 2026
222c9b5
Merge branch 'dev' of github.com:microsoft/flint-chart into dev
Chenglong-MS Jul 28, 2026
c73d597
theme research
Chenglong-MS Jul 29, 2026
55c138c
theme research
Chenglong-MS Jul 30, 2026
5e7afe6
theme R2: fix radial charts under furniture and data labels; add R2/g…
Chenglong-MS Jul 30, 2026
8c731a9
theme(r2): gate always-labels on legibility; readable R2 tiles at 300…
Chenglong-MS Jul 30, 2026
4d2baf6
theme(r2): fix nyt dotted lines — withhold redundant dash under direc…
Chenglong-MS Jul 30, 2026
9212ba0
theme(r2): park scatter-color-n50 and pie-25 in theme-lab-gaps
Chenglong-MS Jul 30, 2026
4ade020
theme: a violin/density plot summarises a distribution, so it prints …
Chenglong-MS Jul 30, 2026
59d3af4
waterfall: pin x-axis title to the field so the synthetic __wf_lead c…
Chenglong-MS Jul 30, 2026
9be350f
histogram: declare the binned x as a banded index axis so a right/top…
Chenglong-MS Jul 30, 2026
7ab69aa
theme: hoist the facet when a zero rule turns a faceted unit into a l…
Chenglong-MS Jul 30, 2026
8e55baf
theme-lab-gaps: park grouped-color-continuous (datawrapper ramp washe…
Chenglong-MS Jul 30, 2026
f88288c
mckinsey: add diverging ramp so signed measures keep their sign
Chenglong-MS Jul 30, 2026
f6b54c8
theme: two realize placement fixes for faceted tables and dual keys
Chenglong-MS Jul 30, 2026
e368ec3
fix(vegalite): carry resolved axis titles into the waterfall layers
zl190 Jul 30, 2026
9207c69
fix(flint-py): point run_full_eval at the moved fixture corpus
zl190 Jul 30, 2026
f168ad9
theme: clear printed bar labels with scale headroom; wrap wide legends
Chenglong-MS Jul 30, 2026
0e306b8
theme: fit-gate bar value labels, pie small-slice suppression, flush-…
Chenglong-MS Jul 30, 2026
066c26f
bump: end labels at the last drawn band; landscape panel for readable…
Chenglong-MS Jul 30, 2026
42d369d
Themed slope charts: house-aware end labels, legend, and band-step floor
Chenglong-MS Jul 30, 2026
5c9ddf2
Stacked-area band labels: stack the text, and end at the real last re…
Chenglong-MS Jul 30, 2026
a1b7d02
Themed bars on a time axis take the house gap (width band), not fill …
Chenglong-MS Jul 30, 2026
e0ff6df
Revert "Themed bars on a time axis take the house gap (width band), n…
Chenglong-MS Jul 30, 2026
b3880f6
Themed bars on a continuous-banded axis: re-cut the layout's size to …
Chenglong-MS Jul 30, 2026
3e3b18c
Themed dodged bars take the house gap on the lane, not just the group
Chenglong-MS Jul 30, 2026
a6cbff6
Datawrapper separator: skip the edge stroke when bars are too thin to…
Chenglong-MS Jul 30, 2026
a86a36a
Loosen dodged boxplot lane fill so grouped boxes separate
Chenglong-MS Jul 30, 2026
478c63b
Relax grouped-box lane-fill assertions to the new 0.7 target
Chenglong-MS Jul 30, 2026
7964b7f
Drop the category-axis spine on bar tables
Chenglong-MS Jul 30, 2026
a5bc7f4
fix(site): reset scroll position when navigating between docs
yelper Jul 30, 2026
77b08f0
revert package-lock.json changes
yelper Jul 30, 2026
ab844fb
fixes
Chenglong-MS Jul 30, 2026
3576f96
theme: give each house a distinct layout envelope
Chenglong-MS Jul 31, 2026
e9e907b
playground: add theme reference-examples tab
Chenglong-MS Jul 31, 2026
1a336ce
theme(economist): right-hand measure axis is the house default
Chenglong-MS Jul 31, 2026
3e24164
Revert "playground: add theme reference-examples tab"
Chenglong-MS Jul 31, 2026
778cb2d
Merge pull request #79 from zl190/fix/waterfall-titles
Chenglong-MS Jul 31, 2026
8060c3c
theme: add Power BI (light) house
Chenglong-MS Jul 31, 2026
8782e3c
theme: make title-block vertical rhythm a per-house lever
Chenglong-MS Jul 31, 2026
09ed692
feat(chartjs): add Lollipop Chart template
zl190 Jul 18, 2026
a0ce619
playground(theme-lab): add Power BI (light) redesigns; drop redundant…
Chenglong-MS Jul 31, 2026
901b7c4
playground(theme-lab): fit modal charts to their pane, wrap instead o…
Chenglong-MS Jul 31, 2026
838f7bd
playground(theme-lab): simplify coverage section to plain bullets, re…
Chenglong-MS Jul 31, 2026
6d2a3ca
Grouped boxplot bands stretch to fill their lanes
Chenglong-MS Jul 31, 2026
dfdb6c6
Tiered palettes + share-ordered "other" overflow for high cardinality
Chenglong-MS Jul 31, 2026
4d493a7
Others(N) overflow legend + universal overflow inks + labs colour panel
Chenglong-MS Jul 31, 2026
7ca968c
theme: merge pie overflow tail into one slice; fix hub spikes and fla…
Chenglong-MS Jul 31, 2026
5df4771
theme: size a folded colour legend for its K+1 keys, not the field's …
Chenglong-MS Jul 31, 2026
8ee6119
theme: complete colour spec — McKinsey extended palette, distinct par…
Chenglong-MS Jul 31, 2026
c6b9a2a
theme(mckinsey): document that the near-black single ink is authentic…
Chenglong-MS Jul 31, 2026
adbf862
theme(radial): seat outside pie labels clear of the arc (gap 14→22)
Chenglong-MS Jul 31, 2026
8990ee0
theme: fix donut-as-pie, radar legend loss, and waterfall title leak
Chenglong-MS Jul 31, 2026
8841803
theme: keep candlestick price axis, show pie share %, stop legend tru…
Chenglong-MS Jul 31, 2026
dfe91a0
playground: add "Theme lab real" page — real datasets × all houses
Chenglong-MS Jul 31, 2026
b046c8d
theme: bin economist diverging heatmap into stepped quantize scale
Chenglong-MS Jul 31, 2026
bb2e4df
theme: keep measure axis left when series names sit at the line ends
Chenglong-MS Jul 31, 2026
ee52b4d
theme: keep the size value-key legend when a chart names no series
Chenglong-MS Jul 31, 2026
86424e2
playground: add Swiss lab with hand-authored Vega-Lite mockups
Chenglong-MS Aug 1, 2026
e97f078
theme: add Swiss (International Typographic Style) preset
Chenglong-MS Aug 1, 2026
13771f7
theme: drop the Swiss header rule
Chenglong-MS Aug 1, 2026
47f5a11
theme: keep the band baseline continuous under bar edge strokes
Chenglong-MS Aug 1, 2026
8b45a77
theme: give McKinsey lollipop stems a solid connector ink
Chenglong-MS Aug 1, 2026
aea55bd
theme: redraw the category baseline over stroked bars; widen lollipop…
Chenglong-MS Aug 1, 2026
9756611
theme: draw the Economist masthead tab over the title, not under it
Chenglong-MS Aug 1, 2026
b096de5
theme: size a bar-table's legend to the whole table, not just the bar…
Chenglong-MS Aug 1, 2026
cdc6610
theme: lengthen the Economist masthead line to ~1/10 of the chart width
Chenglong-MS Aug 1, 2026
5c80262
Refine Economist theme from the 2017 chart style guide
Chenglong-MS Aug 1, 2026
0a6fade
feat(theme): canvas-anchored masthead tab (graphic-left, gutter-indep…
Chenglong-MS Aug 1, 2026
8e6bf00
Fix Power BI dark-theme structural-mark visibility
Chenglong-MS Aug 2, 2026
d96f923
Add playful Cartoon theme + rounded-bar mark lever
Chenglong-MS Aug 2, 2026
fbc21ff
Revert Cartoon theme; add Cartoon lab + group theme-lab nav
Chenglong-MS Aug 2, 2026
3bb5864
Add Cartoon theme + generalizable outline & cornerRadius mark levers
Chenglong-MS Aug 2, 2026
9601350
Load display fonts in the r2 harness so sheets show each house's real…
Chenglong-MS Aug 2, 2026
f70475d
Guard the mark outline on thin bars and drop it from grid cells
Chenglong-MS Aug 2, 2026
e08f70c
axis fixes
Chenglong-MS Aug 2, 2026
7154fbe
Merge origin/dev into theme-experiment
Chenglong-MS Aug 2, 2026
0805d15
Close the last two gaps in Vega-Lite theme coverage
Chenglong-MS Aug 2, 2026
2556cd8
theme: dumbbell connectors, plot edges, dividers, dark-surface legibi…
Chenglong-MS Aug 3, 2026
3a9facd
theme: a house switch in the gallery and the MCP app
Chenglong-MS Aug 3, 2026
63f9011
theme: let the house's own measure and branding reach the widgets
Chenglong-MS Aug 3, 2026
d32d3e0
theme: let a new house speak over options nobody really chose
Chenglong-MS Aug 3, 2026
38bb58d
site: give the MCP app mockup charts worth theming
Chenglong-MS Aug 3, 2026
99e60a9
theme: draw the preview at the size it will be seen
Chenglong-MS Aug 3, 2026
584bd64
theme: every house says how big its dots are
Chenglong-MS Aug 3, 2026
a0857dd
theme: a dot size that reaches only the dots it meant
Chenglong-MS Aug 3, 2026
8682029
site: one style-references page instead of two identical labs
Chenglong-MS Aug 3, 2026
b127a7a
site: theme the whole demo wall at once, and let the playground shut up
Chenglong-MS Aug 3, 2026
72f6a5c
charts: let the reader turn value labels on or off
Chenglong-MS Aug 3, 2026
860a925
charts: value labels are Flint's, not a house's
Chenglong-MS Aug 3, 2026
3e866db
charts: label each bar in a group, and each segment in a stack
Chenglong-MS Aug 3, 2026
92c81b3
charts: print a number a reader can take off the mark
Chenglong-MS Aug 3, 2026
9373579
fix
Chenglong-MS Aug 4, 2026
7ac0f8a
charts: a value label may not contradict the mark it sits on
Chenglong-MS Aug 4, 2026
a2aadd7
site: drop the number lab
Chenglong-MS Aug 4, 2026
9647433
site: illustrate the theme switch, and open the menu the figure means
Chenglong-MS Aug 4, 2026
354dfe0
theme: a legend row is packed, not ruled into columns
Chenglong-MS Aug 4, 2026
e1f247f
charts: two tick numbers may not read as one
Chenglong-MS Aug 4, 2026
aa1750c
site: a mosaic that shows a whole house at once
Chenglong-MS Aug 4, 2026
d169ab1
site: the mosaic shows a style, not twenty charts
Chenglong-MS Aug 4, 2026
268a4cc
site: the wall stops cropping and starts fitting
Chenglong-MS Aug 4, 2026
5567c28
site: a chart is resized, never reshaped
Chenglong-MS Aug 4, 2026
658bd7b
Replace theme mosaic with a demo-wall-style theme wall
Chenglong-MS Aug 4, 2026
c348b8f
Give the theme wall its own captions, measured to fit a tile
Chenglong-MS Aug 4, 2026
9b4a95b
Let the theme wall move the headline into the chart
Chenglong-MS Aug 4, 2026
275a57a
Cap the size key at three anchors by default
Chenglong-MS Aug 4, 2026
e2db7ab
Give a painted canvas a margin its own type can clear
Chenglong-MS Aug 4, 2026
93e4677
Stop exports measuring one font and drawing another
Chenglong-MS Aug 4, 2026
8aa2915
Let the chart frame take the chart's own paper
Chenglong-MS Aug 4, 2026
dd5a1e5
Let a value key say what its numbers count
Chenglong-MS Aug 4, 2026
356428f
Keep swapped heatmap labels renderable
Chenglong-MS Aug 4, 2026
df81568
Make the heatmap illustration visibly transpose
Chenglong-MS Aug 4, 2026
6fa7067
Keep the illustration heatmap rectangular
Chenglong-MS Aug 4, 2026
7c4d686
Draw missing heatmap values as cells
Chenglong-MS Aug 4, 2026
95dab21
Separate temporal heatmaps from categorical grids
Chenglong-MS Aug 4, 2026
4fb1ec1
Restore temporal bands as a layout invariant
Chenglong-MS Aug 4, 2026
25806e8
Lift Power BI colors for dark surfaces
Chenglong-MS Aug 4, 2026
e5a898e
Place band-end names inset or outset as a set
Chenglong-MS Aug 4, 2026
ed5590c
Give the showcase charts a headline and room to fill their pane
Chenglong-MS Aug 4, 2026
ddc9149
Note why the faceted showcase uses two columns
Chenglong-MS Aug 4, 2026
4b49668
Promote the theme wall to a public /themes page
Chenglong-MS Aug 5, 2026
8ad197b
Fix the themes wall to 6x3 and tell the reader how to use a theme
Chenglong-MS Aug 5, 2026
337c02d
Polish the themes page copy
Chenglong-MS Aug 5, 2026
9bd3640
Explain each theme in the picker
Chenglong-MS Aug 5, 2026
8d198ef
Explain how Flint themes shape compilation
Chenglong-MS Aug 5, 2026
e87927c
Show themes as compiler-wide design systems
Chenglong-MS Aug 5, 2026
fe8974a
Add markers to theme principles
Chenglong-MS Aug 5, 2026
01ff991
Simplify the themes page language
Chenglong-MS Aug 5, 2026
3bdaaca
Clarify the three levels of a Flint theme
Chenglong-MS Aug 5, 2026
ee273bb
Join theme bullets with vertical guides
Chenglong-MS Aug 5, 2026
c0e7d7f
Move theme bullets to the introduction
Chenglong-MS Aug 5, 2026
04a560c
Remove bullets from the themes introduction
Chenglong-MS Aug 5, 2026
e6ebfd6
Refine the Flint theme introduction
Chenglong-MS Aug 5, 2026
e619576
Lead the themes page with the specification
Chenglong-MS Aug 5, 2026
5311586
Place Swiss beside the editorial themes
Chenglong-MS Aug 5, 2026
54cb63a
Resolve every documentation navigation label
Chenglong-MS Aug 5, 2026
0399ad6
Teach preset, custom, and inherited ThemeSpecs
Chenglong-MS Aug 5, 2026
5d02b30
Pair ThemeSpec code with a live chart preview
Chenglong-MS Aug 5, 2026
7cc1151
Keep chart context beside the ThemeSpec preview
Chenglong-MS Aug 5, 2026
14c1008
Give the custom ThemeSpec a blue canvas
Chenglong-MS Aug 5, 2026
a7e762a
Move ThemeSpec into Quick start
Chenglong-MS Aug 5, 2026
b073450
Frame ThemeSpec around its three compiler levels
Chenglong-MS Aug 5, 2026
2a15810
Rename ThemeSpec guide to Using themes
Chenglong-MS Aug 5, 2026
f68281f
Use house icons throughout the themes guide
Chenglong-MS Aug 5, 2026
0c89a26
Introduce themes in Getting started
Chenglong-MS Aug 5, 2026
b8bb005
Introduce themes on the About page
Chenglong-MS Aug 5, 2026
1ff93cd
Focus the theme introduction on brand consistency
Chenglong-MS Aug 5, 2026
8aee2f5
Brighten the new themes signal
Chenglong-MS Aug 5, 2026
10bf98e
List themes beside rendering backends
Chenglong-MS Aug 5, 2026
fdd0796
Emphasize coherent brand design across charts
Chenglong-MS Aug 5, 2026
12f666b
Link theme roster to matching previews
Chenglong-MS Aug 5, 2026
c955da1
Remove theme wall case descriptions
Chenglong-MS Aug 5, 2026
5fd7bf2
Remove captions from About showcase
Chenglong-MS Aug 5, 2026
146bbb9
Simplify theme specification copy
Chenglong-MS Aug 5, 2026
9deea74
Clarify theme comparison example
Chenglong-MS Aug 5, 2026
4cac179
Rename visual themes action
Chenglong-MS Aug 5, 2026
bdfa221
Link theme demo to usage guide
Chenglong-MS Aug 5, 2026
26c68c7
Center theme wall introduction
Chenglong-MS Aug 5, 2026
0a849d6
Refine theme wall introduction
Chenglong-MS Aug 5, 2026
88554ac
Prepare formal themes for Flint 0.5
Chenglong-MS Aug 5, 2026
399039f
Add Flint 0.5 to About updates
Chenglong-MS Aug 5, 2026
254693c
fix
Chenglong-MS Aug 5, 2026
0d3abfb
Merge pull request #82 from yelper/dev/alsarika/fix-docs-scroll-position
Chenglong-MS Aug 5, 2026
a3768cd
Merge pull request #81 from zl190/fix/eval-fixtures-path
Chenglong-MS Aug 5, 2026
8863ce3
Merge pull request #59 from zl190/feat/chartjs-lollipop
Chenglong-MS Aug 5, 2026
301ae49
Teach agents simple ThemeSpec workflows
Chenglong-MS Aug 5, 2026
ba7ba48
updates
Chenglong-MS Aug 5, 2026
06801e1
ok
Chenglong-MS Aug 5, 2026
a729961
ok
Chenglong-MS Aug 5, 2026
5f686e1
site udpate
Chenglong-MS Aug 5, 2026
d4326cb
mcp test and update
Chenglong-MS Aug 5, 2026
d1dc86d
bump
Chenglong-MS Aug 6, 2026
2f147ef
stuff
Chenglong-MS Aug 6, 2026
55d0e52
update
Chenglong-MS Aug 6, 2026
5d8d2a2
update doc
Chenglong-MS Aug 6, 2026
5488409
fixes
Chenglong-MS Aug 6, 2026
e326148
ok
Chenglong-MS Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
127 changes: 127 additions & 0 deletions .github/release-notes/0.5.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# Flint 0.5.0: Formal visual themes

Flint 0.5 introduces `ThemeSpec`, a formal specification for applying a
coherent design system across an entire chart library. Instead of requiring
creators or agents to reproduce design guidance chart by chart, a ThemeSpec
participates directly in compilation and adapts to the chart's semantics,
data, cardinality, and available space.

A ThemeSpec shapes compilation in three stages. Using resolved semantic
information, it:

- governs layout constraints and dynamics, including density, spacing, sizing,
and stretch limits;
- conditionally resolves visual preferences for labels, legends, axes,
annotations, and semantic roles; and
- supplies design fixtures such as typography, color, surfaces, mark geometry,
and structural line styles to backend-specific code generation.

<p align="center">
<img width="100%" alt="ThemeSpec shaping the Flint compilation process through resolved semantics, layout constraints, visual preferences, and design fixtures." src="https://raw.githubusercontent.com/microsoft/flint-chart/2f147ef3d068a8ecf26ec10ad0a50c01c862f0ab/docs/figs/theme-spec-expl.png" />
<br>
<sub>ThemeSpec participates throughout compilation, from resolved semantics and layout dynamics to conditional visual preferences and backend design fixtures.</sub>
</p>

This release also adds ten built-in themes, custom and inherited ThemeSpecs,
public theme APIs, a visual-theme explorer and Theme Lab, plus theme discovery
and authoring support in the Flint MCP server and MCP App.

## Use a visual theme

Add `theme_spec` beside `chart_spec`. The chart spec continues to define what
the chart means; the theme defines how that meaning is presented.

```json
{
"chart_spec": {
"chartType": "Bar Chart",
"encodings": {
"x": { "field": "region" },
"y": { "field": "revenue" }
}
},
"theme_spec": "economist"
}
```

## Ten built-in themes

Flint ships New York Times, Economist, Swiss, Nature, McKinsey, Datawrapper,
Power BI, Power BI Light, Pop, and Cartoon presets. The
[visual-theme explorer](https://microsoft.github.io/flint-chart/#/themes)
applies each preset to the same set of charts for direct comparison.

<p align="center">
<a href="https://microsoft.github.io/flint-chart/#/themes?theme=economist&amp;layout=banner">
<img width="100%" alt="Twelve charts rendered with Flint's Economist theme." src="https://raw.githubusercontent.com/microsoft/flint-chart/d4326cbadd90c8bd2bb642b778be33d0801161f5/docs/figs/flint-theme-economist.png" />
</a>
<br>
<sub><strong>Economist</strong> — compact editorial graphics with a strong red accent.</sub>
</p>

<p align="center">
<a href="https://microsoft.github.io/flint-chart/#/themes?theme=swiss&amp;layout=banner">
<img width="100%" alt="Twelve charts rendered with Flint's Swiss theme." src="https://raw.githubusercontent.com/microsoft/flint-chart/d4326cbadd90c8bd2bb642b778be33d0801161f5/docs/figs/flint-theme-swiss.png" />
</a>
<br>
<sub><strong>Swiss</strong> — typographic structure, restrained color, and a clear visual grid.</sub>
</p>

<p align="center">
<a href="https://microsoft.github.io/flint-chart/#/themes?theme=pop&amp;layout=banner">
<img width="100%" alt="Twelve charts rendered with Flint's Pop theme." src="https://raw.githubusercontent.com/microsoft/flint-chart/d4326cbadd90c8bd2bb642b778be33d0801161f5/docs/figs/flint-theme-pop.png" />
</a>
<br>
<sub><strong>Pop</strong> — bold color, emphatic marks, and playful graphic contrast.</sub>
</p>

## Create a brand theme

Pass a custom `ThemeSpec`, or inherit a built-in preset and override only the
decisions that should differ:

```json
{
"theme_spec": {
"extends": "economist",
"id": "our-brand",
"ink": {
"series": {
"single": "#6b3fa0"
}
}
}
}
```

Nested objects merge; arrays and scalar values replace inherited values.

## Tools and integrations

- The [visual-theme explorer](https://microsoft.github.io/flint-chart/#/themes)
compares presets across the same chart wall.
- [Theme Lab](https://microsoft.github.io/flint-chart/#/theme-lab) tests custom
ThemeSpecs across chart types and data shapes.
- The MCP server and MCP App add theme discovery, preset selection, and custom
ThemeSpec support through `list_themes`.
- The bundled `flint://theme-skill` resource and `author_flint_theme` prompt
help agents translate design guidance into reusable ThemeSpecs.
- Public APIs include `ThemeSpec`, `ThemePreset`, `THEME_PRESETS`,
`listThemePresets()`, and `resolveThemeSpec()`.
- The theme explorer, Theme Lab, and authoring guidance are available in
English and Chinese.

The release also improves Vega-Lite logarithmic tick and grid spacing, line
endpoint guides, and heatmap grid treatment.

ThemeSpec is currently realized by the Vega-Lite backend. Other backends still
accept the shared Flint input but do not yet apply `theme_spec`. Existing inputs
without a theme retain Flint's default behavior.

See [Using themes](https://microsoft.github.io/flint-chart/#/documentation/theme-spec)
for the complete vocabulary and examples.

See the [changelog](https://github.com/microsoft/flint-chart/blob/main/CHANGELOG.md)
for the complete technical summary.

**Full Changelog**: https://github.com/microsoft/flint-chart/compare/0.4.0...0.5.0
43 changes: 42 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.5.0] - 2026-08-05

### Added

- Formal visual themes for Vega-Lite through the new top-level `theme_spec`
field. Callers can select one of ten built-in presets, provide a custom
`ThemeSpec`, or inherit a preset with `extends` and override selected fields.
Nested objects merge while arrays and scalar values replace inherited values.
- The `pop` preset, a high-energy extension of Swiss with process colors,
strong structure, and chart-aware grid and heatmap treatment.
- A semantic theme-grounding system that applies layout behavior, presentation
rules, mark geometry, typography, color, labels, legends, axes, annotations,
and chart furniture as one visual system across chart types and data shapes.
- Public theme APIs: `ThemeSpec`, `ThemePreset`, `THEME_PRESETS`,
`listThemePresets()`, and `resolveThemeSpec()`.
- Theme discovery in the MCP server through `list_themes`, plus preset selection
in the interactive MCP App.
- Bundled ThemeSpec authoring guidance through the `flint://theme-skill`
resource and `author_flint_theme` prompt. Custom ThemeSpecs remain available
in the MCP App while callers compare presets, without becoming global themes.
- A public visual-theme explorer with regular grid and screenshot-friendly
scattered-poster layouts, a compact two-row banner composition, large
chart/spec previews, a complete **Using themes** guide, and
preset/custom/inherited live examples on the Flint project site.
- Theme Lab, an interactive editor for authoring a ThemeSpec and testing it
against a diverse wall of charts, with built-in Signal Studio, Microsoft
Fluent, and People's Daily examples.
- Complete English and Chinese localization for the public theme explorer,
Theme Lab, navigation, and MCP theme-authoring guidance.

### Changed

- Vega-Lite assembly now grounds the selected theme before layout and realizes
its decisions throughout compilation instead of applying a post-render style
layer. Existing inputs without `theme_spec` retain Flint's default behavior.
- Vega-Lite logarithmic axes choose readable powers-of-ten or 1/2/5 tick and
grid spacing from the transformed scale span and available pixels on either
axis. Two-position line axes suppress asymmetric endpoint guides, while
heatmaps use cell boundaries instead of redundant axis grids.

## [0.4.1] - 2026-07-27

### Changed
Expand Down Expand Up @@ -178,7 +218,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Treated only lowercase `start` and `end` Waterfall Type values as total
anchors in Vega-Lite; other values now remain floating deltas colored by sign.

[Unreleased]: https://github.com/microsoft/flint-chart/compare/0.4.1...HEAD
[Unreleased]: https://github.com/microsoft/flint-chart/compare/0.5.0...HEAD
[0.5.0]: https://github.com/microsoft/flint-chart/compare/0.4.0...0.5.0
[0.4.1]: https://github.com/microsoft/flint-chart/compare/0.4.0...0.4.1
[0.4.0]: https://github.com/microsoft/flint-chart/compare/0.3.0...0.4.0
[0.3.0]: https://github.com/microsoft/flint-chart/compare/88fbeb5ebf07f18a1cf661ebef71cc570b7425d6...0.3.0
Expand Down
126 changes: 102 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,20 @@
[![CI](https://github.com/microsoft/flint-chart/actions/workflows/ci.yml/badge.svg)](https://github.com/microsoft/flint-chart/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

**Please visit:** [**Flint Project Site**](https://microsoft.github.io/flint-chart/) | [**MCP Server Guide**](https://microsoft.github.io/flint-chart/#/mcp) | [**中文主页**](https://microsoft.github.io/flint-chart/#/zh)

Flint is a visualization intermediate language that lets **AI agents create
expressive, polished visualizations from simple, human-editable chart specs**.
Instead of asking agents or developers to tune verbose chart configuration
details such as scales, axes, spacing, labels, and layout, the Flint compiler
derives optimized chart settings from the data, semantic types, chart type, and
encodings. The result is a compact chart specification that agents can produce
reliably, people can edit directly, and multiple backends can render as native
**Please visit:** [**Flint Project Site**](https://microsoft.github.io/flint-chart/) | [**Visual Themes**](https://microsoft.github.io/flint-chart/#/themes) | [**MCP Server Guide**](https://microsoft.github.io/flint-chart/#/mcp) | [**中文主页**](https://microsoft.github.io/flint-chart/#/zh)

Flint is a visualization intermediate language that lets **AI agents turn
simple, human-editable chart specs into expressive, polished visualizations**.
Rather than requiring agents or developers to tune verbose settings for scales,
axes, spacing, labels, and layout, Flint derives those decisions from the data,
semantic types, chart type, encodings, and an optional visual theme. Users can
use a compact spec to create visually polished, brand-consistent charts rendered
as native
[Vega-Lite](https://vega.github.io/vega-lite/),
[ECharts](https://echarts.apache.org/),
[Chart.js](https://www.chartjs.org/), or
[Plotly](https://plotly.com/javascript/) specs, and native Excel charts through Office.js.
[Chart.js](https://www.chartjs.org/),
[Plotly](https://plotly.com/javascript/) specs, or as native Excel charts
through Office.js.

This repo contains two main components:

Expand All @@ -38,6 +39,9 @@ This repo contains two main components:
semantic types such as `Rank`, `Temperature`, `Price`, or `Country`.
- **Automatic layout.** Flint adapts sizing, spacing, labels, marks, and legends
to the data cardinality, chart design, and canvas constraints.
- **Formal visual themes.** Define layout behavior, semantic presentation, and
visual identity once, then apply them across a chart library with a preset,
custom `ThemeSpec`, or inherited theme.
- **Multiple backends.** Compile one input to backend-native output across
[Vega-Lite](https://vega.github.io/vega-lite/),
[ECharts](https://echarts.apache.org/),
Expand All @@ -49,6 +53,11 @@ This repo contains two main components:

## Updates

- **August 5, 2026** — Flint 0.5.0 introduces a [formal theme specification](https://microsoft.github.io/flint-chart/#/themes)
that allows designers and users to define a visual system once and apply it
consistently across an entire chart library. It includes ten presets: New
York Times, Economist, Swiss, Nature, McKinsey, Datawrapper, Power BI, Power
BI Light, Pop, and Cartoon. ([v0.5.0](https://github.com/microsoft/flint-chart/releases/tag/0.5.0))
- **July 24, 2026** — Flint 0.4.0 adds 38 Plotly chart types and 18 native,
editable Excel chart templates. ([v0.4.0](https://github.com/microsoft/flint-chart/releases/tag/0.4.0))
- **July 19, 2026** — Flint 0.3.0 adds dynamic chart widgets that switch chart
Expand Down Expand Up @@ -110,6 +119,67 @@ const plotlyFigure = assemblePlotly(input);
const excelArtifact = assembleExcel(input);
```

## Apply Visual Themes

`theme_spec` sits beside `chart_spec`: the chart spec defines what the chart
means, while the theme defines how that meaning is presented. A theme can guide
layout, labels, legends, axes, mark geometry, typography, and color as one
coherent visual system.

Use one of Flint's ten built-in presets:

```ts
const themedSpec = assembleVegaLite({
...input,
theme_spec: 'economist',
});
```

Or inherit a preset and override only the decisions that belong to your brand:

```ts
const brandedSpec = assembleVegaLite({
...input,
theme_spec: {
extends: 'economist',
id: 'our-brand',
ink: {
series: { single: '#6b3fa0' },
},
},
});
```

Nested objects merge; arrays and scalar values replace the inherited value.
ThemeSpec currently affects Vega-Lite output. Compare all presets on the
[theme explorer](https://microsoft.github.io/flint-chart/#/themes). See
[Using themes](docs/theme-spec.md) for the complete custom and inherited-theme
reference.

<p align="center">
<a href="https://microsoft.github.io/flint-chart/#/themes?theme=economist&amp;layout=banner">
<img src="docs/figs/flint-theme-economist.png" alt="Twelve charts rendered with Flint's Economist theme." width="100%">
</a>
<br>
<sub><strong>Economist</strong> — compact editorial graphics with a strong red accent.</sub>
</p>

<p align="center">
<a href="https://microsoft.github.io/flint-chart/#/themes?theme=swiss&amp;layout=banner">
<img src="docs/figs/flint-theme-swiss.png" alt="Twelve charts rendered with Flint's Swiss theme." width="100%">
</a>
<br>
<sub><strong>Swiss</strong> — typographic structure, restrained color, and a clear visual grid.</sub>
</p>

<p align="center">
<a href="https://microsoft.github.io/flint-chart/#/themes?theme=pop&amp;layout=banner">
<img src="docs/figs/flint-theme-pop.png" alt="Twelve charts rendered with Flint's Pop theme." width="100%">
</a>
<br>
<sub><strong>Pop</strong> — bold color, emphatic marks, and playful graphic contrast.</sub>
</p>

See the [API reference](docs/api-reference.md), backend references for
[Vega-Lite](docs/reference-vegalite.md), [ECharts](docs/reference-echarts.md),
[Chart.js](docs/reference-chartjs.md), [Plotly](docs/reference-plotly.md), and
Expand All @@ -128,7 +198,7 @@ For setup, start with the
includes client configuration, usage examples, and links to deeper references.

<p align="center">
<img src="docs/figs/flint-mcp-experience.png" alt="Agent chat showing Flint Chart as an MCP App with a grouped bar chart preview and chart options." width="100%">
<img src="docs/figs/flint-mcp-experience.png" alt="Agent chat showing Flint Chart as an MCP App with a grouped bar chart preview and chart options." width="720">
</p>

MCP calls let agents embed rows directly as `data.values`, or read local JSON,
Expand All @@ -140,26 +210,34 @@ use the standalone [agent skill](agent-skills/flint-chart-author/SKILL.md).
```
flint-chart/
├── packages/
│ ├── flint-js/ npm package `flint-chart` (TypeScript)
│ ├── flint-js/ npm package `flint-chart` (TypeScript)
│ │ └── src/
│ │ ├── core/ semantics, layout, decisions, shared types
│ │ ├── vegalite/ Vega-Lite backend
│ │ ├── echarts/ ECharts backend
│ │ ├── chartjs/ Chart.js backend
│ │ └── test-data/ fixtures + generators (drive tests and the gallery)
│ ├── flint-py/ Python port preview (package to be released)
│ └── flint-mcp/ npm package `flint-chart-mcp` (MCP render server)
├── site/ Vite + React demo: landing, gallery, editor, docs
├── agent-skills/ fallback copy of the MCP-served agent skill
├── shared/test-data/ JSON fixtures shared across JS + Python
└── docs/ architecture and design documents
│ │ ├── core/ semantics, themes, layout, decisions, shared types
│ │ ├── chart-types/ shared chart definitions and template metadata
│ │ ├── vegalite/ Vega-Lite backend
│ │ ├── echarts/ ECharts backend
│ │ ├── chartjs/ Chart.js backend
│ │ ├── plotly/ Plotly backend
│ │ ├── excel/ native Excel backend
│ │ ├── gallery/ gallery assembly and generated references
│ │ └── test-data/ fixtures and stress-test generators
│ ├── flint-mcp/ MCP server, MCP App UI, assets, and tests
│ └── flint-py/ Python port preview (package to be released)
├── site/ Vite + React project site, gallery, editor, and docs
├── agent-skills/ chart- and theme-authoring skills for agents
├── agents/ agent and MCP server configuration
├── shared/test-data/ JSON fixtures shared across JS and Python
├── scripts/ reference generation and theme audit tooling
├── docs/ user, API, backend, and architecture documentation
└── design-docs/ design proposals and implementation research
```

### Documentation

The [project site](https://microsoft.github.io/flint-chart/) is the main entry
point for examples, the live editor, and concept docs. For source-level
references, start with the [API reference](docs/api-reference.md), the
[theme guide](docs/theme-spec.md), the
[Flint MCP project page](https://microsoft.github.io/flint-chart/#/mcp), or the
[Development guide](docs/DEVELOPMENT.md). See the [changelog](CHANGELOG.md) for
notable changes in each release.
Expand Down
16 changes: 11 additions & 5 deletions agent-skills/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
# agent-skills/

Agent skill for **flint-chart** — teaches LLMs and IDE agents how to produce
correct, idiomatic `ChartAssemblyInput` JSON, then use it in the right
workflow: MCP rendering, project integration, or backend compilation.
Agent skills for **flint-chart** teach LLMs and IDE agents how to author
portable chart and theme specifications.

- [flint-chart-author/SKILL.md](flint-chart-author/SKILL.md) covers
`ChartAssemblyInput`, MCP rendering, project integration, and backend
compilation.
- [flint-theme-author/SKILL.md](flint-theme-author/SKILL.md) translates brand
guidelines, websites, slide decks, and publication references into reusable
custom `ThemeSpec` JSON.

## How agents should use flint-chart

Expand All @@ -24,5 +30,5 @@ When the user wants more than a spec, the skill also tells the agent how to:
- call `assembleVegaLite`, `assembleECharts`, or `assembleChartjs` in JS/TS;
- use the Python package when it is published in a later release.

See [flint-chart-author/SKILL.md](flint-chart-author/SKILL.md) for the full
contract, worked examples, and the validation checklist.
See the relevant skill for its full output contract, references, worked
examples, and validation checklist.
Loading
Loading