Troubleshooting
Common Issues
R3F tab doesn't appear in DevTools
- Make sure
<ThreeDom />is mounted inside R3F's<Canvas> - Reload the page after installing the extension
- Check that
window.__R3F_DOM__exists in the console
waitForSceneReady times out
- Your scene may still be loading assets (models, textures). Increase the
timeoutoption. - Ensure
<ThreeDom />is rendered — the bridge won't initialize without it.
Objects not found by testId
- Set
userData.testIdon your Three.js objects:
<mesh userData={{ testId: 'my-object' }}>
testIdlookups are case-sensitive.
WebGL errors in CI (headless Chrome)
- Chromium needs SwiftShader for headless WebGL. Add these launch args:
// Playwright
use: {
launchOptions: {
args: ['--use-gl=angle', '--use-angle=swiftshader'],
},
},
// Cypress (cypress.config.ts)
setupNodeEvents(on) {
on('before:browser:launch', (browser, launchOptions) => {
if (browser.name === 'chrome') {
launchOptions.args.push('--use-gl=angle', '--use-angle=swiftshader');
}
return launchOptions;
});
},
Mirror DOM not updating
- The bridge patches
Object3D.add/removeat mount time. If you add objects before<ThreeDom />mounts, they won't be tracked. - Mount
<ThreeDom />early in your<Canvas>tree.
Still stuck?
Open an issue on GitHub or reach out at krishna.kalluri13@gmail.com.