The WebGL/JS implementation of XML3D
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status License badge Specification Documentation badge Support badge


xml3d.js is a XML3D implementation based on WebGL and JavaScript. The aim of XML3D is to make the development of 3D-Web applications as easy as developing web pages. Every web developer who knows how to use the DOM (or jQuery) should also be able to use XML3D.

XML3D is also an evaluation platform of the W3C Community Group Declarative 3D for the Web and a FIWARE Generic Enabler.


Our small examples repository holds simple examples of individual features. Below are some more complete demos:


Download the library and include it in your html page.

<script src=""></script>

If a standard navigation mode is sufficient for your web application, you can include the camera controller that comes with xml3d.js:

<script src=""></script>
<script src=""></script>


We have an extensive test suite and some known issues.

How to build


You will need node.js. Then install the grunt cli:

npm install -g grunt-cli

Clone a copy of the main xml3d.js git repo by running:

git clone git://

Enter the xml3d.js directory and run the build script:

cd xml3d.js && npm run build

The built version of xml3d.js will be put in the build/output/ subdirectory. Alternatively you have several grunt tasks that you can run directly (e.g. grunt min). Run grunt --help to get a list of available grunt tasks.


We have an overview documentation in each subfolder of the project:

  • build - The build system of xml3d.js.
  • doc - Documentation related to FIWARE
  • spec - The specification for XML3D in re-spec form
  • src - The actual source code of the xml3d.js library
  • tests - The test suite
  • tools - Several tools that can be used optionally with xml3d.js

In addition a full specification and API description is provided, which also includes many examples and code snippets. This repository's Wiki also contains some tutorials and additional help.

Change log

5.2 - 10.05.2016

5.1 - 07.01.2016

  • Resource system is now based on the Fetch API and Promises
  • Better FormatHandler interface for custom mesh loaders - wiki
  • Support for the CSS z-index property - demo, spec
  • New onRequest interface for custom HTTP headers - wiki
  • Memory performance improvements when removing elements from the DOM

5.0 - 16.10.2015 (Not backwards compatible!)

  • New specification and API description - link
  • Support for CSS 'display' property - demo, doc
  • Improved math types - doc
  • Simplified light definitions - 111
  • New 'string' data type in Xflow - doc
  • Various API changes - doc
  • Improved standard camera controller (camera.js) - link

4.9 - 31.03.2015

4.8 - 18.12.2014

4.7 - 17.10.2014

4.6 - 15.04.2014

4.5 - 14.11.2013

  • Full support for HTML encoding, all demos in HTML now
  • Set data values efficiently using TypedArray - demo, doc
  • Override shader attributes on a per-object basis - demo
  • Improved Error Messages
  • Reuse of Xflow graphs using new <dataflow> element - demo, doc
  • Many performance improvements, e.g. Frustum Culling and Paging
  • Support for mult-touch events
  • Dynamic near/far clip planes that adapt to scene size
  • #24: WebWorker support for MeshLoader plug-ins - demo
  • #25: Smarter handling of cached resources

4.4 - 23.04.2013

  • Image Processing with Xflow (also as standalone library) - demo
  • Transformations as Xflow sink
    • Augemented Reality (AR) - demo
    • Keyframe animations
  • Generalized resources for meshes, shaders, etc.
  • Xflow API: Observer Xflow graph from JavaScript
  • Canvas resizing demo
  • Issues: Fixed #2, Fixed #3

4.3 - 18.12.2012

  • Xflow support, including
  • External references in XML format - demo
  • 'onload' event for <xml3d> element
  • Support for video textures - demo
  • Support to use a webcam stream as video texture via WebRTC API - demo
  • Support of spot lights - demo
  • Support of CSS 3D Transforms in style attribute - demo
  • Improved debug output

4.2 - 14.09.2012

  • Hardware accelerated object picking expanded to 16,7 mio objects
  • Emissive texture map support in diffuse and phong shader - demo
  • Specular map support in phong shader - demo
  • New mechanism for custom shaders - demo
  • Support of directional lights (finally) - demo
  • Support of external data resources in JSON format - demo
  • New mechanism to register loaders for external formats - demo

4.1 - 19.07.2012

  • Initial release on GitHub