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

  1. Remove or gate <ViewTransition> usage inside the R3F canvas/test-renderer tree
  2. Pin React to the exact version R3F declares (usually stable, non-canary) so the method is never invoked
  3. If you maintain a fork, implement cloneRootViewTransitionContainer by returning the container (like cloneContainerInstance does)
  4. 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

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.