chartletv0.21.0chartlet.casoon.de

Changelog

Generated from CHANGELOG.md in the project repository. Never maintained twice.

0.21.0

24 October 2026

  • breakingTopic 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.
  • addedThemes: 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.
  • addedThemes: 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/.
  • addedThemes: 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.
  • addedCLI: chartlet stylesheet starts its output with /* generated by chartlet - do not edit */. Details: Formatters and linters.
  • addedSchema: chartlet-theme.schema.json for theme files, and tokens in the specification schema.
  • addedSite: the Customize page shows five ways to restyle a chart, each rendered.
  • addedSite: the showcase gains the sequence diagram sign-in-sequence, the architecture diagram tenant-architecture and a QR code, the first example of chartlet::qr.
  • changedRust: the crate declares rust-version = "1.88", which README and the installation page already stated; it builds with that version, with and without png.
  • changedSite: the showcase is grouped by topic with a jump list and shows one example per variant.

0.20.0

24 October 2026

  • addedArchitecture diagrams: views show one model as several diagrams: a view has a key, a title, a description and the components it shows, with their connections (or those listed by their new id), boundaries and main path; a dynamic view lists steps, numbered. Details: Views. Example shop-views.
  • addedArchitecture diagrams: one view is rendered — --view, view in npm and MCP, RenderOptions::view, else defaultView, else the first — never the whole model; description and table show what the view shows and how much of the model that is, and the manifest records view.
  • addedArchitecture diagrams: --all-views (allViews in npm, MCP and the Astro Chart, RenderOptions::all_views) renders every view on one HTML page without a script, with a navigation and one section per view. Details: All views on one page. Example shop-views.all.html.
  • addedArchitecture diagrams: with --all-views, the manifest lists the views in views and npm returns every view's text alternative in alternatives with alternative: true; SVG, the other variants and --view are refused (option_not_supported). Single-view exports are unchanged.
  • addedArchitecture diagrams: a view may set its own width, height and mobile in place of the model's, in ordinary and deployment views; they are checked like the model's, with diagnostics and layout warnings at the view.
  • addedArchitecture diagrams: tags on components and connections (never drawn) and include/exclude on a view select what the view shows besides its lists; what a view lists by id is always shown. Details: Views.
  • addedArchitecture diagrams: perspectives keep categorical metadata, such as the owning team, apart from the drawing: categories that list components and connections by id. Only the one selected with perspective is shown, in colors with names and a legend. Details: Perspectives. Example service-perspectives.
  • addedArchitecture diagrams: --perspective <key> (perspective in npm and MCP chartlet_render, RenderOptions::perspective, ChartSpec::with_perspective) picks the perspective at render time in every view, variant and format; the manifest records it, specHash stays that of the model.
  • addedArchitecture diagrams: a view with an environment shows where the model runs, with nested hosts, instances of components and the instanceConnections it lists; chartlet inspect counts a component run there as shown. Details: Environments and instances. Example api-environments.
  • addedArchitecture diagrams: "deriveConnections": true on a deployment view derives the instance connections from the model, to the nearest instances by shared hosts; a listed instance connection now also takes the sides it leaves out from its model connection. Details: Environments and instances.
  • addedArchitecture diagrams: provided and required interfaces: provides on a component draws each interface as a ball on a stem, and a connection with toInterface ends in a socket around it; description, table, views and hooks follow. Details: Architecture diagrams. Example payment-interfaces.
  • addedArchitecture diagrams: symbol draws one of 16 generic stroke symbols (browser, api-gateway, message-broker, …) above a component's label; the kind keeps its shape. Details: Architecture diagrams. Example shop-symbols.
  • addedArchitecture diagrams: connections[].direction — forward (default), both (arrowheads at either end) or none (no arrowhead); tooltip, description and table say which. Details: Architecture diagrams.
  • addedClass diagrams: packages frame the classes that name them with in, nested up to four deep; relations still cross package borders. Details: Class diagrams. Example shop-modules.
  • addedClass diagrams: orientation on a package lays out its classes that way, as one block; package_orientation_ignored says when it cannot. Details: Class diagrams. Example invoice-model.
  • addedClass diagrams: relations[].direction on an association — forward, both or none — says which way it can be navigated; other kinds refuse it (option_not_supported).
  • addedTrees: distances (labels and a distance matrix) instead of nodes builds a dendrogram, with linkage average (default), complete or single. Details: Dendrograms. Example climate-similarity.
  • addedNetworks: "type": "network": nodes as dots joined by edges, on a circle or in rings around a center, with groups, dash, weight and directed; no force layout, so the same input gives the same picture. Details: Networks. Examples co-authors, service-dependencies.
  • addedDiagrams: role — critical, planned or deprecated — on nodes and edges of flow, state, network, tree, class and architecture diagrams: a role color plus a sign that needs no color, named in legend, description and table. Details: Diagram fields. Examples billing-migration, payment-redesign.
  • addedDiagrams: notes on flow, class and architecture diagrams: a note on a step, class or component stands beside it, one on a package or boundary inside that frame, one without on below the diagram; none adds an edge. Description and table name them. Examples subscription-model, payment-notes.
  • addedDiagrams: mainPath of flow charts and architecture diagrams also takes { "from": "a", "to": "b" }, the shortest way between the two (main_path_unreachable when there is none).
  • addedDiagrams: weight on a flow edge or architecture connection draws its line from 1 px to 5 px for the heaviest; description and table give every weight. Example request-volume.
  • addedDiagrams: sameRank in flow charts and architecture diagrams puts sets of steps or components at one position along the flow, such as parallel reviews; a layout hint that adds no edge. Example data-tier.
  • addedDiagrams: fromSide and toSide on a flow edge or architecture connection pin the side it leaves and reaches, named after the flow so that they hold in either orientation. Details: Port sides. Example contract-review.
  • addedDiagrams: "sharedTrunks": true in flow charts and architecture diagrams draws edges that leave or reach one node together on one branching line, where they read the same; each is still listed. Examples service-fan-out, order-fulfilment.
  • addedDiagrams: spacing — compact, normal (default) or roomy — scales the gaps of flow, state, class and architecture diagrams. Details: Spacing.
  • addedDiagrams: value on a node of a flow chart or tree fills its box from a scale of six blues, with a key named by valueLabel and text that keeps 4.5:1 contrast. Example department-budgets.
  • addedDiagrams: parts on a node of a flow chart or tree draws a stripe of shares at the bottom of its box, with one legend for the diagram. Example claim-handling.
  • addedInteraction: with hooks: true, diagrams carry their ids for a page script — data-chartlet-node, data-chartlet-edge, data-chartlet-frame and data-chartlet-lane. Details: The hooks.
  • addedCLI: chartlet inspect checks architecture, flow and class diagrams for gaps in their documentation without rendering, as text or --format json, with --disable and --strict; in Rust inspect_json. Details: Inspections.
  • addedCLI: chartlet render --watch renders again whenever the file changes, and --preview serves the latest chart on a local page that reloads. Details: Watching and preview.
  • addednpm: @casoon/chartlet/builder builds architecture and flow specifications in code (component, node, connect, fanOut, chain, …) and throws at the call on a wrong id. Details: Architecture builder. order-flow and release-flow rebuild with it byte for byte.
  • addednpm: inspectChart(spec, { disable }) runs the inspections of chartlet inspect without the CLI and returns { ok, findings } or { ok: false, error }.
  • addedMCP: chartlet_inspect returns the findings of chartlet inspect with code, severity, path, message and hint.
  • addedMCP: chartlet_diagram_starter takes template with type: "architecture" — context, containers or deployment — each a valid specification with the question it answers. Examples booking-context, booking-containers, booking-deployment.
  • addedDocs: the architecture guide maps system, container, component and deployment node onto chartlet and says where the starters stop short of a complete architecture model. Details: Context, containers and deployment.
  • changedDiagrams: the description of flow charts, architecture and class diagrams names the shape of the graph before the steps — the most connected nodes, loops, unconnected parts, bottlenecks — where that says more than the steps. Details: Graph structure.
  • changednpm: the WebAssembly module is about 34 KB smaller (700 KB to 666 KB gzip): chartlet finds the JSON Pointer of a specification error itself and no longer depends on serde_path_to_error. Error codes, paths and messages are unchanged.
  • changedContributors: cargo test --test golden visual_report -- --ignored writes a local HTML report of every reviewed example against its current rendering, without ever accepting a change. Details: CONTRIBUTING.md.
  • changedContributors: tests/generated.rs renders flow charts, architecture diagrams, trees and networks from fixed seeds and checks that each renders the same twice as well-formed SVG.
  • fixedArchitecture diagrams: in a deployment view, text_too_long for an instance label over 60 characters points to the instance's id, not to a label field instances do not have, and says to shorten the id or the component's label.
  • fixedTrees: a distance matrix with a short row is refused with invalid_matrix at that row instead of stopping the render.
  • fixedDiagrams: in flow charts, architecture and class diagrams, a layer that lists a step between the members of a group no longer keeps that order; the frame took the step in, or pushed frames apart until the canvas grew many times its width.
  • fixedLine charts: lower and upper on a point without a value are refused with invalid_bounds instead of stopping the render.
  • fixedSchema: line charts with several series, small multiples of bars and fractional values on a numeric time axis validate against schema/chartlet.schema.json, as the compiler accepted them.

