Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions .tegami/2026-11-02-set-only-property-read.md

This file was deleted.

20 changes: 0 additions & 20 deletions .tegami/2026-11-02-vite-previewer.md

This file was deleted.

18 changes: 0 additions & 18 deletions .tegami/2026-11-02-webgl-modules.md

This file was deleted.

10 changes: 6 additions & 4 deletions .tegami/publish-lock.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
core:changelogs:
- content: "---\npackages:\n upm:com.reactunity.core:\n type: patch\n npm:@reactunity/renderer:\n type: patch\n---\n\n### `new URL(path, base)` accepts a URL object as the base\n\n`URL` only took a string base, so passing a `URL` instance threw `no overload method matched for\nURL.constructor` on QuickJS and a missing-constructor error on ClearScript. Jint already accepted\nit. react-router 8.3.1 resolves every `navigate()` target against `history.createURL('/')`, so every\n`useNavigate` call failed on those two engines. A `URL` base now resolves the same way as its `href`.\n"
filename: 2026-11-02-url-object-base.md
- content: "---\npackages:\n npm:@reactunity/renderer:\n type: minor\n npm:@reactunity/scripts:\n type: patch\n---\n\n### The Vite preset has a previewer\n\n`reactUnity()` from `@reactunity/renderer/vite` now serves the previewer at `/previewer/` on the dev\nserver. The previewer is a hosted Unity WebGL player that runs your app in the browser, with no\nEditor open, and Vite's hot reload applies edits to it as you save. The dev server prints its address\nnext to `Local:`. Opening the dev server's root in a browser now redirects there, instead of failing\nwith `Globals is not defined`.\n\nA WebGL build of your own scene in `public/previewer/` is served in its place. Pass\n`previewer: false` to turn the page off.\n\nThe previewer build is new in this release, and the `react-unity-scripts` dev server loads it too.\n"
filename: 2026-11-02-vite-previewer.md
v: 0.0.0
core:packages:
- id: npm:@reactunity/monorepo
Expand All @@ -10,10 +10,12 @@ core:packages:
- id: npm:@reactunity/material
updated: true
- changelogIds:
- 2026-11-02-url-object-base.md
- 2026-11-02-vite-previewer.md
id: npm:@reactunity/renderer
updated: true
- id: npm:@reactunity/scripts
- changelogIds:
- 2026-11-02-vite-previewer.md
id: npm:@reactunity/scripts
updated: true
npm:packages:
- id: npm:@reactunity/monorepo
Expand Down
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,47 @@
## 0.27.0

### CSS hot updates work with Vite 8.3

`com.reactunity.core`, `com.reactunity.quickjs`

Vite 8.3 skips an unchanged stylesheet by reading `style.textContent` before it writes it, and the
`<style>` proxy only had a setter. Every CSS hot update failed with `property getter is null` on
QuickJS and a missing getter on ClearScript, and on Jint the stylesheet was rewritten every time.
`textContent` and `styleSheet.cssText` now read back the stylesheet text.

On QuickJS, reading any set-only C# property also threw `property getter is null`. It now reads as
`undefined`, the way a JavaScript accessor without a getter does.

### The Vite preset has a previewer

`@reactunity/renderer`, `@reactunity/scripts`

`reactUnity()` from `@reactunity/renderer/vite` now serves the previewer at `/previewer/` on the dev
server. The previewer is a hosted Unity WebGL player that runs your app in the browser, with no
Editor open, and Vite's hot reload applies edits to it as you save. The dev server prints its address
next to `Local:`. Opening the dev server's root in a browser now redirects there, instead of failing
with `Globals is not defined`.

A WebGL build of your own scene in `public/previewer/` is served in its place. Pass
`previewer: false` to turn the page off.

The previewer build is new in this release, and the `react-unity-scripts` dev server loads it too.

### ES modules load on WebGL

`com.reactunity.quickjs`

On WebGL, every `import` failed with an empty `failed to load module graph:` error. The module name
normalizer called an Emscripten `_memcpy` that Unity's WebGL toolchain does not expose to plugin
code. With that fixed, three more things a Vite dev server sends now work:

- A top-level name bound by destructuring, such as Vite's `const { HTMLElement = class {} } = globalThis`,
is no longer declared a second time as a host global.
- A host global used only inside a template substitution or a destructuring default is now available
to the module.
- A module can import its own namespace, which Vite 8's React refresh adds to every module. Other
circular imports are still refused on WebGL.

## 0.26.1

