0.0.4 - 2026-04-15
- Single-call PROJ pipeline: forward + affine + inverse Mercator collapse
into one WASM call via
proj_create. Falls back to two-call path for compound CRS - Global projection support: Robinson, Mollweide, Eckert IV, and other world projections now render correctly
- Initial test suite and benchmark
- Local dev server with COOP/COEP headers
- Aspect ratio distortion on global projections: tile-local Y was encoded linear in latitude instead of Mercator Y. Uniform affine scale now preserves aspect ratio
- Broken geometry at low zoom: pre-clip features to a 90-degree geographic grid before reprojecting, to avoid globe-spanning polygons producing irrecoverable topology errors after reprojection
getWorldBoundscomputes correct reprojected extent- Inverse Mercator transform shared as singleton (minor performance improvement)
- proj-wasm bumped to
^0.1.0-alpha8(PROJ 9.8.0 to 9.8.1)
- Interrupted projections (Goode Homolosine, etc.) are not supported
0.0.3 - 2026-03-15
transformCoordsF64()is now the sole transform engine;transformCoords()delegates to it. Both are exported.reprojectGeoJSON()usesFloat64Arrayinternally, eliminating intermediate[number,number][]allocations- Clip envelope built via
createEnvelope()/toGeometry()instead of GeoJSONReader parse - Clip fully-inside check expanded with 1% buffer to skip more geometric intersections
- Validity repair (
GeometryFixer.fix) skipped for point geometries - Finer-grained profiling breakdown (isValid vs fixRepair, geojsonRead/Write, densify ratio)
- Made
proj-wasma dependency of backproj, madebackproja dependency of maplibre-proj
reprojectTile()standalone function — usecreateTileProcessor().reprojectTile()insteadmvt.tsmodule removed;FetchTileFnandOutputFeaturetypes now exported frommvt-pipeline.ts
0.0.2 - 2026-03-11
- MVT reprojection via worker pool with input/output tile caching
- Demo page shows both GeoJSON and MVT layers with data mode selector
- Debug tile boundary overlay via
reprojectStyletileBoundariesoption __DEV__build split: prod builds eliminate all profiling code
- Protocol handler errors on CRS change (stale protocol removed before MapLibre finished with it)
- wasmts dependency updated to 0.1.0-alpha4
- Demo page loads wasmts from CDN via import map instead of local script tag
0.0.1 - 2026-03-08
backprojcore package: projection-agnostic coordinate transformation via proj-wasminitProj(),buildTransformer(crs),transformCoords(),transformPoint(),getWorldBounds()reprojectGeoJSON()for batch reprojection of GeoJSON FeatureCollections- Accepts EPSG/ESRI codes, PROJ strings, WKT, PROJJSON
- Rejects geographic CRS and interrupted projections at build time
- Antimeridian-crossing and non-finite coordinate filtering (per-ring, handles MultiPolygon correctly)
maplibre-projwrapper package:reprojectStyle()reprojects all inline GeoJSON sources in a MapLibre style and returns fake Mercator bounds forfitBounds()- npm workspaces monorepo structure
- Browser demo page (
docs/index.html)- CRS selector with searchable PROJ database browser and manual input mode (PROJ strings, WKT, .prj upload)
- GeoJSON layer management: add by URL, upload file, remove, per-layer color/opacity
- Default layers: Natural Earth 110m land, graticules, and countries
- coi-serviceworker for SharedArrayBuffer on static hosting