0.19.0

12 October 2026

  • addedArchitecture diagrams: connections[].step (1–99) numbers a connection in a sequence of calls (2. places the order); the description lists the steps in order. Example checkout-calls.
  • addedArchitecture diagrams: the component kinds node (a machine or cluster node) and artifact (something deployed on it) make deployment diagrams, with boundaries as the hosts. Example shop-deployment.
  • addedTrees: "layout": "radial" draws a mind map: the root in the middle, every level on a ring, each subtree in a sector by its share of the leaves. Details: Trees. Example product-strategy.
  • addedDiagrams: theme: "blueprint" draws sequence, flow, state, architecture, tree and class diagrams in pale lines on a deep blue ground; other charts refuse it (option_not_supported).
  • addedScatter plots: quadrants divides the plot at an x and a y value into four named areas, such as an impact and effort matrix; description and table name the area of every point. Details: Scatter plots. Example feature-priorities, with a phone variant.
  • fixedScatter plots: description and table named a regression line even without regression: true; now only when it is drawn. In German, the count of points above a reference line reads „N Punkt(e) darüber“.

0.18.0

12 October 2026

  • addedTrees: collapsed on a node draws it without what hangs below it, with a +n for the nodes left out; description and table still list every node (nothing_to_collapse warns when nothing hangs below).
  • addedTimelines: timezone also takes about 55 common IANA names such as Europe/Berlin, with the daylight saving rules in force today. Details: Timelines.
  • changedText alternative: small multiples open with “Time chart in 3 panels …” and “Bar chart in 2 panels …” instead of “Small multiples of …” (German: „Zeitreihe in 3 Feldern …“), singular for one; several bands read “Lines have a shaded band from their lower to their upper bound”.
  • changedText alternative: English output spells “modelled” (legend, tooltips, description, table); the field modeled and the CSS class chartlet-line-modeled stay as they are.
  • changedText alternative: equal ends are named once (“x at 3”, “for 2020”, “on 3 Mar 2026”); a German scatter description says „von … bis …“, and Kaplan-Meier groups say “1 event” / „1 Ereignis“.

