@playspace/react changelog
Semantic versioning, independent of the API version. 1.x targets /v1.
1.2.0 — 2026-08-14
Added
<ContentStudio />— every generation surface behind one tabbed interface.useUsage(), so a host can warn on quota in its own chrome.colorSchemeontheme, defaulting tosystem.
Fixed
- A theme change re-created the iframe
src, remounting the frame and destroying in-progress work. Theme is now delivered over the message channel and onlybaseUrl,token,surfaceand the surface's own identity prop rebuild the source. role_not_permittedfired twice in React development mode because the double-invoke was not deduplicated. Every error code now carries a dedupe key;network_errordeliberately does not, since a second transport failure is new information.
1.1.0 — 2026-08-06
Added
<Dollhouse />,<Whiteboard />,<GameLibrary />and<Game />.<WorksheetCanvas />and<FormFill />.usePlaySpace().open()and.close()for clinician-driven navigation from your own chrome.
Changed
- Breaking. Declaration files import
JSXfromreactrather than relying on the global namespace, which React 19 removed. No runtime change, but a consumer on React 19 previously failed to type-check. - The minimum sandtray viewport now renders an "enlarge the window" notice instead of a clipped, unplayable tray.
1.0.0 — 2026-08-12
First stable release.
Breaking, from 0.9
-
<PlaySpaceProvider>takesfetchTokenrather thantoken. A statictokenprop still works but does not renew, and is documented for short-lived contexts only.// before <PlaySpaceProvider token={token} /> // after <PlaySpaceProvider fetchToken={() => fetch('/api/playspace/token').then(r => r.text())} />This is the single most valuable change in the package. A fifteen-minute token on a page a clinician leaves open will strand them mid-task, and silent renewal is what makes a lifetime that short tolerable.
-
onEventreceives a discriminated{ type, payload }rather than positional arguments.
Added
- The fixed error taxonomy on
onError. <StorybookLibrary />,<PlayStudio />,<ModelStudio />.- Server-component safety: the package no longer touches
windowat module scope, so importing it from a server component does not throw.
0.9.0 — 2026-07-30
Beta. <PlaySpaceProvider>, <Sandtray />, <StorybookCreator />, <StorybookReader />, usePlaySpace().
0.1.0 — 2026-06-18
First preview. Storybook create and reader only, over @playspace/embed.