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
14 changes: 0 additions & 14 deletions .tegami/2026-08-18-7c4e19.md

This file was deleted.

12 changes: 0 additions & 12 deletions .tegami/2026-08-18-b93d05.md

This file was deleted.

12 changes: 0 additions & 12 deletions .tegami/2026-08-18-e4a71c.md

This file was deleted.

32 changes: 14 additions & 18 deletions .tegami/publish-lock.yaml
Original file line number Diff line number Diff line change
@@ -1,35 +1,31 @@
core:changelogs:
- content: "---\npackages:\n npm:@reactunity/renderer:\n type: patch\n---\n\n### Fix gradients rendering too dark in gamma colour space\n\nEvery gradient — `linear-gradient`, `radial-gradient`, `conic-gradient` and their repeating forms — had its colours converted to linear space regardless of the project's colour space. A gamma-space project never converts them back, so the whole ramp came out darkened by a 2.2 exponent: CSS `green` painted as `rgb(0,55,0)` rather than `rgb(0,128,0)`, and `linear-gradient(red, blue)` crossed at `rgb(54,0,55)` rather than `rgb(127,0,128)`. Saturated endpoints survived while everything between them sank toward black.\n\nThe ramp is stored in a texture flagged linear and its contents have to agree with that flag, so the conversion is right in a linear-space project and stays. It now follows `QualitySettings.activeColorSpace` instead of applying unconditionally. Gamma-space projects again match what a browser paints for the same CSS declaration, to the byte.\n\nIntroduced in 0.23.0. Projects on Linear colour space were never affected, and need no changes.\n"
filename: 2026-07-28-9c4e2b.md
- content: "---\npackages:\n npm:@reactunity/create:\n type: patch\n---\n\n### Refresh the scaffold's prebuilt bundle, and keep it refreshed\n\nA scaffolded project renders `Assets/Resources/react/index.js` on first open, before the user has run a build. That bundle was webpack output from April 2024 carrying React 18.2, sitting in a project whose `package.json` asked for React 19. Nothing in the repo could catch it: generated output that nothing regenerates is invisible until someone scaffolds a project and looks at it.\n\n`scripts/create/refresh-scaffold.mts` rebuilds it from the scaffold's own app, in a temp copy so the shipped template never gains a `node_modules`, and a nightly workflow opens a PR when the result moves. Because the rebuild resolves the app's dependency ranges fresh, it also catches breakage arriving from upstream rather than only from a ReactUnity release. `--check` reports drift without writing, for use as a gate.\n\nIt verifies that the build still emits exactly the asset set the scaffold has `.meta` files for. A sourcemap or a hashed chunk would otherwise land in a user's project unimported, and anything that stopped being emitted would leave an orphan `.meta` behind.\n\nThe scaffold project itself moved to Unity 6000.5.5f1, matching the sample ReactUnity is developed against. The script reports that drift but never writes it — Unity performs an Editor upgrade by opening the project and re-serializing it, so editing `ProjectVersion.txt` alone would label a project upgraded without upgrading it.\n"
filename: 2026-08-18-7c4e19.md
v: 0.0.0
- content: "---\npackages:\n npm:@reactunity/renderer:\n type: patch\n---\n\n### Fix non-solid border styles rendering as solid until the next style update\n\n`inset`, `outset`, `groove`, `ridge`, `dotted`, `dashed` and `double` borders came out flat solid on an element's first render. Any later style update — a hot reload, a state change, anything that re-ran the style pass — painted them correctly, so in the Editor they appeared to work while a build, where no such update ever arrives, showed solid borders forever.\n\nThe style is encoded as UVs into a lookup texture that the border graphic samples. That texture was bound from the `Rounding` setter alone, and the graphic is also created from the layout pass, which never assigns rounding: styles run before layout, so on the first pass Yoga has no border widths yet and no border graphic exists to receive the rounding, and by the time the layout pass creates one the style pass is over. With no texture bound, Unity substitutes a white one and every style samples as solid.\n\nThe texture is now resolved on each material rebuild instead of being cached on assignment, so it is correct however the graphic came to exist.\n\nBorders with a `border-radius` still ignore `border-style` and paint solid — a separate, pre-existing limitation of the rounded mesh path.\n"
filename: 2026-07-29-b71c4e.md
- content: "---\npackages:\n npm:@reactunity/create:\n type: patch\n---\n\n### Keep the scaffold's ReactUnity pins on the released version\n\nA scaffolded project asked for `com.reactunity.core` 0.18.0, `com.reactunity.quickjs` 0.17.1 and `@reactunity/renderer` ^0.20.1 — the UPM pair untouched since April 2024. The scaffold sits outside the pnpm workspace on purpose, so nothing in the release ever bumped it.\n\nThe rot was hidden rather than harmless: the CLI repairs both at scaffold time, `openupm-cli add` for the Unity manifest and `ncu -u` for the React app. Both are best-effort network calls, and both were dead on Windows for months, which handed those users the checked-in numbers verbatim.\n\n`syncUnityVersions` in `scripts/tegami.mts` now carries the released version into both files alongside the four UPM manifests, and throws if a pin it expects has been renamed away rather than leaving it silently frozen.\n"
filename: 2026-08-18-b93d05.md
v: 0.0.0
- content: "---\npackages:\n npm:@reactunity/renderer:\n type: patch\n---\n\n### Support border-style and outline-style on rounded corners\n\n`border-radius` used to drop `border-style` entirely: the rounded mesh path sampled no style at all, so every style painted as flat solid, and `none` painted a solid border rather than nothing. Browsers render all of them with rounded corners, so a declaration that worked on a square element silently lost its style once a radius was added. `outline-style` was dropped the same way. All seven styles now render along the curve.\n\n`groove`, `ridge`, `inset`, `outset` and `double` are ramps across the border width, and the rounded path already emitted an inner and an outer vertex ring stitched 1:1 into a quad strip. Feeding the style band's inner edge to the inner ring and its outer edge to the outer ring makes the strip interpolate the ramp, using the same bands and the same per-side inversion as the square path.\n\n`dotted` and `dashed` repeat *along* the edge instead, which one continuous ring cannot express. When a side asks for one, the rings are emitted as vertices only and each side is drawn as its own strip, walked out by arc length along the border's centreline so a dash keeps its length through a corner. The dash and dot counts are fitted to a whole number per side, so a side begins and ends with half a gap rather than a clipped dash at the mitre. Sides can mix freely - a dashed top against solid sides keeps a clean mitre, since each corner arc doubles its vertex at 45 degrees and the per-side split lands exactly on that pair.\n"
filename: 2026-07-29-e35a90.md
v: 0.0.0
- content: "---\npackages:\n npm:@reactunity/renderer:\n type: patch\n---\n\n### Fix React Fast Refresh never repainting a hot-updated component\n\nAn edit to a component was fetched, applied and acknowledged by the dev server, and then nothing on screen changed. Both dev servers were affected — webpack and Vite alike — so any hot reload that was not a full page reload silently did nothing.\n\n`render` registered the renderer with the devtools hook *after* committing the tree. React Refresh learns which roots it may refresh from the hook's `onCommitFiberRoot`, and only calls `scheduleRefresh` for roots it has seen mount — so a renderer that registers after its first commit is invisible to it forever. The initial mount was the commit being missed, which meant the app's only root was never a refresh candidate.\n\n`injectIntoDevTools` now runs before the first commit, and once per reconciler rather than on every `render` call — repeated injection was registering the same renderer under a new id each time.\n"
filename: 2026-07-30-c73d51.md
- content: "---\npackages:\n npm:@reactunity/create:\n type: patch\n---\n\n### Fix `npx @reactunity/create` failing to find its own scaffold\n\nEvery run ended at `Copying files failed` with `ENOENT ... dist/scaffold/react`. The scaffold ships at the package root, but the CLI resolves it relative to its own file — which stopped being the package root when tsdown moved the build output into `dist/`.\n\nThe entry point moved to `src/index.ts` so that source and bundle sit at the same depth, and the scaffold is now `../scaffold` from either. `.npmignore` still whitelisted the pre-tsdown `/index.js`; `dist/index.js` was only reaching the tarball because npm force-includes `bin`, so its sourcemap was being dropped.\n\nThe same run then failed at `spawn EINVAL` on Windows. Node 20.12 stopped spawning `.cmd` files directly (CVE-2024-27980), and `npx`, `npm` and `yarn` are all `.cmd` there — so the package update step, `--install` and `--unity`'s OpenUPM call were all dead. Those now go through a shell on Windows, with arguments quoted so a project path containing a space still works.\n"
filename: 2026-08-18-e4a71c.md
v: 0.0.0
core:packages:
- id: npm:@reactunity/monorepo
updated: false
- id: npm:@reactunity/create
- changelogIds:
- 2026-08-18-7c4e19.md
- 2026-08-18-b93d05.md
- 2026-08-18-e4a71c.md
id: npm:@reactunity/create
updated: true
- id: npm:@reactunity/material
updated: true
- changelogIds:
- 2026-07-28-9c4e2b.md
- 2026-07-29-b71c4e.md
- 2026-07-29-e35a90.md
- 2026-07-30-c73d51.md
id: npm:@reactunity/renderer
updated: true
- id: npm:@reactunity/scripts
updated: true
- id: npm:@reactunity/renderer
updated: true
npm:packages:
- id: npm:@reactunity/monorepo
- id: npm:@reactunity/create
- id: npm:@reactunity/material
- id: npm:@reactunity/renderer
- id: npm:@reactunity/scripts
- id: npm:@reactunity/renderer
27 changes: 27 additions & 0 deletions packages/create/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## @reactunity/create@0.23.2