0.17.0

11 October 2026

  • addedClass diagrams: "type": "classes" for class and entity-relationship diagrams: classes with stereotype, attributes and methods, joined by six kinds of relations with UML marks and cardinalities. Details: Class and entity diagrams. Examples order-model, shop-schema.
  • addedTimelines: a summary phase takes rollup, the ids of the phases it sums up, and shows their progress weighted by length.
  • addedSankey diagrams: "back": true on a link marks a flow back to an earlier column, drawn as a loop under the diagram (link_not_back when it does not lead back). Example water-cycle.
  • changedTimelines: arrows between rows turn where no bar or diamond of the rows between them stands, instead of running through it.

0.16.0

11 October 2026

  • addedBar and line charts: a series of a grouped bar chart or an unstacked line chart takes lower and upper arrays for error bars, with tooltips and an interval column per series. Example satisfaction-by-quarter, with a phone variant.
  • addedTimelines: timezone (UTC or a fixed offset such as +02:00) sets the zone the days and the shaded weekends are read and written in.

0.15.0

11 October 2026

  • addedBox plots: group on every box colors the boxes of a group alike (up to four), with a legend and a Group column; for boxes, violins and strips. Example latency-by-region, with a phone variant.
  • addedTimelines: "weekends": true shades Saturdays and Sundays while the axis spans at most 120 days; a longer axis warns with weekends_hidden.

