Changelog
Every version of the web SDK we've published, newest first. RSS
0.1.2 3 November 2026
Fixes found building demos on 0.1.1: charts' hover, signatures, required marks, fonts an app didn't ask for, and a map without WebGL.
- A chart's hover shows as meant: a faint band behind the column, a dashed
crosshair on line charts, dots in each line's colour, and a layer the
pointer passes through. Their names lacked the
ms-prefix the stylesheet uses, so the band drew as a solid black block over the bar, the crosshair didn't show, the dots were black and the layer caught the pointer. - An app that sets its own faces (
--ms-font,--ms-mono) no longer downloads IBM Plex: the SDK warmed the Plex files when the core loaded, whatever the theme said: Plex Sans and Plex Mono, 60 KB on an English page, for nothing. Now each answer warms only the faces its own styles name, so with the app's faces, on:rootor scoped to a chat, nothing is fetched fromdist/fonts. - A tab's underline keeps to its label's width when the face arrives after the answer drew, and an answer is styled again then, so widths in the font's own units follow the face in Firefox.
- A signature drawn on the pad is sent with its form, as a PNG
Fileunder<name>-drawing; before, only the typed name was read, so a signed pad arrived as an empty string. - Every required field shows the required mark (
*), as a Signature's already did and the SwiftUI and Compose SDKs do; Input, TextArea, Select, Date, File and the rest had none. - A form's files appear in
core.actionMessageby name and type ("id.pdf (application/pdf)") instead of{}. - A map keeps the core's drawn map when the live one can't start: without WebGL (switched off, or a machine without it) MapLibre fails, and the figure was left as an empty box.
0.1.1 29 October 2026
Open source under the Apache License 2.0, at https://github.com/morphscreen/morphscreen. Fixes from building an app with nothing but the public docs, and from two demos in a chat widget's width.
destroy()empties the element it drew into, as the docs say, so an answer drawn there again (a repaired one) no longer stacks under the old.core.actionMessage()works withmorphscreen.wasmtoo, not only the agent build.- A vote's action carries the poll's
questionand its message names it; a quiz's carries itstitle; a form's carries each field's label inlabels, and its message lists the fields by label. <Answer>in React takesonComponentState,stateandonOps, so an answer can be saved and drawn again as the reader left it.- An app's own
:root { --ms-... }after the stylesheet wins in dark mode too, and--ms-numeric: normalturns the tabular figures off. - A quoted value reads
",',<,>and&the way HTML does. morphscreen-page.cssis exported; the package ships types only for what it exports, and its stylesheet without our own notes (17.4 KB brotli, from 23.7).- In a chat widget's width, a comparison's feature names wrap so its options fit side by side. A table still wider than its box fades out on the side there's more to see, and a comparison keeps its feature names in place as it scrolls.
--ms-primaryand--ms-primary-ink(primaryandprimaryInkin a theme file) colour primary buttons, a chosen time slot and the open tab, so they can take your brand colour. They're ink until you set them, and themes without them keep their look, in SwiftUI and Compose too.- A time slot keeps its label on one line; longer labels get wider columns.
- Buttons inside an app's own component look like buttons, and come to it as
actionstoo ({ label, ask, variant }) for an app that draws its own. - An app's own component whose content is a list, a table, pictures or code
gets it in
htmlandtext; before, onlyanycontent arrived. - An empty line in a code block keeps its height, so the line numbers no longer sit on each other.
0.1.0 28 October 2026
The first public beta.
- The WASM core reads an answer as it streams, checks every line against the components the app allows, and draws it with plain DOM or React 18+.
- 75 components in nine packs; an app's own components as custom packs.
The app's function draws one as soon as it opens, from its attributes
(
streaming: true), then again when it's complete, with its content as HTML (its own words, then buttons that ask) and its words as text. - New words fade in as an answer streams; nothing moves under reduced motion.
connectAgentfor agents that speak AG-UI 1.0, with the agent build of the core.- Themes from a W3C Design Tokens file (
@morphscreen/web/theme). - Pictures only from the hosts an app lists, map tiles only from its own provider key; the SDK sends nothing of its own.
- Installs and draws with npm, pnpm, Yarn (PnP and node_modules) and bun, under Vite, Next.js (App Router), webpack, Angular, Nuxt and SvelteKit.