Skip to content

Releases

chartlet 0.21.0

Choose a tag to compare

@casoon casoon released this 24 Oct 17:56

Breaking

  • Topic map and knowledge landscape: the experimental types topicmap and atlas are gone,
    with their blocks, the area picker of the HTML figure, their example files, the stylesheet part
    and their warnings. A specification with either type is refused with invalid_spec.

Added

  • Themes: tokens in a specification set single colors of the palette by the name of the
    --chartlet-* custom property without its prefix; they reach the print and social variants and
    PNG. Details: Customize the look.
  • Themes: a theme file of your own colors is applied to any number of specifications with
    --theme <name|file>, the theme option of @casoon/chartlet and <Chart>, the theme input
    of chartlet_render and chartlet::apply_theme. light, dark and blueprint ship as such
    files in themes/.
  • Themes: a color set in tokens that lies on another with less contrast than WCAG 2.2 asks for is
    reported as low_contrast at the token. Details: Contrast.
  • CLI: chartlet stylesheet starts its output with /* generated by chartlet - do not edit */.
    Details: Formatters and linters.
  • Schema: chartlet-theme.schema.json for theme files, and tokens in the specification schema.
  • Site: the Customize page shows five ways to restyle a chart, each rendered.
  • Site: the showcase gains the sequence diagram sign-in-sequence, the architecture diagram
    tenant-architecture and a QR code, the first example of chartlet::qr.

Changed

  • Rust: the crate declares rust-version = "1.88", which README and the installation page already
    stated; it builds with that version, with and without png.
  • Site: the showcase is grouped by topic with a jump list and shows one example per variant.

Full changelog: https://casoon.github.io/chartlet/changelog/

0.8.0

Choose a tag to compare

@casoon casoon released this 03 Oct 13:37

chartlet 0.8.0

chartlet 0.7.1

Choose a tag to compare

@casoon casoon released this 02 Oct 14:06

Fixes only, from a render sweep across sizes, languages and variants and three code reviews of
0.7.0. Specifications that rendered with 0.7.0 still render, except a declared axis step that
would give more than 50 ticks (or none), which is now refused instead of drawing an unreadable or
endless axis.

Fixed

  • A time axis counts the ticks a step actually places instead of estimating them, and spaces its
    ticks by the width its plot actually has: a narrow chart no longer ends up with a single tick,
    and labels with a time of day get the room they need.
  • A low pane of a time chart labels only the value ticks that stand a label's height apart; its
    gridlines stay.
  • The value label of a short negative horizontal bar no longer runs into the category labels;
    its category leaves out its value labels instead (value_labels_omitted).
  • PNG output warns with glyph_missing about characters its fonts have no glyph for.
  • A declared valueAxis.step must give at most 50 ticks (an exact axis at least 2), and a
    declared timeAxis.step 1 to 50; a tiny step could draw millions and hang the renderer.
    Stacked bar charts now use a declared valueAxis.step, which they ignored.
  • Tooltips and the description write a value axis unit after the values.
  • A plot keeps at least 40 pixels of height and reports dense_chart instead of turning upside
    down on a small chart; a calendar reports cells smaller than 4 pixels.
  • The value-axis gutter of time charts grows past 72 pixels where long labels, such as a value
    with its unit, need it (up to 40 % of the chart); small multiples measure their panel gutter
    the same way, report labels that do not fit, and shorten or leave out a unit that has no room.
  • Zoom windows show their own span: timeAxis.min, max and step apply to the whole axis
    only, and stepEnd only to a window that holds the last observation.
  • stepEnd after trailing missing values no longer draws over the gap.
  • A declared coarser timeAxis.precision no longer removes ticks within a day.
  • An unnamed layer's data table column carries the value axis unit.
  • The legend of range bar groups wraps instead of running off a narrow chart.
  • A sparkline refuses valueAxis.unit, valueAxis.step and timeAxis.step, which need axes.
  • A PNG of a chart without a mobile variant fails with missing_mobile, like the SVG.
  • labels_thinned names /data for charts with data, and its message reads "one category in
    n".

chartlet 0.7.0

Choose a tag to compare

@casoon casoon released this 02 Oct 11:29