0.14.0

10 October 2026

  • addedBox plots: "showMean": true marks the mean of each box with a diamond and adds a Mean column; added to the example response-distribution.
  • addedBox plots: "violinScale": "area" gives every violin the same area and "count" an area by its number of observations, so widths compare between violins.
  • addedTimelines: progress (0 to 1) on a phase draws that share of its bar darker, and groupRows puts the rows of a group together; progress added to the example product-roadmap.
  • addedScatter plots: xTicks puts named labels on the x axis (chromosomes of a Manhattan plot), and xRange/yRange fix the ends of an axis. Example genome-scan, with a phone variant.
  • addedSurvival curves: with logRank and two groups, the description adds the hazard ratio of the second group with its 95 % interval, checked against an independent implementation.

0.13.0

10 October 2026

  • addedFlow charts: two presets as examples, each with a phone variant: study-selection (a PRISMA 2020 flow) and court-instances (an Instanzenzug in German); neither is a type of its own.
  • addedLine charts: a line chart of one series takes error bars, lower and upper on every point. Example monthly-satisfaction, with a phone variant.
  • addedScatter plots: "regression": true draws a least-squares line per group, and xScale/yScale set logarithmic axes. Example allometry, with a phone variant.
  • addedSurvival curves: "logRank": true runs the log-rank test of two to four groups, with the p value in the plot and the statistic in the description; added to the example overall-survival.
  • addedSankey diagrams: nodes pins a node to a column and a palette color, and "order": "listed" keeps the listed order (column_too_early when links lead past the column). Example voter-movement, with a phone variant.
  • addedTreemaps: an item may have children instead of a value, nested up to three levels and drawn as frames. Details: Treemaps. Example budget-by-sector, with a phone variant.

0.12.2

6 October 2026

  • fixedSankey diagrams: nodes take the palette colors in turn instead of all taking the color of the first source, and neighbouring nodes in a column are swapped where that lets fewer bands cross.
  • fixedSite: the showcase follows the site's theme: a chart on a dark site uses chartlet's dark palette.

0.12.0

