Changes in version 0.1.0 (2026-09-23) - Initial CRAN release. shinyreact is the server-side plumbing for the ui.tsx pattern: the UI is a React client you own, and the Shiny server contains only reactive computation. It ships no UI components. - Dependencies of traditional Shiny outputs hosted inside a React tree are discovered automatically and pushed to the client after each flush, so the ShinyOutput component works with zero configuration. - Bookmark restore values reach the client through the #shinyreact-config script tag, and the client asserts the wire-protocol major version at boot. - page_react() serves www/ui.js (and www/ui.css, if present) as the whole page, with no HTML file required. page_react_html() serves a complete index.html that you own, page_bare() builds a page with no Bootstrap, and page_react_dep() wraps an app's own bundle as an htmlDependency() versioned by its mtime. - reactive_output() publishes any JSON-serializable value to the client's useShinyOutputValue() hook, with no UI placeholder. - send_message() sends a custom message to the client's useShinyMessageHandler() hook, namespaced to the current module. - shinyreact.default and shinyreact.asis input handlers give R and Python the same view of the JSON a useShinyInput() hook sends: records stay lists, [] stays list(), and nested arrays keep their shape. - wire_tap() reads the websocket payloads a shinytest2 AppDriver recorded, so tests can assert the exact inputs, outputs, and messages that crossed the wire.