Registry / data / geos-wasm

geos-wasm

JSON →
library3.1.1jsnpmunverified

geos-wasm provides a high-performance WebAssembly (WASM) build of GEOS, a robust C/C++ port of the Java Topology Suite (JTS), enabling advanced planar geometry operations directly within JavaScript environments. Currently at version 3.1.1, this library allows developers to leverage a battle-tested geospatial engine without relying on native system dependencies, making it suitable for both browser-based applications and server-side contexts like Node.js, Bun, or Deno. Built using Emscripten, geos-wasm translates GEOS's extensive C/C++ core into an efficient WebAssembly module. Its key differentiator is bringing the full power and precision of GEOS's algorithms—such as buffering, intersection, union, and area calculation—to JavaScript with a minimal setup, abstracting away the complexities of the underlying C/C++ memory management through its WASM interface. While no fixed release cadence is stated, updates typically align with upstream GEOS advancements and community-driven requirements, ensuring access to the latest topological functionalities.

dataserialization
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

This is the default export and returns a Promise that resolves to the GEOS object. It must be awaited before using any GEOS functions.

import initGeosJs from 'geos-wasm';

All GEOS functions and memory management utilities (e.g., Module._malloc) are properties of the resolved 'geos' object, not direct imports from the package root.

const geos = await initGeosJs(); const reader = geos.GEOSWKTReader_create();

Imports the TypeScript type definition for the GEOS object returned by initGeosJs, providing type-checking for GEOS methods and properties.

import type { GEOS } from 'geos-wasm';

Demonstrates initializing the GEOS WASM module, creating a WKT reader, parsing a polygon, calculating its area, and performing crucial manual memory management by freeing allocated resources.

import initGeosJs from 'geos-wasm'; async function runGeosExample() { // Initialize the GEOS WebAssembly module. This returns a promise. const geos = await initGeosJs(); // Use the GEOS object to call GEOS functions. // Example: Get the area of a polygon defined by WKT. // 1. Create a WKT reader. const reader = geos.GEOSWKTReader_create(); const wkt = 'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'; // 2. Allocate memory for the WKT string and write it. const size = wkt.length + 1; const wktPtr = geos.Module._malloc(size); geos.Module.stringToUTF8(wkt, wktPtr, size); // 3. Read the WKT string into a GEOS geometry, which returns a pointer to the geometry. const geomPtr = geos.GEOSWKTReader_read(reader, wktPtr); // 4. Allocate memory for the result (area) and calculate it. const areaPtr = geos.Module._malloc(8); // 8 bytes for a double geos.GEOSArea(geomPtr, areaPtr); // 5. Read the calculated area from the pointer into a JavaScript number. const area = geos.Module.getValue(areaPtr, 'double'); console.log('Calculated area:', area); // Expected output: Calculated area: 1 // 6. Crucially, free all allocated GEOS objects and memory pointers. geos.GEOSWKTReader_destroy(reader); geos.GEOSGeom_destroy(geomPtr); geos.GEOSFree(areaPtr); // GEOSFree for values allocated by GEOS geos.Module._free(wktPtr); // Module._free for values allocated by Emscripten's malloc } // Run the example and catch any potential errors. runGeosExample().catch(console.error);
Debug
Known footguns
gotchageos-wasm requires explicit manual memory management using functions like `geos.Module._malloc()`, `geos.Module._free()`, `geos.GEOSGeom_destroy()`, and `geos.GEOSWKTReader_destroy()`. Failing to free allocated pointers and destroy GEOS objects will lead to memory leaks, which is highly atypical for JavaScript development.
gotchaInteraction with GEOS functions often involves passing and receiving raw memory pointers, requiring a C-like programming paradigm not common in JavaScript. Developers must understand how to allocate memory, write data to pointers, and read values from them using `geos.Module` utilities.
gotchaThe `initGeosJs()` function is asynchronous and returns a Promise. All GEOS operations must be performed only after this Promise has successfully resolved to the GEOS object, otherwise `TypeError`s will occur due to attempts to access properties of an undefined or unresolved object.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
13 hits · last 30 days
gptbot
4
ahrefsbot
4
amazonbot
3
script
1
chatgpt-user
1
Resources