The definitive source of the best
JavaScript libraries, frameworks, and plugins.

  • ×


    WhitestormJS physics + rendering of 3D
    Filed under  โ€บ 

    • 🔾71%Overall
    • 3,618
    • 2 hours
    • 🕩185
    • 👥6

    XO code style Three NPM Version Build Status PRs Welcome Coverage Status Known Vulnerabilities Discord

    OpenCollective Backers OpenCollective Sponsors

    Framework for developing 3D web apps

    Contributors welcome! :P How to start contributing

    Development chat - opens in discord app. Ask for help here;)

    Support the project - [Donate] buy developers a โ˜•

    $ npm install --save whs


    You can find lots of examples at showcases.

    basic/helloworld basic/model softbody/cloth3 postprocessing/basic-glitch softbody/ropes design/saturn


    • ๐Ÿค” Because making of even a basic Three.js application requires at least ~20 lines of code (see this tutorial)

      • Three.js: you will need to setup: scene, renderer, camera, make an animate() function before making the actual app.
      • Whitestorm.js: There are modules that helps you easily setup them:

        const app = new WHS.App([
          new, // attach to DOM
          new, // creates THREE.Scene instance
          new, // creates PerspectiveCamera instance
          new // creates WebGLRenderer instance
        app.start(); // run animation

        See more about modules

    • ๐Ÿ’ฃ Adding physics is hard.

      • Three.js: To make your app run with physics you need to make a second world with same 3d objects and apply their transform (position & rotation) to your rendered scene objects (THREE.Scene for example) in every frame.
      • Whitestorm.js: Can be done with modules in a few lines:

        const app = new WHS.App([
          // Other modules...
          new PHYSICS.WorldModule()
        const sphere = new WHS.Sphere({
          geometry: {
            radius: 3
          modules: [
            new PHYSICS.SphereModule({
              mass: 10
          material: new THREE.MeshBasicMaterial({color: 0xff0000}) // red material
        app.start(); // run animation

        Use physics-module-ammonext as your physics module.

        Try with physics on Codepen:

    • ๐Ÿ”Œ Components & plugins

      • Three.js: You can create meshes with geometry and material.
      • Whitestorm.js: You can create components with advanced custom functionality.

        export class BasicComponent extends WHS.MeshComponent {
          build() {
            return new THREE.Mesh(
              new THREE.IcosahedronGeometry(3, 5),
              new THREE.MeshBasicMaterial({color: 0xffffff})
          randomize() { // Additional function
            this.position.set(Math.random() * 10, Math.random() * 10, Math.random() * 10);
      • See Component system in interactive 3D of web article for more info.



    Proudly hosted by cdnjs:D (soon)


    • ๐Ÿ’Ž Simple in usage
    • :rocket: Speeds up 3D scene prototyping
    • ๐Ÿ”Œ Component based scene graph
    • ๐Ÿ’ฃ Simple integration of any high performance physics even with Worker (Multithreading)
    • :dizzy: Automatization of rendering
    • ๐Ÿ†• ES2015+ based
    • :large_blue_diamond: Extension system (modules)
    • :package: Webpack friendly
    • โœ”๏ธ Integrated Three.js rendering engine
    • :revolving_hearts: Work with Whitestorm.js and Three.js at the same time


    Use whitestorm-app-boilerplate


    Documentation for beta is currently in progress. Contact developers in discord chat

    Basic application

    Try on Codepen:

    const app = new WHS.App([
      new, // attach to DOM
      new, // creates THREE.Scene instance
        position: new THREE.Vector3(0, 0, -10)
      }), // creates PerspectiveCamera instance
      new, // creates WebGLRenderer instance
      new WHS.controls.OrbitModule() // orbit controls
    const sphere = new WHS.Sphere({ // Create sphere comonent.
      geometry: {
        radius: 3
      material: new THREE.MeshBasicMaterial({
        color: 0xffffff, // White color.
      position: new THREE.Vector3(0, 1, 0) // x: 0, y: 1, z: 0
    console.log(sphere.native); // Logs THREE.Mesh of this component
    app.start(); // run animation

    React integration

    You can easily integrate Whitestorm.js with React using react-whs tool!

    $ npm install react react-whs --save

    Try with React on Codepen:


    import React, {Component} from 'react';
    import {App, Sphere} from 'react-whs';
    export class Application extends Component {
      render() {
        return (
          <App modules={[
              position: {
                z: 20
            new WHS.controls.OrbitModule()
              geometry={[3, 32, 32]}
              material={new THREE.MeshBasicMaterial({color: 0xffffff})}



    Name Status Description
    whs-module-statsjs statsjs-npm WhitestormJS module for JavaScript Performance Monitor โšกโŒ›
    whs-module-dat.gui datgui-npm User Interface for runtime editing properties ๐Ÿ”‘๐Ÿ› ๐Ÿ”ฉ


    Name Status Description
    physics-module-ammonext physics-ammonext-npm Physics module based on Ammo.js


    Name Status Description
    whs-module-audio WIP Audio module for 3D positional sound ๐Ÿ”‰


    Name Status Description
    react-whs react-whs-npm Integration with ReactJS


    Support us with a monthly donation and help us continue framework development๐ŸŽ‰ and adding new features๐Ÿ’ก๐ŸŽ.


    Become a sponsor and get your logo on on our README on Github with a link to your website๐Ÿ”ญ.



    Show All