MCPcopy Index your code
hub / github.com/brianzinn/react-babylonjs

github.com/brianzinn/react-babylonjs @v4.0.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.0.2 ↗ · + Follow
2,818 symbols 4,619 edges 218 files 72 documented · 3%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

react-babylonjs

'react-babylonjs' integrates the Babylon.js real time 3D engine with React

react-babylonjs lets you build your scene and components using a familiar declarative syntax with the benefits of reusable components and hooks. The Babylon.js API is mostly covered declaratively thanks to code generation and even custom props allow you to declaratively add shadows, physics, 3D models, attach 2D/3D UI to meshes, etc.

NOTE: react-babylonjs@4 requires React 19.

For older React versions (React < 19), install from the maintained 3.x line: yarn add react-babylonjs@^3 (tracked on the r18 branch).

Some limited 3.x versions did support React 19, so you may get caught updating to 3.x that is now React 18 only (not by patch update). In retrospect, I should have made 2 separate majors. The intention at one point was to support both in same npm.

install

npm i react-babylonjs
yarn add react-babylonjs

Fully supports hooks. Full support for TypeScript with auto-completion on elements and compile time checks. Context API and hooks provide easy access to Scene/Engine/Canvas.

NPM version NPM downloads

No third party dependencies outside of React + babylon.js

https://brianzinn.github.io/react-babylonjs/

Examples

~50 sample web pages with viewable source code on: github pages examples.

Example Projects

React Native

No online examples for native, but you can integrate using EngineCanvasContext.Provider:

import React, { useState } from 'react';
import { View } from 'react-native';

import { EngineView, useEngine } from '@babylonjs/react-native';
import { Camera } from '@babylonjs/core';
import { EngineCanvasContext, Scene } from 'react-babylonjs';

const EngineScreen: FunctionComponent<ViewProps> = (props: ViewProps) => {

  const engine = useEngine();
  const [camera, setCamera] = useState<Camera>();

  return (
    <View style={props.style}>
      <EngineCanvasContext.Provider value={{ engine, canvas: null }}>
        {engine &&
          <Scene>
            <arcRotateCamera
              name="camera1"
              onCreated={camera => setCamera(camera)}
            />
            <hemisphericLight name="light1" />
            { /* rest of declarative scene/components here */ }
          </Scene>
        }
      </EngineCanvasContext.Provider>
      <EngineView camera={camera} displayFrameRate={true} />
    </View>
  );
};

Contributors

  • Huge shout out to Konsumer that helped bring this project to the next level. The ideas and code sandboxes from issue #6 inspired the code generation and HOC + Context API integration.
  • seacloud9 for adding storybook, GSAP demo, dynamic terrain (extension) & PIXI demo.
  • hookex has made the largest contribution :smiley: Proper texture handling demo, Node parenting, demo Full Screen GUI demo, Effect Layers glow demo, behaviors demo, useHover & useClick hooks demo and react-spring integration as author of react-babylon-spring - https://github.com/hookex/react-babylon-spring.
  • dennemark add support for CascadedShadowGenerator, createPortal and Html (project HTML in scene - ported from drei). Also, stories for Snippet Material and "tunnel" zustand integration. Added RenderOnDemand to customize render loops.
  • kencyke created a cool multi-canvas + cloud point repo that insipired creation of <pointsCloudSystem .../> as host element.
  • flostellbrink fixed the react-babylon-spring integration and added GH action for Storybook (github pages)
  • voronp add isPaused Engine prop to skip rendering
  • saidmoya12 add camera before/after render hooks
  • Viktor Zhurbin rebuilt single handedly a much improved GH pages website using rspress. Including a complete rewrite of how inline code samples are displayed, so you can view fullscreen, multiple files and toggle between code/preview/split and a much better search and mobile experience. Also, the amazing Playground was added including saved and sharable snippets/forking!
  • Baris Ozcetin add React 19 support

Thanks also to all the people who have contributed with issues/questions/discussions. All the great ideas and requests are why this project evolved beyond an experiment.

Made with ♥

Extension points exported contracts — how you extend this code

PropsHandler (Interface)
(no doc) [249 implementers]
packages/react-babylonjs/src/PropsHandler.ts
RemarkPluginProps (Interface)
(no doc)
website/src/plugins/pluginPlayground/cli/remarkPlugin.ts
IntrinsicElements (Interface)
(no doc)
website/docs/examples/materials/Materials.tsx
HasPropsHandlers (Interface)
(no doc) [280 implementers]
packages/react-babylonjs/src/PropsHandler.ts
Window (Interface)
(no doc)
website/src/plugins/pluginPlayground/web/ui/preview/CodeRunner/compiler/getBabelTransformedFiles.ts
ICustomPropsHandler (Interface)
(no doc) [6 implementers]
packages/react-babylonjs/src/PropsHandler.ts
ILoadedModel (Interface)
(no doc) [2 implementers]
packages/react-babylonjs/src/hooks/loaders/loadedModel.ts
ReconcilerInstance (Interface)
(no doc)
packages/react-babylonjs/src/render.ts

Core symbols most depended-on inside this repo

checkPrimitiveDiff
called by 1811
packages/react-babylonjs/src/PropsHandler.ts
checkMethodDiff
called by 222
packages/react-babylonjs/src/PropsHandler.ts
checkObservableDiff
called by 206
packages/react-babylonjs/src/PropsHandler.ts
checkLambdaDiff
called by 93
packages/react-babylonjs/src/PropsHandler.ts
checkVector3Diff
called by 69
packages/react-babylonjs/src/PropsHandler.ts
checkTextureDiff
called by 61
packages/react-babylonjs/src/PropsHandler.ts
checkColor3Diff
called by 40
packages/react-babylonjs/src/PropsHandler.ts
checkColor4Diff
called by 40
packages/react-babylonjs/src/PropsHandler.ts

Shape

Method 1,215
Class 1,138
Function 440
Interface 18
Enum 7

Languages

TypeScript100%

Modules by API surface

packages/react-babylonjs/src/generatedCode.ts2,124 symbols
packages/react-babylonjs/src/extensions/DynamicTerrain.ts54 symbols
packages/react-babylonjs/tools/generate-code.ts43 symbols
packages/react-babylonjs/src/ReactBabylonJSHostConfig.ts34 symbols
packages/react-babylonjs/src/PropsHandler.ts29 symbols
packages/storybook/stories/babylonjs/Integrations/reactSpring.stories.js27 symbols
website/docs/examples/materials/Materials.tsx11 symbols
packages/react-babylonjs/src/hooks/loaders/loadedModel.ts10 symbols
packages/react-babylonjs/test/render.spec.tsx8 symbols
packages/react-babylonjs/src/customHosts/grid/index.ts8 symbols
packages/react-babylonjs/src/customHosts/AdvancedDynamicTextureLifecycleListener.ts8 symbols
packages/react-babylonjs/src/customComponents/Html.tsx8 symbols

For agents

$ claude mcp add react-babylonjs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact