Bindings for the S2 Geometry Library into node.js.

Usage no npm install needed!

<script type="module">
  import mapboxS2 from 'https://cdn.skypack.dev/@mapbox/s2';


Build Status


Bindings for the S2 Geometry Library into node.js.

S2 is a library that does spherical math over the world, and supports a very fancy Hilbert curve-related indexing scheme. S2 has no documentation besides source comments and this presentation. Notably it's used for MongoDB's 2dsphere index, as well as in viewfinderco's DynamoDB-powered database. s2map.com also demonstrates one of the killer features of the library, 'coverings', which are intelligently computed groups of cells that can be used to index geometries.


var s2 = require('s2');

var ll = new s2.S2LatLng(0, 0);
ll.isValid(); // true
var normalized = ll.normalized(); // true
var pt = ll.toPoint();


npm install
npm build . --build-from-source
npm test


node-s2 is a low level s2 wrapper. If you are simply looking to get geojson into s2, you should check out geojson-cover.

Documentation: API.md


Some of the S2 API is not wrapped because it isn't meant to be exposed in this way, and is blocked from wrapping by DISALLOW_COPY_AND_ASSIGN.

  • S2CellUnion
  • S2Loop
  • S2Polyline
  • S2Polygon
  • S2RegionCoverer
  • S2RegionIntersection

See Also