create and write to shapefiles in pure javascript
Clone or download
Latest commit 9681b58 Dec 7, 2016

Build Status


Writes shapefile in pure javascript. Uses dbf for the data component, and jsZIP to generate ZIP file downloads in-browser.


For node.js or browserify

npm install --save shp-write

Or in a browser


  • Requires a capable fancy modern browser with Typed Arrays support
  • Geometries: Point, LineString, Polygon, MultiLineString, MultiPolygon
  • Tabular-style properties export with Shapefile's field name length limit
  • Uses jsZip for ZIP files, but compression is buggy so it uses STORE instead of DEFLATE.


var shpwrite = require('shp-write');

// (optional) set names for feature types and zipped folder
var options = {
    folder: 'myshapes',
    types: {
        point: 'mypoints',
        polygon: 'mypolygons',
        line: 'mylines'
// a GeoJSON bridge for features{
    type: 'FeatureCollection',
    features: [
            type: 'Feature',
            geometry: {
                type: 'Point',
                coordinates: [0, 0]
            properties: {
                name: 'Foo'
            type: 'Feature',
            geometry: {
                type: 'Point',
                coordinates: [0, 10]
            properties: {
                name: 'Bar'
}, options);
// triggers a download of a zip file with shapefiles contained within.



Given a GeoJSON FeatureCollection as an object, converts convertible features into Shapefiles and triggers a download.

write(data, geometrytype, geometries, callback)

Given data, an array of objects for each row of data, geometry, the OGC standard geometry type (like POINT), geometries, a list of geometries as bare coordinate arrays, generate a shapfile and call the callback with err and an object with

    shp: DataView(),
    shx: DataView(),
    dbf: DataView()


Generate a ArrayBuffer of a zipped shapefile, dbf, and prj, from a GeoJSON object.

Other Implementations