Wider plots for time charts and a unit at the top tick. The specification keeps
schemaVersion: 1; every specification that rendered with 0.6.0 still renders, with the
changes in output listed under Changed.

Added

  • Time charts and small multiples: valueAxis.unit, the unit after the top tick label and the
    data table's column names, instead of a title above the plot.

Changed

  • Every time chart makes its value-axis gutter as wide as its widest tick label needs, at most
    the former 72 pixels, so the plot is wider; time tick labels at the left edge move inward like
    those at the right edge.

chartlet 0.6.0

Choose a tag to compare

@casoon casoon released this 02 Oct 10:07

Small panels, continued, and semibold text in PNG output. The specification keeps
schemaVersion: 1; every specification that rendered with 0.5.0 still renders, with the
changes in output listed under Changed and Fixed.

Added

  • Time charts: timeAxis.min and timeAxis.max extend the time axis to a position such as a
    round year before the first observation.
  • Time charts: "stroke": "medium", a two-pixel line for small panels.

Changed

  • A compact time chart (below 320 pixels) makes its value-axis gutter as wide as its widest
    tick label needs.
  • A time chart with neither a drawn title, a legend nor a value axis title above its first pane
    starts its plot near the top instead of keeping the title's room free.

Fixed

  • PNG output draws semibold text semibold: the bundled semibold faces join the Inter family, so
    titles, axis titles, values and emphasized notes no longer fall back to the regular weight.

chartlet 0.5.0

Choose a tag to compare

@casoon casoon released this 02 Oct 09:03

Small panels and their ticks. The specification keeps schemaVersion: 1; every specification
that rendered with 0.4.0 still renders, with the changes in output listed under Fixed.

Added

  • Time charts: timeAxis.step, the distance between time ticks — whole years on a calendar
    axis, units on a numeric one.
  • Small multiples: noteEmphasis sets a panel's note apart, in the text color and semibold.
  • Charts from 160 pixels tall (mobile variants too), for small panels.
  • PNG of the mobile variant: --variant mobile --format png, with the literal colors of the
    print variant.

Fixed

  • A time tick label that would run into the one before it is left out; its gridline stays.

chartlet 0.4.0

Choose a tag to compare

@casoon casoon released this 02 Oct 08:02

Compact charts, panel notes and step ends. The specification keeps schemaVersion: 1; every
specification that rendered with 0.3.0 still renders, with the changes in output listed under
Changed.

Added

  • Compact charts from 200 pixels wide (mobile variants too): below 320 pixels the value-axis
    gutter and the margin are narrower, so a panel rendered at its width keeps its text size.
  • Small multiples: panes[].note, a short finding under a panel title.
  • Step lines: stepEnd, where the last step ends without an observation of its own.

Changed

  • Small-multiples panel titles take two lines before they are shortened.
  • A declared timeAxis.precision changes how times are named, no longer the tick spacing.

chartlet 0.3.0

Choose a tag to compare

@casoon casoon released this 02 Oct 06:53

Fixes and additions from moving a large site to 0.2.0. The specification keeps
schemaVersion: 1; every specification that rendered with 0.2.0 still renders, with the changes
in output listed under Changed and Fixed.

Added

  • Time charts: precision per data layer, and every layer writes its times as finely as its
    own observations need — yearly means beside monthly values say only the year, and on a
    numeric axis a finely spaced helper line no longer adds decimals to the other layers. A table
    row is labelled as finely as the finest layer with a value there.
  • Time charts: markers: false on a line or area layer, such as a fitted line; its tooltips
    stay on invisible targets.
  • A stacked pane takes up to eight area layers.

Changed

  • An exact value axis puts its ticks on multiples of the step, with the zero line:
    −2.5 to 3.5 with step 1 ticks −2, −1, 0 … 3.

Fixed

  • A horizontal value axis labels only the ticks whose labels fit, so the wide labels of a
    logarithmic axis no longer run into each other.
  • A horizontal range bar chart measures its value labels with the fallback reserve, so the
    label at the right end is no longer cut off.

chartlet 0.2.0

Choose a tag to compare

@casoon casoon released this 02 Oct 05:23