### Refresh the scaffold's prebuilt bundle, and keep it refreshed

A scaffolded project renders `Assets/Resources/react/index.js` on first open, before the user has run a build. That bundle was webpack output from April 2024 carrying React 18.2, sitting in a project whose `package.json` asked for React 19. Nothing in the repo could catch it: generated output that nothing regenerates is invisible until someone scaffolds a project and looks at it.

`scripts/create/refresh-scaffold.mts` rebuilds it from the scaffold's own app, in a temp copy so the shipped template never gains a `node_modules`, and a nightly workflow opens a PR when the result moves. Because the rebuild resolves the app's dependency ranges fresh, it also catches breakage arriving from upstream rather than only from a ReactUnity release. `--check` reports drift without writing, for use as a gate.

It verifies that the build still emits exactly the asset set the scaffold has `.meta` files for. A sourcemap or a hashed chunk would otherwise land in a user's project unimported, and anything that stopped being emitted would leave an orphan `.meta` behind.

The scaffold project itself moved to Unity 6000.5.5f1, matching the sample ReactUnity is developed against. The script reports that drift but never writes it — Unity performs an Editor upgrade by opening the project and re-serializing it, so editing `ProjectVersion.txt` alone would label a project upgraded without upgrading it.

### Keep the scaffold's ReactUnity pins on the released version