6 October 2026

  • addedRange bars: forest plots: a weight on a span (a square whose area follows it), "summary": true (a diamond) and references (the line of no effect); value labels keep off the lines. Details: Forest plots. Example trial-effects, with a phone variant.
  • addedBox plots: "boxDisplay": "violin" or "strip" draws the observations as a density or as points; every box needs values (values_required). Details: Box plots. Example response-distribution, with a phone variant.
  • addedTimelines: "type": "timeline" for Gantt charts, roadmaps and procedures: phases, milestones, marker lines, groups and dependencies (after) drawn as arrows. Details: Timelines. Example product-roadmap, with a phone variant.
  • addedScatter plots: "type": "scatter", up to 5000 points in up to four groups, with reference lines and named points, for volcano and Manhattan plots. Details: Scatter plots. Example gene-expression, with a phone variant.
  • addedSurvival curves: "type": "survival", Kaplan-Meier curves of up to four groups with censoring ticks, an optional 95 % band and the number at risk. Details: Survival curves. Example overall-survival, with a phone variant.
  • addedSankey diagrams: "type": "sankey", up to 100 links between up to 40 nodes in columns, ordered to cross little; cycles, self links and duplicates are refused. Details: Sankey diagrams. Example energy-flow, with a phone variant.
  • addedTreemaps: "type": "treemap", up to 100 items as rectangles by value, in up to four groups with a legend. Details: Treemaps. Example budget-by-department, with a phone variant.
  • addedParliament charts: "type": "parliament", the seats of an assembly in a semicircle by party, with the majority line and a ringed coalition. Details: Parliament charts. Example election-result, with a phone variant.
  • addedWaffle charts: "type": "waffle", up to four parts as squares by the largest remainder, and the rest of a larger total. Details: Waffle charts. Example energy-sources, with a phone variant.
  • addedWaterfalls: "type": "waterfall", a running total with starts, deltas and checked totals, vertical or horizontal. Details: Waterfalls. Example revenue-to-profit, with a phone variant.
  • changedRange bars: the range bar style gains two rules, so range bar charts differ in their style block.

0.11.0

5 October 2026

  • addedBar charts: lower and upper on every point of a bar chart without groups draw error bars; the value label moves beyond the bar and the table gains an Interval column. Example satisfaction-scores.
  • addedBox plots: "type": "boxplot", one box per category, computed from values or drawn from the five numbers and outliers, vertical or horizontal. Details: Box plots. Example response-times, with a phone variant.
  • fixedSequence diagrams: a diagram up to 600 pixels wide takes the compact layout, so that a mobile variant that grows keeps its layout.
  • fixedDiagrams: a diagram that asks for a larger canvas (canvas_too_small) asks for a size at which it raises no further warning; the size for an edge label past the last layer, or a self-message of the last participant, grew with every attempt.

0.10.0

5 October 2026

  • addedBar charts: group on the points of a single-series bar chart gives every group a palette color and a legend entry (at most 4), and the table a Group column.
  • addedBar charts: small multiples of bars: multiples with categories, and in every pane values and a valueAxis of its own, for measures in different units. Examples benefit-and-harm, framework-benchmarks (with a phone variant).
  • changedValue axis: a logarithmic axis ends at the next 1, 2 or 5 times a power of ten instead of the next power of ten: values up to 13.75 give an axis to 20, not 100. The examples with a logarithmic axis changed.
  • changednpm: the WebAssembly renderer is 18 % smaller (1276 KB / 478 KB gzip to 1044 KB / 409 KB gzip) with the same output: the layouts share one sort routine, and the build is optimized for size (opt-level = "z", wasm-opt -Oz) at about 15 % more render time (1.3 ms instead of 1.15 ms).
  • changednpm: npm run build:wasm prints the size of the module.
  • fixedSequence diagrams: a message of the last participant to itself finds room: its label wraps and the canvas grows on the right (canvas_too_small) instead of text_truncated.
  • fixedDiagrams: in architecture and flow diagrams, an edge label beyond the last layer widens the canvas with canvas_too_small instead of running out of the picture.
  • fixedDiagrams: in architecture and flow diagrams, the label of an edge that runs back from a diamond stays at its edge, and a frame is as wide as its own name instead of shortening it.
  • fixedBar charts: on horizontal bars, a value label that a reference line would run through moves to the far side of the line.
  • fixedTime charts: a value label that would run into the previous one of its layer is left out with value_labels_omitted, as with bars; under --strict such a chart now fails.
  • fixedRange bars: a span with low equal to high is labeled with the one value (3, not 3 to 3).

