pmndrs/react-three-fiber · error · Error
Not implemented.
Error message
Not implemented.
What it means
React's reconciler host config requires cloneRootViewTransitionContainer, which is invoked when React clones the root container during a native <ViewTransition>. This custom react-three-fiber reconciler does not support root view transitions, so it throws 'Not implemented.' to fail fast rather than silently corrupt the tree.
Source
Thrown at packages/fiber/src/core/reconciler.tsx:778
// https://github.com/facebook/react/pull/32038
createViewTransitionInstance: (_name: string): null => null,
// https://github.com/facebook/react/pull/32379
// https://github.com/facebook/react/pull/32786
getCurrentGestureOffset(_provider: null): number {
throw new Error('startGestureTransition is not yet supported in react-three-fiber.')
},
// https://github.com/facebook/react/pull/32500
cloneMutableInstance(instance: any, _keepChildren: any) {
return instance
},
cloneMutableTextInstance(textInstance: any) {
return textInstance
},
cloneRootViewTransitionContainer(_rootContainer: any) {
throw new Error('Not implemented.')
},
removeRootViewTransitionClone(_rootContainer: any, _clone: any) {
throw new Error('Not implemented.')
},
// https://github.com/facebook/react/pull/32465
createFragmentInstance: (_fiber: any): null => null,
updateFragmentInstanceFiber(_fiber: any, _instance: any): void {},
commitNewChildToFragmentInstance(_child: any, _fragmentInstance: any): void {},
deleteChildFromFragmentInstance(_child: any, _fragmentInstance: any): void {},
// https://github.com/facebook/react/pull/32653
measureClonedInstance: (_instance: any) => null,
// https://github.com/facebook/react/pull/32819
maySuspendCommitOnUpdate: (_type: any, _oldProps: any, _newProps: any) => false,
maySuspendCommitInSyncRender: (_type: any, _props: any) => false,
View on GitHub (pinned to ff3899dbf4)
Solutions
- Remove or gate <ViewTransition> usage inside the R3F canvas/test-renderer tree
- Pin React to the exact version R3F declares (usually stable, non-canary) so the method is never invoked
- If you maintain a fork, implement cloneRootViewTransitionContainer by returning the container (like cloneContainerInstance does)
- Wrap the render in an error boundary and fall back to rendering without ViewTransition
Example fix
// before
<Canvas>
<ViewTransition>
<Scene />
</ViewTransition>
</Canvas>
// after
<Canvas>
<Scene />
</Canvas> Defensive patterns
Strategy: validation
Validate before calling
const supportsViewTransition = typeof ViewTransition === 'undefined' // stable React: no VT
if (!supportsViewTransition && childrenUsesViewTransition) {
throw new Error('ViewTransition is not supported inside Canvas in this React version')
} Type guard
const isViewTransitionElement = (el: React.ReactElement | null | undefined): boolean =>
!!el && typeof el.type === 'symbol' && String(el.type).includes('viewtransition') Prevention
- Pin React to the stable version declared by @react-three/fiber
- Never render <ViewTransition> inside <Canvas> on unsupported versions
- Add a CI render test that fails fast if experimental React APIs leak into the scene graph
When it happens
Trigger: Rendering React's experimental <ViewTransition> (or React 19 canary view-transition APIs) at the root of an R3F/rttr tree, which makes the reconciler call hostConfig.cloneRootViewTransitionContainer, which is a stub that throws.
Common situations: Using canary/experimental React builds where ViewTransition is enabled by default, upgrading React versions that add new host-config methods, or copying R3F's reconciler into a project without implementing newer required methods.
AI-assisted analysis of pmndrs/react-three-fiber@ff3899dbf4 (2026-08-28).
Data as JSON: /api/errors/d8b4aee4210c1b6d.
Report an issue: GitHub.