Adds stacked areas, points and range groups, exact value axes and the stylesheet in parts. The
specification keeps schemaVersion: 1; every specification that rendered with 0.1.0 still
renders, with the changes in output listed under Changed and Fixed.

Added

  • Time charts: "mark": "point" draws a dot per observation and no line, as in a scatter plot.
  • Time charts: "stack": "normal" on a pane stacks its area layers; the crosshair of the
    interactive module places stacked values on top of the stack.
  • Time charts: "tooltips": "markers" keeps tooltips on drawn markers only, so dense lines stay
    small.
  • Time charts: months ("2026-03") as times, and timeAxis.precision (year, month, day,
    minute) for how tooltips, the table and the description write times.
  • Range bars: group per range, drawn in a palette color with a legend entry per group.
  • Value axis: step sets the tick interval and exact keeps min and max as the ends.
  • The shared stylesheet in parts: stylesheet_common() and stylesheet_types(),
    stylesheet({ types: [] }) and stylesheet({ types, common: false }), chartlet stylesheet --common and --no-common. The common part comes first; a type's part styles only charts of
    that type.

Changed

  • More than 16 categories on a horizontal axis whose labels do not fit: every n-th category is
    labelled, with the room of n bands, and the warning labels_thinned.
  • Charts narrower than 480 pixels draw their title at 18 pixels.
  • In the shared stylesheet, each type's rules now come together, type by type.

Fixed

  • The markers of the first series in a time chart with several layers take its palette color.
  • A horizontal range bar chart keeps room for its last tick label.

chartlet 0.1.0

Choose a tag to compare

@casoon casoon released this 01 Oct 17:29

The first release without the alpha tag. The specification keeps schemaVersion: 1; every
specification that rendered with 0.1.0-alpha.7 still renders, with the changes in output listed
under Changed.

Added

  • Bar charts: stack: "normal" (by value, with the total beyond each stack) and stack: "percent"
    (shares of each category's total); patterns: true draws every other series as an outline;
    references draws reference lines such as an average or a target.
  • Line charts take categories and series; each series has its own color and line pattern.
  • Value axis: min and max, thousandsSeparator, scale: "log" and reverse.
  • Time charts: timeAxis.kind: "number" for profiles and deep time, timeAxis.reverse,
    curve: "step", legend: "end" (names at the end of the lines), sparkline: true, zones with
    a single edge, and layer colors as var(--name, #hex) whose fallback the print variant draws.
  • Small multiples: independentAxes gives every panel its own value axis; mobile.columns.
  • Stripes: stretch: true draws a band of color that takes any box.
  • Variants: --variant print (literal colors for PDF and print renderers) and --variant social
    (1200 × 630 for Open Graph images).
  • PNG output behind the optional cargo feature png, with Inter bundled (OFL-1.1).
  • styles: "external" with the shared stylesheet @casoon/chartlet/chartlet.css
    (chartlet stylesheet [--types …]), so a page with many charts loads their CSS once.
  • alternative: true and chartlet::text_alternative: the description and the data table as data.
  • allowWarnings / --allow-warning: strict mode lets reviewed warning codes through.
  • hooks: true and the optional module @casoon/chartlet/interactive: crosshair with values,
    series toggles, scroll stations and playback, reading only the static output.
  • The HTML figure carries data-viz="chart" and marks its data table as the text layer.
  • @casoon/chartlet-mcp: tools named chartlet_*, CHARTLET_MCP_ROOT confining outputPath,
    and a view that shows the chart in the chat of hosts that support MCP Apps.

Changed

  • A line, time series or range bar whose values are all zero or more gets no margin below zero.
  • One tooltip rule for lines and candles: a tooltip for every observation while observations
    stand at least 4 pixels apart, on an invisible target where no marker is drawn.
  • Candle colors differ in lightness as well as in hue.
  • German output writes dates as 31.08.2026; a range bar chart is a „Spannweitendiagramm“, a
    realm of a knowledge landscape a „Bereich“.
  • Print and social variants write font-weight: 600, which renderers outside the browser read.
  • Topic maps and knowledge landscapes are marked experimental.
  • The npm package renders with its bundled WebAssembly build; a CLI is used only with binary
    or CHARTLET_BIN.