0.9.0

5 October 2026

  • addedArchitecture diagrams: example tenant-architecture, with phone and print variants.
  • addedSequence diagrams: example sign-in-sequence, with phone and print variants.
  • addedTrees: "type": "tree" for organization charts, ownership structures and family trees: nodes naming their parent, an optional link label such as a share, node kind and partner for couples. Details: Trees. Examples ownership-structure, family-tree.
  • changedFlow charts: lanes leave a little room before their first and after their last step, so diagrams with lanes come out slightly longer.
  • changedDiagrams: sequence and architecture diagrams are no longer experimental; flow and state diagrams stay experimental.
  • fixedSequence diagrams: a participant's name is no longer shortened when its column has room; boxes are a pixel wider where that happened.
  • fixedSequence diagrams: on a narrow canvas, message labels may reach over neighbouring lifelines and wrap, and boxes and gaps are tighter (five participants in about 400 pixels instead of 480); a frame grows to hold its label.
  • fixedDiagrams: in architecture and flow diagrams, edges that leave a step side by side no longer cross, a label of a shared port stands under its own stretch, labels keep off group frames in portrait, and a person's head sits inside its box.
  • fixedDiagrams: in architecture and flow diagrams, a step's name and an edge's technology are no longer shortened on a narrow canvas.

0.8.0

3 October 2026

  • addedArchitecture diagrams: "type": "architecture": components in eight kinds with their own shapes, connections with a label and a technology, and boundaries nested up to four deep that keep outside components out of their frame. Details: Architecture diagrams. Example shop-architecture.
  • addedArchitecture diagrams: the component kind security, a shield in a new red role color.
  • addedFlow charts: "type": "flow", laid out in layers along the flow: steps in eight kinds, edges, cycles drawn back, lanes, groups and a main path kept in line. Details: Flow charts. Examples release-flow, order-flow.
  • addedState diagrams: "type": "state" on the layout of flow charts, with transitions written event [guard] / action, a table row per transition and the warning unreachable_state. Details: State diagrams. Example ticket-states.
  • addedState diagrams: composite states ("kind": "composite", other states lie "in" it), drawn as frames.
  • addedSequence diagrams: "type": "sequence": participants in five kinds, calls, replies and asynchronous messages, activation bars, numbering and nested fragments. Details: Sequence diagrams. Examples cache-lookup, async-export.
  • addedDiagrams: orientation draws a diagram in portrait or landscape; auto picks the one that fits the canvas, or the one that grows it less, again for a mobile variant. A canvas too small grows, with canvas_too_small.
  • addedDiagrams: edge labels of flow, state and architecture diagrams are drawn above all edges and stack instead of covering each other; a node that only receives from or sends into a frame stands after or before it.
  • addedDiagrams: below 480 pixels, as in mobile variants, diagrams are compact: smaller margins and gaps, narrower steps, names on two lines instead of shortened, labels wrapped and kept on the page; a numbered message's label rises above its badge.
  • addedDiagrams: one look for all types: a role color per kind (CSS custom properties --chartlet-role-*), soft shadows, rounded corners, labels on chips and message numbers in badges.
  • addedInteraction: focus without a script: in the HTML profile, a click on a diagram's node or a choice in the "Focus" radio list keeps the node, its neighbours and the edges between them and fades the rest; the SVG stays an image.
  • addedMCP: chartlet_diagram_starter returns a valid starting specification per diagram type, and chartlet_explain gives a diagram's element counts and table rows; both need @casoon/chartlet with the diagram types.
  • fixedRendering: the social variant scales a chart down into its frame when the chart was drawn larger than the size it was laid out for.

0.7.1