### `new URL(path, base)` accepts a URL object as the base
Expand Down
2 changes: 1 addition & 1 deletion packages/create/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@reactunity/create",
"version": "0.26.1",
"version": "0.27.0",
"description": "Scaffold a ReactUnity app using npm init",
"license": "MIT",
"//type": "ESM, as of the chalk 6 / commander 15 upgrade: both dropped CommonJS. index.ts is emitted next to itself as ESM, so `bin` keeps pointing at index.js.",
Expand Down
4 changes: 2 additions & 2 deletions packages/create/scaffold/Packages/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"dependencies": {
"com.reactunity.core": "0.26.1",
"com.reactunity.quickjs": "0.26.1",
"com.reactunity.core": "0.27.0",
"com.reactunity.quickjs": "0.27.0",
"com.unity.ai.navigation": "2.0.14",
"com.unity.editorcoroutines": "1.1.0",
"com.unity.ide.visualstudio": "2.0.26",
Expand Down
4 changes: 2 additions & 2 deletions packages/create/scaffold/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
"lint": "react-unity-scripts lint"
},
"dependencies": {
"@reactunity/renderer": "^0.26.1",
"@reactunity/renderer": "^0.27.0",
"react": "^19.1.0"
},
"devDependencies": {
"@reactunity/scripts": "^0.26.1",
"@reactunity/scripts": "^0.27.0",
"typescript": "^5.8.3"
}
}
2 changes: 1 addition & 1 deletion packages/material/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@reactunity/material",
"version": "0.26.1",
"version": "0.27.0",
"description": "Material Design components and utilities for React Unity",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down
15 changes: 15 additions & 0 deletions packages/renderer/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## @reactunity/renderer@0.27.0

### The Vite preset has a previewer

`reactUnity()` from `@reactunity/renderer/vite` now serves the previewer at `/previewer/` on the dev
server. The previewer is a hosted Unity WebGL player that runs your app in the browser, with no
Editor open, and Vite's hot reload applies edits to it as you save. The dev server prints its address
next to `Local:`. Opening the dev server's root in a browser now redirects there, instead of failing
with `Globals is not defined`.

A WebGL build of your own scene in `public/previewer/` is served in its place. Pass
`previewer: false` to turn the page off.

The previewer build is new in this release, and the `react-unity-scripts` dev server loads it too.

## @reactunity/renderer@0.26.1

### `new URL(path, base)` accepts a URL object as the base
Expand Down
2 changes: 1 addition & 1 deletion packages/renderer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@reactunity/renderer",
"version": "0.26.1",
"version": "0.27.0",
"description": "React renderer for Unity3D",
"types": "dist/index.d.ts",
"typings": "dist/index.d.ts",
Expand Down
15 changes: 15 additions & 0 deletions packages/scripts/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## @reactunity/scripts@0.27.0

### The Vite preset has a previewer

`reactUnity()` from `@reactunity/renderer/vite` now serves the previewer at `/previewer/` on the dev
server. The previewer is a hosted Unity WebGL player that runs your app in the browser, with no
Editor open, and Vite's hot reload applies edits to it as you save. The dev server prints its address
next to `Local:`. Opening the dev server's root in a browser now redirects there, instead of failing
with `Globals is not defined`.

A WebGL build of your own scene in `public/previewer/` is served in its place. Pass
`previewer: false` to turn the page off.

The previewer build is new in this release, and the `react-unity-scripts` dev server loads it too.

## @reactunity/scripts@0.24.0

### The browser previewer
Expand Down
2 changes: 1 addition & 1 deletion packages/scripts/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@reactunity/scripts",
"version": "0.26.1",
"version": "0.27.0",
"description": "Configuration and scripts for React Unity.",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion unity/clearscript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"url": "https://github.com/KurtGokhan"
},
"displayName": "React Unity ClearScript",
"version": "0.26.1",
"version": "0.27.0",
"unity": "2019.4",
"description": "ClearScript (V8) Plugin for ReactUnity",
"keywords": ["ReactUnity", "ClearScript", "V8"],
Expand Down
2 changes: 1 addition & 1 deletion unity/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"url": "https://github.com/KurtGokhan"
},
"displayName": "React Unity",
"version": "0.26.1",
"version": "0.27.0",
"unity": "2021.3",
"description": "React renderer for Unity",
"keywords": ["React", "Framework", "UI", "UGUI", "UIToolkit"],
Expand Down
2 changes: 1 addition & 1 deletion unity/jint/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"url": "https://github.com/KurtGokhan"
},
"displayName": "React Unity Jint",
"version": "0.26.1",
"version": "0.27.0",
"unity": "2019.4",
"description": "Jint Plugin for ReactUnity",
"keywords": ["ReactUnity", "Jint"],
Expand Down
2 changes: 1 addition & 1 deletion unity/quickjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"url": "https://github.com/KurtGokhan"
},
"displayName": "React Unity QuickJS",
"version": "0.26.1",
"version": "0.27.0",
"unity": "2019.4",
"description": "QuickJS Plugin for ReactUnity",
"keywords": ["ReactUnity", "QuickJS"],
Expand Down