A scaffolded project asked for `com.reactunity.core` 0.18.0, `com.reactunity.quickjs` 0.17.1 and `@reactunity/renderer` ^0.20.1 — the UPM pair untouched since April 2024. The scaffold sits outside the pnpm workspace on purpose, so nothing in the release ever bumped it.

The rot was hidden rather than harmless: the CLI repairs both at scaffold time, `openupm-cli add` for the Unity manifest and `ncu -u` for the React app. Both are best-effort network calls, and both were dead on Windows for months, which handed those users the checked-in numbers verbatim.

`syncUnityVersions` in `scripts/tegami.mts` now carries the released version into both files alongside the four UPM manifests, and throws if a pin it expects has been renamed away rather than leaving it silently frozen.

### Fix `npx @reactunity/create` failing to find its own scaffold

Every run ended at `Copying files failed` with `ENOENT ... dist/scaffold/react`. The scaffold ships at the package root, but the CLI resolves it relative to its own file — which stopped being the package root when tsdown moved the build output into `dist/`.

The entry point moved to `src/index.ts` so that source and bundle sit at the same depth, and the scaffold is now `../scaffold` from either. `.npmignore` still whitelisted the pre-tsdown `/index.js`; `dist/index.js` was only reaching the tarball because npm force-includes `bin`, so its sourcemap was being dropped.

The same run then failed at `spawn EINVAL` on Windows. Node 20.12 stopped spawning `.cmd` files directly (CVE-2024-27980), and `npx`, `npm` and `yarn` are all `.cmd` there — so the package update step, `--install` and `--unity`'s OpenUPM call were all dead. Those now go through a shell on Windows, with arguments quoted so a project path containing a space still works.
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.23.1",
"version": "0.23.2",
"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.23.1",
"com.reactunity.quickjs": "0.23.1",
"com.reactunity.core": "0.23.2",
"com.reactunity.quickjs": "0.23.2",
"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.23.1",
"@reactunity/renderer": "^0.23.2",
"react": "^19.1.0"
},
"devDependencies": {
"@reactunity/scripts": "^0.23.1",
"@reactunity/scripts": "^0.23.2",
"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.23.1",
"version": "0.23.2",
"description": "Material Design components and utilities for React Unity",
"main": "dist/index.js",
"types": "dist/index.d.ts",
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.23.1",
"version": "0.23.2",
"description": "React renderer for Unity3D",
"types": "dist/index.d.ts",
"typings": "dist/index.d.ts",
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.23.1",
"version": "0.23.2",
"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.23.1",
"version": "0.23.2",
"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.23.1",
"version": "0.23.2",
"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.23.1",
"version": "0.23.2",
"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.23.1",
"version": "0.23.2",
"unity": "2019.4",
"description": "QuickJS Plugin for ReactUnity",
"keywords": ["ReactUnity", "QuickJS"],
Expand Down