Releases

Alle veröffentlichten Flow-Releases mit ihren Highlights, Migrationshinweisen und den enthaltenen Fixes. Wie du ein Update einspielst, beschreibt Upgrades.

1.2.0 Hints that point at the right control, and bars in the chart
Minor

21 September 2026 - npm - GitHub Release

Highlights

  • CoachMark is a new overlay that points at a control on its own — for a feature that is new, moved or easy to miss. It leaves the page usable and can be anchored by id, so an mStudio extension can place one (#3166).
  • CartesianChart.Bar adds bar series, stacked or grouped, plus a layout prop that turns the chart on its side for horizontal bars (#2880).
  • Badge takes a ContextualHelp directly — no trigger to write, no button to style (#3049).
  • Heading places a Button or CopyButton written in its content beside the text, scaled to the heading (#3136).
  • List.Item gets a dependencies prop so a stable render function can declare the external state it reads (#3139).
  • Every popover now keeps a gap to the viewport edge, and a width you set reaches the content instead of leaving empty background beside it.

CoachMark

A coach mark points at a control the user did not ask about. It opens on its own and stays out of the way: the page below keeps scrolling, focus is left alone, and the hint rides along with its anchor instead of closing at the first scroll. Write it directly behind the element it points at — it then follows that element in the reading order, and the anchor refers to it through aria-details.

Anchor it with anchorRef where you have a ref, or with anchor where you do not. An mStudio extension renders in a different context than the host, so a ref never arrives, but an id does — the coach mark keeps looking until that element appears, which matters because the host materializes the page in pieces.

The component is remote-capable and marked beta.

Dismissal is composed, not configured: wrap the button in an Action — Flow never closes an overlay on your behalf.

A coach mark anchored to a button, pointing at it with a tip; the page text stays readable behind it

Bars in CartesianChart

CartesianChart.Bar renders a bar series. Give several bars the same stackId to stack them; leave it off to group them side by side. Bars pick up the categorical color scale and round their outer corners.

The chart's new layout prop decides which axis is the categorical one. "horizontal" (the default) keeps bars growing upwards; "vertical" turns the chart on its side. XAxis and YAxis follow the layout on their own — only the dataKey moves to whichever axis is the categorical one.

Grouped bars, stacked bars via stackId, and horizontal bars via layout="vertical"

Bar is remote-capable.

Contextual help in a Badge

Write a ContextualHelp into a Badge and the badge supplies the trigger button itself, colored and sized to match:

A badge with an info trigger after its value, its contextual help open below

A ContextualHelpTrigger you write out yourself lands in the same place and is styled the same way, so you keep control of the trigger when you need it.

Buttons in a Heading

A Button or CopyButton written in a heading's content is now placed beside the heading text and scaled to the heading's size — m for the two largest sizes, s below.

A heading with a copy button beside it, and a longer heading with a badge and an edit button inline

Declaring what a list item reads

A List.Item re-renders when its data changes, or when one of its render functions changes identity — which a function written inline in JSX does on every render. A render function with a stable identity (hoisted out of the component, wrapped in useCallback, or reading from an external store) gave the item no signal at all, so it kept the values it first saw. dependencies is how you give it one:

A /tunnel entry point

@mittwald/flow-react-components/tunnel re-exports the @mittwald/react-tunnel API through the very module instance Flow uses. The tunnel's context is module-level, so a consumer's own dependency on @mittwald/react-tunnel becomes a second context as soon as the versions diverge, and entries stop finding Flow's providers. Import from this entry point instead of from the package directly (#3176).

Fixes

  • 1.2.6 – components: compile the browser tests' base styles from source (#2320245)
  • 1.2.5 – Tooltip: hide a tooltip that never got positioned (#81c1aff)
  • 1.2.4 – Combine: keep a text and its small button in the line (#c524c72)
  • 1.2.4 – drop the contextual-help docs example and the Combine comment (#4bec742)
  • 1.2.4 – update visual regression screenshots (#71c3c92)
  • 1.2.3 – ci: poll for created preview services and upsert the preview comment (#b685268)
  • 1.2.3 – CoachMark: play the closing animation instead of vanishing (#75d9bda)
  • 1.2.3 – docs: align header and footer with the content width (#98a5efc)
  • 1.2.3 – remote-dom-demo: unbreak the chart demo page and type-check the app in CI (#c96579a)
  • 1.2.3 – release: reserve inline code for what the reader types (#7efaf7b)
  • 1.2.2 – components: invalidate build:icons when the icon source changes (#9978fa1)
  • 1.2.2 – releases: scale the release-note figures to their capture scale (#13c62be)
  • 1.2.1 – Tabs: keep collapsed tab titles out of the scrollable overflow (#7595357)

1.1.0 Upgrade across Flow versions with one command
Minor

31 August 2026 - npm - GitHub Release

Highlights

  • npx @mittwald/flow-codemods@latest upgrade bumps every Flow dependency, installs, and runs the codemods for the range it crossed.
  • The new @mittwald/flow-codemods package carries the migration catalogue that MIGRATION.md is generated from — 23 entries, each carrying a codemod where the change can be applied mechanically.
  • flow-codemods list <revision> shows what a target version would touch before you commit to it.
  • Rating takes a segment count (maxValue), single-segment filling (fill="single"), and individual RatingSegment children with their own icons and labels.
  • @mittwald/flow-react-components now ships USAGE.md and a JSON component index, so a coding agent can answer component questions without the docs site.

The upgrade CLI

Upgrading Flow used to mean reading MIGRATION.md, deciding which entries applied to your jump, and running codemods one at a time. The new @mittwald/flow-codemods package does that for you.

upgrade detects your package manager, refuses to run on a dirty working tree (--allow-dirty overrides), and reports every file it declined. --dry writes nothing, --print shows the transformed output, and --json makes list machine-readable.

The catalogue is the single source for both the CLI and MIGRATION.md: an entry describes what changed and how to migrate, and carries a codemod when the change can be decided mechanically. Entries without one still tell you what to do by hand — for those, the prose is the migration.

Rating: segment count, single fill, individual segments

Rating gained maxValue (default 5) for the number of segments, and fill="single" to fill only the selected segment instead of every segment up to it.

For a scale whose segments are not interchangeable, pass RatingSegment children — they define how many segments there are (maxValue no longer applies) and each one takes its own icons and accessible label.

Both the component and RatingSegment work in mStudio extensions.

Rating: a ten-segment scale, single-segment filling, and individual RatingSegment children

Documentation a coding agent can read

@mittwald/flow-react-components now ships its own consumer guide, and the docs site is published in machine-readable form.

  • USAGE.md, shipped inside the package: how to build an application with Flow — component selection, layout and spacing, what is safe to depend on, and the mistakes that come up most. Available offline, which is what makes it usable from an agent's tool loop.
  • @mittwald/flow-react-components/component-index — a JSON index of every public component with its lifecycle status and props.
  • The docs site at https://flow.mittwald.de serves /llms.txt, /llms.json, /llms-full.txt, and every page as Markdown at /raw/<path>.md.

Point your agent at USAGE.md and the component index; it stops guessing component names and props.

Fixes

  • 1.1.53 – icons: drop the trailing separator from an icon's class attribute (#8a48c83)
  • 1.1.52 – SectionHeader: render links in size "m" (#2151330)
  • 1.1.51 – Popover: keep a gap to the viewport edge on a narrow screen (#e607168)
  • 1.1.51 – run every suite on Dependabot PRs and deploy their review apps (#baf1ad5)
  • 1.1.50 – Overlay: size the backdrop to the viewport, not the document (#7eb1589)
  • 1.1.49 – Notification: keep the notification inside narrow viewports (#e35fc7a)
  • 1.1.48 – Popover: report the open state instead of taking it over (#0524e54)
  • 1.1.47 – core: stop writing failure screenshots next to tests (#544e90d)
  • 1.1.47 – publish: stop the two release lines publishing to npm at once (#68c0fe7)
  • 1.1.46 – deps-dev: bump vite-plugin-sass-dts from 1.3.37 to 1.3.39 in the dev-patch group (#22e3d6c)
  • 1.1.45 – deps: bump cronstrue from 3.24.0 to 3.25.0 in the production group (#fd25656)
  • 1.1.44 – codemods: stop migrations breaking asset imports and skipping the password-tools rule (#3fa8963)
  • 1.1.44 – load every package's AGENTS.md automatically (#a3bff5a)
  • 1.1.43 – AGENTS: turn "Common failures" into a list (#6ebf406)
  • 1.1.43 – ImageCropper: gate the custom error view scenario on 1.1.41 (#f2fa142)
  • 1.1.43 – deps-dev: bump the dev-minor group with 11 updates (#7348ed6)
  • 1.1.42 – deps: bump the production group across 1 directory with 19 updates (#443a3bc)
  • 1.1.41 – icons: inline the Tabler icon path data instead of depending on @tabler/icons-react (#11be0f2)
  • 1.1.40 – components: keep overlay trigger buttons inside their trigger (#7210212)
  • 1.1.39 – components: keep field values controlled from the first render (#16c6981)
  • 1.1.39 – unbreak the Storybook preview and clear the build, test and dev-server warnings (#6024c9f)
  • 1.1.38 – MessageThread: restore list markers for ordered lists (#11ad06c)
  • 1.1.37 – codemods: order the unit tests after the remote-components generator (#d9fa5ba)
  • 1.1.36 – Image: keep sizing from style when no size props are given (#abfc5a6)
  • 1.1.35 – deps-dev: bump the dev-patch group across 1 directory with 8 updates (#4b8a593)
  • 1.1.34 – Markdown: clip striped table cells to the rounded corners (#a1ade85)
  • 1.1.33 – deps-dev: bump the dev-minor group with 4 updates (#7e666d1)
  • 1.1.32 – Activity: stop a deactivated subtree leaving its overlays on screen (#a6c613b)
  • 1.1.31 – Option: stop every option landing in the collection twice (#f6a8d84)
  • 1.1.30 – ci: render every commit type in the changelog (#8f28777)
  • 1.1.29 – PasswordCreationField: update to stable v3 (#8c56d85)
  • 1.1.28 – codemods: wrap bare function references passed to onAction (#bb98f3c)
  • 1.1.26 – components: prefix the CSS properties Safari needs prefixed (#8b3536c)
  • 1.1.25 – NotificationProvider: keep notifications interactive over an open overlay (#07ea00d)
  • 1.1.23 – ci: rebase the release commit when the line moved during publish (#4afbadb)
  • 1.1.21 – Markdown: forward the react-markdown options it accepts (#953cb55)
  • 1.1.21 – Navigation: keep the badge in the item's line and truncate the label (#825bcbc)
  • 1.1.20 – Option: infer textValue from mixed children and keep value stable (#e80bf3c)
  • 1.1.19 – Tabs: keep the tab selection controlled from the first render (#dd29fa5)
  • 1.1.18 – ListItem: render linked items as real anchors (#de6dc0a)
  • 1.1.17 – Button: treat a string label like a Text child (#13cc756)
  • 1.1.17 – ci: read preview TLS certificate IDs from secrets, not vars (#9e331e3)
  • 1.1.17 – components: keep tests and stories out of the published types (#bf947d9)
  • 1.1.17 – Tunnel: render tunnelled children in the first commit (#09db004)
  • 1.1.12 – retry a hung visual shard on the label and scheduled visual runs (#8913802)
  • 1.1.10 – Link: prevent text selection on icon element (#9f3160b)
  • 1.1.9 – codemods: colour the upgrade by-hand list and print summaries last (#a91daf3)
  • 1.1.9 – List: let items follow the state they are rendered from (#40e0401)
  • 1.1.7 – docs: stop repeating the version as the release headline (#df09a68)
  • 1.1.6 – codemods: install with the project's real package manager (#63875ae)
  • 1.1.5 – docs: drop the classic JSX transform debug props from live examples (fixes #3017) (#64abb32)
  • 1.1.4 – Heading: space tunneled content without :has() (#97022ee)
  • 1.1.3 – codemods: the SegmentedControl -> RadioGroup direction is a rename (#0832a67)
  • 1.1.2 – codemods: say that action -> onAction changes the callback type (#9a52148)
  • 1.1.2 – Tabs: forward aria-label to the tab list (#cad04b6)
  • 1.1.1 – codemods: compile the transforms so a consumer install can load them (#50f8075)

1.0.0 Semantic Versioning is a promise now, not an intention
Major

26 August 2026 - npm - GitHub Release

Highlights

  • 1.0.0 carries no breaking change over 0.2.0-alpha.1058. Coming from the last alpha, the upgrade is a version bump and nothing else.
  • Semantic Versioning is binding from here on: an incompatible change to the runtime public API only ever ships in a new major (ADR 0005, RFC #2711).
  • Deprecate, don't break — an API that is going away stays functional and warns at runtime first. That warning is your lead time before the next major.
  • Every @mittwald/flow-* package keeps sharing one version, so the promise reads identically for all of them, @mittwald/flow-remote-react-components included.
  • Deliberately not covered, so the design system can keep moving: TypeScript types, CSS class names, design tokens, and the internal DOM structure.
  • New docs page under Get Started walks through what the release means per audience and how to catch up from an older alpha.

Deprecations

Nothing is newly deprecated in 1.0.0. What changed is the removal date: every path deprecated during the alpha keeps working and now disappears at 2.0.0, not before.

  • AlignCombine (#2871)
  • SegmentedControl / SegmentTabs (switching content) or RadioGroup (setting a value) (#2903) — not mechanical, the replacement is a decision per usage
  • The global flags object → ComponentDefaultsProvider, which also works per subtree (#2796)
  • Button / SubmitButton: color="accent"color="success" (#2874)
  • Action: actiononAction

What the version number now guarantees

An incompatible change to any of these only appears in a new major: the runtime public API of public.ts (which components and exports exist, which props they accept, and the documented behaviour of documented functions), the props of the components in @mittwald/flow-remote-react-components, published icons, and the versioned remote protocol.

Node and React are runtime requirements with explicit rules. The Node floor is the actively supported LTS — currently node >=24 — and dropping a version still inside its LTS window is breaking, while dropping an already-EOL one may ship in a minor. Widening the accepted React range is backwards compatible; raising the minimum is breaking.

TypeScript types stay best-effort and are not covered, so a tsc error can in theory appear in a patch. If that would be expensive for your project, pin exact versions instead of ^ ranges. A deliberate type break still ships a migration note.

One override exists: a component's lifecycle status. A Beta component is exempt from the breaking-change promise while its API is still moving; Stable is the default and fully bound; Deprecated stays covered until it is removed in a major.

What it means for mStudio extensions

The props of the components in @mittwald/flow-remote-react-components are the contract with extension developers and carry the same promise as the React components. The remote protocol is versioned and negotiated when the connection is established, so an extension built against an older Flow keeps running when the mStudio host updates.

@mittwald/ext-bridge shares the version but has its own migration guide and a stricter Node rule: for that package, any raise of the Node floor is a breaking change, regardless of EOL, and its floor may be more conservative than the rest. Since the alpha it requires node >=24 and narrows its React peer range to ^19.2.0. Declared context parameters are typed and optional config values are never null any more, so reading config.containerId no longer needs a runtime narrow (#2889).

Migrations

From 0.2.0-alpha.1058 there is nothing to do. Coming from an older alpha, the work sits between the alphas, not in 1.0.0, and none of it is a prerequisite — the old paths still work in 1.x.

Every change that needs an adjustment in your code has a before/after entry in the migration guide of the package it affects:

Entries are sorted by version, newest first. Find the version you are coming from and work upwards. The oldest 0.2.0-alpha entry is the jump to 0.2.0-alpha.646, so from anything around 0.2.0-alpha.600 the guides are complete.

How to work through them — and the codemod CLI that automates part of it — is on Upgrades.

Fixes

  • 1.0.16 – components: stop shipping design-token build metadata to the browser (#7d3afde)
  • 1.0.13 – Modal: keep the heading text next to its icon (#9ff2cae)
  • 1.0.10 – ci: docs- and CI-only merges no longer publish through package.json or the lockfile (#09bda96)
  • 1.0.10 – docs: stop the footer from overflowing on narrow screens (#3e3b9c1)
  • 1.0.9 – ci: version-contract guard no longer reads a first publish as a tightening (#cc7b2ba)
  • 1.0.9 – Form: stop a Modal's form submit from reaching the surrounding Form (#ee9b60a)
  • 1.0.8 – FileField: open the file dialog inside a link row (#b77a14c)
  • 1.0.7 – ci: merge driver no longer reverts release version bumps (#5624853)
  • 1.0.7 – Table: will not render in remote (#22929f4)
  • 1.0.6 – docs: hide deprecated values from the properties table (#eaa0349)
  • 1.0.5 – docs: show full prop types in the properties table (#2c42ad5)
  • 1.0.3 – ci: enable automatic review environments for other target branches too (#6102d2e)
  • 1.0.3 – CodeBlock: balance the padding and unify the editor line colors (#6bf57c7)
  • 1.0.3 – docs: remove 1.0.0 release reveal easter egg (#419e17f)
  • 1.0.2 – Remote: serialization allows duplicate object references (#ac3ef26)
  • 1.0.1 – Breadcrumb: fix cursor pointer for spans with role link (#d44d61c)
  • 1.0.1 – ci: build after the version bump so bundles carry the published version (#c24c5ef)

Auf dieser Seite