2 October 2026

  • fixedAll charts: a plot keeps at least 40 pixels of height and reports dense_chart instead of turning upside down on a small chart.
  • fixedBar charts: the value label of a short negative horizontal bar no longer runs into the category labels; its category leaves out its value labels (value_labels_omitted).
  • fixedBar charts: stacked bar charts use a declared valueAxis.step, which they ignored.
  • fixedBar and line charts: labels_thinned names /data for charts with data, and its message reads "one category in n".
  • fixedValue axis: a declared valueAxis.step gives at most 50 ticks (an exact axis at least 2), and timeAxis.step 1 to 50; a tiny step could hang the renderer.
  • fixedTime charts: a time axis counts the ticks a step places and spaces them by the plot's real width, so a narrow chart no longer ends up with a single tick and times of day get their room.
  • fixedTime charts: a low pane labels only the value ticks that stand a label's height apart; its gridlines stay.
  • fixedTime charts: tooltips and the description write a value axis unit after the values, and an unnamed layer's table column carries it.
  • fixedTime charts: the value-axis gutter grows past 72 pixels where long labels need it (up to 40 % of the chart); small multiples measure their gutter the same way and shorten or drop a unit without room.
  • fixedTime charts: 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.
  • fixedTime charts: stepEnd after trailing missing values no longer draws over the gap.
  • fixedTime charts: a declared coarser timeAxis.precision no longer removes ticks within a day.
  • fixedTime charts: a sparkline refuses valueAxis.unit, valueAxis.step and timeAxis.step, which need axes.
  • fixedCalendars: a calendar reports cells smaller than 4 pixels.
  • fixedRange bars: the legend of range bar groups wraps instead of running off a narrow chart.
  • fixedRendering: PNG output warns with glyph_missing about characters its fonts have no glyph for.
  • fixedRendering: a PNG of a chart without a mobile variant fails with missing_mobile, like the SVG.

0.7.0

2 October 2026

  • addedTime charts: valueAxis.unit writes the unit after the top tick label and in the table's column names, instead of a title above the plot; also in small multiples.
  • changedTime charts: the value-axis gutter is as wide as the 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.

0.6.0

2 October 2026

  • addedTime charts: timeAxis.min and timeAxis.max extend the time axis, such as to a round year before the first observation.
  • addedTime charts: "stroke": "medium", a two-pixel line for small panels.
  • changedTime charts: a compact time chart (below 320 pixels) makes its value-axis gutter as wide as its widest tick label needs.
  • changedTime charts: without a drawn title, legend or value axis title above the first pane, the plot starts near the top instead of keeping the title's room free.
  • fixedRendering: PNG output draws semibold text semibold: the bundled semibold faces join the Inter family, so titles, values and emphasized notes no longer fall back to regular.

0.5.0

2 October 2026

  • addedAll charts: charts from 160 pixels tall, mobile variants too, for small panels.
  • addedTime charts: timeAxis.step, the distance between time ticks — whole years on a calendar axis, units on a numeric one.
  • addedSmall multiples: noteEmphasis sets a panel's note apart, in the text color and semibold.
  • addedRendering: PNG of the mobile variant (--variant mobile --format png), with the literal colors of the print variant.
  • fixedTime charts: a time tick label that would run into the one before it is left out; its gridline stays.

0.4.0

2 October 2026

  • addedAll charts: compact charts from 200 pixels wide, mobile variants too: below 320 pixels the value-axis gutter and the margin are narrower, so a panel keeps its text size.
  • addedTime charts: stepEnd on step lines, where the last step ends without an observation of its own.
  • addedSmall multiples: panes[].note, a short finding under a panel title.
  • changedTime charts: a declared timeAxis.precision changes how times are named, no longer the tick spacing.
  • changedSmall multiples: panel titles take two lines before they are shortened.

0.3.0

