3D WebGL engine.
Switch branches/tags
Clone or download
Latest commit 1aa882e Jun 22, 2016
Failed to load latest commit information.
examples made examples work with commonjs Mar 13, 2016
lib Merge branch 'master' into suicide-mode Apr 4, 2016
out Merge branch 'master' into suicide-mode Apr 4, 2016
spec/support run jasmine directly, damnit Mar 31, 2016
src/goo have to use a pseudo vector object because vector3 and vector2 cannot… Jun 22, 2016
test Added Vector2#smoothDamp Jun 22, 2016
tools make map/set polyfill work in CocoonJS canvas+ Apr 22, 2016
visual-test Fixed visual tests that referenced rng.js instead of RNG.js Apr 16, 2016
.eslintignore Narrowed the style options to something that matches our style Apr 13, 2015
.eslintrc Removed TWEEN.js and added Easing.js. Added eslint curly requirement Apr 11, 2016
.gitignore ignore out-tern Mar 18, 2016
.jshintrc adjust jshint for node Nov 22, 2015
CHANGES bump package.json, update changelog Jun 8, 2016
CI remove node modules before install Dec 10, 2015
COPYING Updated COPYING to include missing stats.js license Dec 2, 2015
CT Install npm modules upon starting test. May 4, 2015
E2E Added extending the path to make running e2e over ssh work. Jan 8, 2015
Gruntfile.js Use recordsPath in webpack, to make module entry points stable. Jun 13, 2016
LICENSE Update LICENSE Nov 16, 2015
README.md Update README.md May 6, 2016
index.js alphabetically sort the exports in index.js Apr 19, 2016
package.json bump package.json, update changelog Jun 8, 2016
webpack.records.json Use recordsPath in webpack, to make module entry points stable. Jun 13, 2016


Goo Engine

Goo Engine is an open-source 3D engine using HTML5 and WebGL for rendering.


More showcases...


Browser: add the following to your webpage.

<script src="http://code.gooengine.com/latest/lib/goo.js"></script>


npm install --save goojs

Sample code

Open on codepen

// var goo = require('goojs'); // (for node.js)

// Create a runner
var gooRunner = new goo.GooRunner();
var world = gooRunner.world;

// Add the canvas to the DOM

// Add a light entity
world.createEntity(new goo.PointLight(), [100, 100, 100]).addToWorld();

// Add a camera entity
world.createEntity(new goo.Camera(), new goo.OrbitCamControlScript({spherical: [5,0,0]})).addToWorld();

// Add a box entity with a rotation script
world.createEntity(new goo.Box(), goo.Material.createMaterial(goo.ShaderLib.simpleLit), function update(entity) {
    entity.setRotation(world.time, world.time, 0);



Goo Create Platform

Goo Create is a complete 3D authoring platform built on top of the Goo Engine.

How to build

npm install
npm install -g grunt-cli
grunt minify

Unit testing

  • Run grunt unittest to run all tests using Karma
  • Run npm test to test the parts of the engine that are supported in Node.js

Visual tests

Start a web server, e.g. using:

npm install st -g
st --port 8000

And then open:

Code style checks

To make sure that no incorrectly styled code gets committed, install the pre-commit hook:

grunt init-git

This makes Git check whether all added and modified files pass the style check before allowing a commit.


grunt jsdoc - outputs to out-doc

GooJS uses a custom documentation compiler, modoc; see tools/modoc/README.md for more details.

Building details

  • Minified and mangled: grunt minify
  • Minified: grunt minify-no-mangle
  • Concatenated: grunt minify-dev


The Goo Engine is released under the MIT license.