Two guards protect the core promise: a route with no islands emits no assets at all, and a page with several islands keeps React in one shared chunk. buildIslands now writes a generated entry per island instead of passing component sources directly. Two islands sharing a source deduped to a single entrypoint, and output order is not guaranteed to match input order, so island names could bind to the wrong bundle. Island modules are excluded from the editor compiler bundle: it globs packages/compiler/src, and island-bundle.ts calls Bun.build while island-codegen.ts imports @wrnexus/core — neither belongs in a Node-only VS Code artifact. Integration assertions share one build. bun test interferes with Bun.build's module reads after several build calls in one process, while the same calls succeed repeatedly outside the runner; production is unaffected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@wrnexus/react
Opt-in React islands for WRNexusJS: mount npm React components inside server-rendered .wrn pages without adopting React as the framework's rendering model.
Import a .tsx component in a .wrn script block and use it as an element. The compiler emits a data-wrn-island placeholder instead of a server render, and this package's runtime mounts it in the browser with createRoot. Islands are client-only, each mounts inside its own error boundary, and roots are disposed on client-side navigation.
react and react-dom are optional peer dependencies, so apps that use no islands ship no React. A route with no islands still ships zero framework JavaScript.
Use useWrnStore(name, selector?) to read a WRNexus store from inside an island and useWrnActions(name) to write to it. Writes belong in event handlers or effects, never during render.