Skip to content

Conversation

@DennisSmolek
Copy link
Member

NOTE: Due to prettier v3 bump, many files were touched in this release. The diff wil suck.

Adds Canvas Sizing to Canvas component and expands setSize closes #3617

Better handing of uniforms and nodes WITHIN hooks. can get default or scoped with scope() works for nodes and uniforms closes #3669

HMR issues with node hooks closes #3668
Added methods to flush and rebuild nodes system including deps and global methods

Bumped deps closes #3622

Removed CSB CI closes #3621

Flattened eslint plugin supported. closes #3580

Stupid type issues with bundling like absolute paths

React reconciler types (spoiler, react just uses any)

For more details see CHANGELOG-ALPHA in root. (I will likely delete fresh on each one to keep root changelog correct?)

- Canvas now auto-detects Vite/webpack HMR and refreshes TSL state
- Add `hmr` prop to Canvas to disable if needed
- useNodes/useUniforms reader modes now subscribe to store changes
- Add rebuildNodes/rebuildUniforms utils for manual rebuild
- Add rebuildAllNodes/rebuildAllUniforms standalone exports
- Fix usePostProcessing callback guards blocking HMR re-execution
- Add _hmrVersion to RootState for coordinating rebuilds
- Add documentation and CHANGELOG-ALPHA.md
Adds a Proxy-based wrapper that provides TypeScript-friendly access to
uniforms and nodes in creator functions without manual casting.

- New ScopedStore.ts with createScopedStore<T>() factory
- CreatorState type replaces RootState in creator function signatures
- Supports .scope(key), .has(key), .keys() methods
- Works with Object.keys(), for...in, and 'key' in store
CodeSandbox CI is abandoned and doesn't support current Node LTS.
Consolidating on GitHub Actions for all CI/testing.

Closes #3621
Add width and height props to Canvas for explicit resolution control,
enabling use cases like 4K video export independent of container size.

New Canvas props:
- width: Canvas resolution width in pixels
- height: Canvas resolution height in pixels (or square if omitted)

Enhanced setSize API:
- setSize() - Reset to props/container mode
- setSize(n) - Set to n×n square
- setSize(w, h) - Set explicit size (takes ownership until reset)

Ownership model: Once setSize(w, h) is called imperatively, it takes
ownership. Props/container changes are stored but don't apply until
setSize() reset is called.

Also fixes HMR cleanup using Vite's dispose() instead of non-existent off()

Closes #3617
- Babel ecosystem: 7.16→7.28
- Types: @types/react 19.0→19.2, @types/scheduler 0.23→0.26
- Testing: vitest 4.0.16→4.0.17, @testing-library/* updates
- Zustand: 5.0.3→5.0.10
- use-sync-external-store: 1.4.0→1.6.0
- Changesets CLI: 2.22→2.29
- eslint-plugin-react: 7.29→7.37
- eslint-plugin-vitest: 0.3→0.5

Note: three.js 0.182.0 skipped due to WebGPU module issues in test environment
- Updated husky from v7 to v9 (new hook format)
- Updated lint-staged from v12 to v16
- Removed deprecated husky config block from package.json
- Simplified .husky/pre-commit to new format
- Updated prettier from v2 to v3.8.0
- Updated pretty-quick from v3 to v4.2.2
- Removed @types/prettier (Prettier 3 has built-in types)
- Reformatted codebase with new prettier version
- Updated eslint to v9.39.2
- Updated to typescript-eslint v8.53.0 (replaces @typescript-eslint/*)
- Updated eslint-config-prettier to v10.1.8
- Updated eslint-plugin-prettier to v5.5.5
- Updated eslint-plugin-react-hooks to v5.2.0
- Migrated from .eslintrc.json to eslint.config.js (flat config)
- Removed .eslintignore (ignores now in flat config)
- Removed eslint-plugin-import (compatibility issues with ESLint 9)
- Added globals package for environment globals
- Added "type": "module" to package.json
- Define FiberRoot locally instead of importing from react-reconciler
  to prevent unbuild from writing absolute filesystem paths in .d.ts
- Convert verify-bundles.js to ES modules for project compatibility
The format() function returns a Promise that was being passed directly
to fs.writeFile instead of being awaited first.
…t props to Canvas for explicit resolution control - Enhanced setSize() API with square shorthand and reset capability - Ownership model: imperative setSize(w, h) takes control until setSize() resets ScopedStore for Type-Safe Uniform/Node Access - New createScopedStore<T>() wrapper for TypeScript-friendly access to uniforms/nodes - Eliminates manual casting in creator functions - New exports: ScopedStoreType<T>, CreatorState HMR Support for TSL Hooks - Automatic Hot Module Replacement for WebGPU TSL hooks - Canvas detects Vite/webpack HMR events and rebuilds nodes/uniforms - New hmr prop on Canvas, rebuildNodes(), rebuildUniforms() utils Bug Fixes - Fixed useNodes() and useUniforms() reader modes not updating when store changes - Fixed usePostProcessing callbacks not re-running after HMR - Fixed absolute Windows paths in bundled type declarations (FiberRoot now defined locally) - Fixed eslint-plugin codegen not awaiting prettier format Maintenance - Migrated to ESLint 9 flat config - Updated Vite to v7, Prettier to v3, Husky to v9, lint-staged to v16 - Converted verify-bundles.js to ES modules ---
@DennisSmolek DennisSmolek merged commit eb0f9d0 into v10 Jan 19, 2026
2 checks passed
@DennisSmolek DennisSmolek deleted the v10-hmr-bug branch January 19, 2026 15:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants