JavaScript GLSL Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
examples fix(examples): add GUI layers when add layer throw error Aug 21, 2018
src feat (core): restriction to maximum count of color layers Aug 21, 2018
static_jsdoc docs(jsdoc) : adding a home page to the API documentation + adding a … Dec 21, 2017
test test(core): error operation on addLayer Aug 21, 2018
utils/debug fix(debug): use layer instead of in TileVisibilityChart Jul 18, 2018
.babelrc chore(build): drop babel-plugin-webpack-loader Jul 10, 2018
.editorconfig .editorconfig: trailing whitespace can have special meaning in Markdown Feb 22, 2016
.eslintignore feat(examples): add a loading screen for examples Mar 21, 2018
.eslintrc.js fix(chore): tag eslint config as root May 4, 2018
.gitattributes Style: enable linebreak-style rule Jan 19, 2017
.gitignore chore(test): add unit test coverage report. Jul 13, 2018
.travis.yml chore(test): add unit test coverage report. Jul 13, 2018 chore(build): verify that we are using npm >= 6 Jul 31, 2018 Coding guide draft Feb 4, 2016 Update the global documents of the project (#694) Mar 26, 2018 Chore: Add missing contributors Nov 6, 2017 Chore: add a template for gh issues Aug 31, 2017 docs(jsdoc) : adding a home page to the API documentation + adding a … Dec 21, 2017 Remove Require.js from Jul 7, 2016 Chore: add a PR template for gh Aug 31, 2017 fix(badge): fix typo for coverage badge Jul 13, 2018 Add a draft document for testing Feb 4, 2016
appveyor.yml test: Add continuous integration on Windows through AppVeyor Jul 10, 2018 changed dir itowns2 to itowns on public site Jul 27, 2017
deploy_key.enc Chore: allow build script to deploy to Jul 3, 2017
index.html fix(examples): add GUI layers when add layer throw error Aug 21, 2018
jsdoc-config.json fix(doc): wrong path to layer.js Aug 20, 2018
layout.tmpl docs(jsdoc) : adding a home page to the API documentation + adding a … Dec 21, 2017
package-lock.json feature(core): add camera utils tools Aug 20, 2018
package.json feature(core): add camera utils tools Aug 20, 2018
webpack.config.js chore(build): drop babel-plugin-webpack-loader Jul 10, 2018

Coverage Status

What is it?

iTowns is a Three.js-based framework written in Javascript/WebGL for visualizing 3D geospatial data.

It can connect to WMS/WMTS/TMS servers including elevation data and load many different data formats (3dTiles, GPX, KML and much much more).

iTowns screenshot

API documentation and examples

API Documentation


How to use Itowns in your project

You can use it through npm (the preferred way) or download a bundle from our github release page.

With NPM

In your project:

npm install --save itowns

This package contains the ES5-compatible sources of Itowns.

If you're using a module bundler (like wepback), you can directly require('itowns') in your code.

Alternatively, we provide a bundle you can directly include in your html files that exposes itowns in window:

<script src="node_modules/itowns/dist/itowns.js"></script>

/!\ Please note that this bundle also contains the dependencies.

From a release bundle

See our release page.

Supported data types and features

  • Imagery from WMTS/WMS/TMS
  • Elevation (DTM/DSM) from WMTS
  • 3D Tiles
  • ...

See the feature list wiki page for a complet list of features and data formats.


If you want to run tests you'll need to install puppeteer.

If you install pupperter behind proxy, use HTTP_PROXY, HTTPS_PROXY, NO_PROXY to defines HTTP proxy settings that are used to download and run Chromium.

If puppeteer fails to download Chrome, you can try with the documented environment variables. Or you can download it manually, and then:

  • install puppeteer without downloading Chrome: PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 npm install puppeteer
  • then use the env var CHROME to tell itowns/mocha/puppeteer what Chrome app it should use: CHROME=/opt/google/chrome-beta/chrome npm run test-examples

Then you can run the tests:

npm run test-examples

Supported environment variables:

* SCREENSHOT_FOLDER: take a screenshot at the end of each test and save it in this folder. Example: SCREENSHOT_FOLDER=/tmp/
* CHROME: path to Chrome executable. If unspecified itowns will use the one downloaded during puppeteer install.
* DEBUG: run Chrome in a window with the debug tools open.
* REMOTE_DEBUGGING: run Chrome in headless mode and set up remote debugging. Example: REMOTE_DEBUGGING=9222 will setup remote debugging on port 9222. Then start another Chrome instance, browse to chrome://inspect/#devices and add localhost:9222 in Discover network targets.

Note: Chrome in headless mode doesn't support the WebGL EXT_frag_depth extension. So rendering may differ and some bugs can only be present in headless mode.


iTowns is dual-licenced under Cecill-B V1.0 and MIT. Incorporated libraries are published under their original licences.

See for more information.


iTowns has received contributions from people listed in If you are interested in contributing to iTowns, please read

iTowns has been redesigned from this early version.


iTowns is an original work from French IGN, MATIS research laboratory. It has been funded through various research programs involving the French National Research Agency, Cap Digital, UPMC, Mines ParisTec, CNRS, LCPC.

iTowns is currently maintained by IGN ( ), Oslandia ( ) and AtolCD ( )