Bindings to mapnik for node.js
C++ JavaScript Shell Batchfile Python HTML Other
Latest commit d2a7271 Dec 16, 2016 @flippmoke flippmoke Closes #557
Failed to load latest commit information.
bench Remove parse in benchmark Jan 22, 2016
bin Closes #557 Dec 16, 2016
deps/clipper revert 6900101 - refs #686 Sep 2, 2016
docs adding back Aug 29, 2016
lib Fix linting issue Sep 2, 2016
scripts Add TODO to is_pr_merge script [skip ci] Sep 3, 2016
src add max_size docs Nov 28, 2016
test Merge pull request #709 from mapnik/limit-svg-image-allocation Dec 6, 2016
tools better c++ style as per mapnik conventions Apr 12, 2012
.gitattributes [skip ci] shapefile/geojson test, revert 183d8d9 Aug 2, 2015
.gitignore update npm run docs, rm documentation/ dir Aug 29, 2016
.npmignore add .gitattributes to npmignore Sep 9, 2016
.travis.yml test with g++-5 Sep 2, 2016 Add to changelog for v3.5.14 [republish binary] Sep 9, 2016 update docs for tagging to use v per #622 [skip ci] Sep 3, 2016
LICENSE.txt update licence year Apr 16, 2012
Makefile Added coveralls integration Mar 2, 2015 remove duplication in libstdc++ helper docs [skip ci] Sep 9, 2016
appveyor.yml Remove MAPNIK_GIT from appveyor.yml Jul 12, 2016
binding.gyp port to protozero v1.4.2 Sep 9, 2016
common.gypi Windows: Custom "ProgramDatabaseFile" to avoid naming conflict with '… Feb 15, 2015 let gyp control if mapnik_settings.js needs rebuilt Apr 1, 2014
index.html fix relative URLs for docs [skip ci] Mar 1, 2016
package.json mapnik plugin docs [skip ci] Oct 12, 2016
vcbuild.bat use new mapnik-sdk Aug 26, 2014


Bindings to Mapnik for node.


Build Status Build status Coverage Status


Render a map from a stylesheet:

var mapnik = require('mapnik');
var fs = require('fs');

// register fonts and datasource plugins

var map = new mapnik.Map(256, 256);
map.load('./test/stylesheet.xml', function(err,map) {
    if (err) throw err;
    var im = new mapnik.Image(256, 256);
    map.render(im, function(err,im) {
      if (err) throw err;
      im.encode('png', function(err,buffer) {
          if (err) throw err;
          fs.writeFile('map.png',buffer, function(err) {
              if (err) throw err;
              console.log('saved map image to map.png');

Convert a jpeg image to a png:

var mapnik = require('mapnik');

Convert a shapefile to GeoJSON:

var mapnik = require('mapnik');
var ds = new mapnik.Datasource({type:'shape',file:'test/data/world_merc.shp'});
var featureset = ds.featureset()
var geojson = {
  "type": "FeatureCollection",
  "features": [
var feat =;
while (feat) {
    feat =;

For more sample code see the tests and sample code.


OS Node.js C++ minimum requirements OS versions
Mac v0.10.x, v4, v5, v6 C++11 Mac OS X > 10.10
Linux v0.10.x, v4, v5, v6 C++11 Ubuntu Linux > 16.04 or other Linux distributions with g++ >= 5 toolchain (>= GLIBCXX_3.4.20 from libstdc++)
Windows v0.10.x, v4, v5 C++11 See the Windows requirements section

An installation error like below indicates your system does not have a modern enough libstdc++/gcc-base toolchain:

Error: /usr/lib/x86_64-linux-gnu/ version GLIBCXX_3.4.20 not found (required by /node_modules/osrm/lib/binding/osrm.node)

If you are running Ubuntu older than 16.04 you can easily upgrade your libstdc++ version like:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-5-dev

To upgrade libstdc++ on travis (without sudo) you can do:

language: cpp

sudo: false

     - ubuntu-toolchain-r-test
     - libstdc++-5-dev # upgrade libstdc++ on linux to support C++11


Just do:

npm install mapnik@3.x

Note: This will install the latest node-mapnik 3.x series, which is recommended. There is also an 1.x series which maintains API compatibility with Mapnik 2.3.x and 2.2.x and a v0.7.x series which is not recommended unless you need to support Mapnik 2.1 or older.

By default, binaries are provided for:

On those platforms no external dependencies are needed.

Other platforms will fall back to a source compile: see Source Build for details.

Binaries started being provided at node-mapnik >= 1.4.2 for OSX and Linux and at 1.4.8 for Windows.

Windows specific

NOTE: Windows binaries for the 3.x series require the Visual C++ Redistributable Packages for Visual Studio 2015:

See for more details.

The 1.x series require the Visual C++ Redistributable Packages for Visual Studio 2013:

Source Build

To build from source you need:

  • Mapnik >= v3.0.10

Install Mapnik using the instructions at:

Confirm that the mapnik-config program is available and on your ${PATH}.

Then run (within the cloned node-mapnik directory:

npm install --build-from-source

Windows specific

Windows builds are maintained in

Using node-mapnik from your node app

To require node-mapnik as a dependency of another package put in your package.json:

"dependencies"  : { "mapnik":"*" } // replace * with a given semver version string


To run the tests do:

npm test


BSD, see LICENSE.txt