2 October 2026

  • addedTime 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 a fine helper line adds no decimals to the others); a table row is as fine as its finest layer with a value.
  • addedTime charts: markers: false on a line or area layer, such as a fitted line; its tooltips stay on invisible targets.
  • addedTime charts: a stacked pane takes up to eight area layers.
  • changedValue axis: 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.
  • fixedValue axis: 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.
  • fixedRange bars: 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.

0.2.0

2 October 2026

  • addedValue axis: step sets the tick interval and exact keeps min and max as the ends.
  • addedTime charts: "mark": "point" draws a dot per observation and no line.
  • addedTime charts: "stack": "normal" on a pane stacks its area layers; the crosshair of the interactive module places stacked values on top of the stack.
  • addedTime charts: "tooltips": "markers" keeps tooltips on drawn markers only, so dense lines stay small.
  • addedTime charts: months ("2026-03") as times, and timeAxis.precision (year, month, day, minute) for how tooltips, table and description write times.
  • addedRange bars: group per range, in a palette color with a legend entry per group.
  • addedRendering: the shared stylesheet in parts: stylesheet_common() and stylesheet_types(), stylesheet({ types: [] }) and stylesheet({ types, common: false }), and chartlet stylesheet --common and --no-common.
  • changedAll charts: charts narrower than 480 pixels draw their title at 18 pixels.
  • changedBar and line charts: more than 16 categories whose labels do not fit on a horizontal axis label every n-th category, with the room of n bands, and warn labels_thinned.
  • changedRendering: the shared stylesheet groups its rules type by type; the common part comes first, and a type's part styles only charts of that type.
  • fixedTime charts: the markers of the first series in a chart with several layers take its palette color.
  • fixedRange bars: a horizontal range bar chart keeps room for its last tick label.

0.1.0

1 October 2026

  • addedBar charts: stack: "normal" (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.
  • addedLine charts: categories and series, each series with its own color and line pattern.
  • addedValue axis: min and max, thousandsSeparator, scale: "log" and reverse.
  • addedTime charts: timeAxis.kind: "number" for profiles and deep time, timeAxis.reverse, curve: "step", legend: "end" (names at the end of the lines) and sparkline: true.
  • addedTime charts: zones with a single edge, and layer colors as var(--name, #hex) whose fallback the print variant draws.
  • addedSmall multiples: independentAxes gives every panel its own value axis; mobile.columns.
  • addedStripes: stretch: true draws a band of color that takes any box.
  • addedText alternative: alternative: true and chartlet::text_alternative return the description and the data table as data.
  • addedInteraction: hooks: true and the optional module @casoon/chartlet/interactive: crosshair with values, series toggles, scroll stations and playback, reading only the static output.
  • addedRendering: --variant print (literal colors for PDF and print renderers) and --variant social (1200 × 630 for Open Graph images).
  • addedRendering: PNG output behind the optional cargo feature png, with Inter bundled (OFL-1.1).
  • addedRendering: styles: "external" with the shared stylesheet @casoon/chartlet/chartlet.css (chartlet stylesheet [--types …]), so a page with many charts loads their CSS once.
  • addedRendering: allowWarnings / --allow-warning lets reviewed warning codes through strict mode.
  • addedRendering: the HTML figure carries data-viz="chart" and marks its data table as the text layer.
  • addedMCP: @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.
  • changedValue axis: a line, time series or range bar whose values are all zero or more gets no margin below zero.
  • changedTime charts: one tooltip rule for lines and candles: a tooltip for every observation while they stand at least 4 pixels apart, on an invisible target where no marker is drawn.
  • changedTime charts: candle colors differ in lightness as well as in hue.
  • changedTopic maps: topic maps and knowledge landscapes are marked experimental.
  • changedRendering: German output writes dates as 31.08.2026; a range bar chart is a „Spannweitendiagramm“, a realm of a knowledge landscape a „Bereich“.
  • changedRendering: print and social variants write font-weight: 600, which renderers outside the browser read.
  • changednpm: the package renders with its bundled WebAssembly build; a CLI is used only with binary or CHARTLET_BIN.