Requirements¶
What Conness GIS needs to run, what each dependency is for, and how versions are kept in check.
To build and run¶
- Node 24 or newer.
app/package.jsondeclaresengines.node: ">=24", so npm warns on an older Node, and the repo's.nvmrcsays24, sonvm usepicks it. The real floor comes from Vite 8 and fromnpm run test, which runs TypeScript files directly with Node's built-in type stripping. - Install with
npm ci. It installs the exact versions inpackage-lock.json, the tested set. Usenpm installonly after you changepackage.json. - A browser with WebGL2, which every current browser has. MapLibre 6 dropped WebGL1, so a device without WebGL2 gets no map.
A clean npm ci prints no warnings and reports 0 vulnerabilities. If that changes, npm outdated and npm audit show what moved.
What each dependency is for¶
Runtime (shipped in the built app, some only loaded when a project uses them):
| Package | Used for |
|---|---|
maplibre-gl |
The map |
react, react-dom |
The interface |
zustand |
App state (the store) |
pmtiles |
PMTiles layers |
flatgeobuf |
FlatGeobuf layers |
@duckdb/duckdb-wasm |
GeoParquet, duckdb and mvt layers; loaded only when a project has one |
esri-gl |
Esri map and feature services; loaded only when a project has one |
@mapbox/mapbox-gl-draw |
The Draw and Measure widgets |
@turf/turf |
Measurements and layer bounds |
hyparquet-writer |
GeoParquet export; loaded on first export |
react-markdown |
The info modal; loaded when it opens |
re-resizable |
Resizable popups |
Development only: vite and @vitejs/plugin-react (dev server and build), tailwindcss, @tailwindcss/vite and @tailwindcss/typography (styles; typography styles the info modal), typescript, eslint with typescript-eslint and the React hooks and refresh plugins, and the @types/* packages.
Deliberate holds and overrides¶
| What | Why |
|---|---|
@duckdb/duckdb-wasm pinned to 1.33.1-dev65.0 |
The npm next build of DuckDB 1.5.6; its extensions must match the core version exactly |
TypeScript stays on 6.0 (~6.0) |
typescript-eslint doesn't support TypeScript 7 yet |
overrides: esri-gl → our maplibre-gl |
esri-gl declares MapLibre 5 or older, but only calls the map it's given, so it works with MapLibre 6 |
overrides: postcss-selector-parser 7.1.6 for @tailwindcss/typography |
A security fix the plugin's pinned version doesn't have |
overrides: node-domexception → @nolyfill/domexception |
A deprecated Node-only polyfill pulled in by esri-gl; never bundled for the browser |
allowScripts: { fsevents: false } |
fsevents (Vite's file watcher on macOS) ships a prebuilt binary, so its install script isn't needed |
Other ranges are ^ with the floor at the tested version, so npm install on a fresh package.json stays close to what was tested; the lockfile pins the exact tree.
Python (optional, separate from the app)¶
- Data conversion scripts (
convert-data-python/):requirements.txtpins geopandas, pyarrow and ipykernel. See Converting Data. - This docs site (
docs/):requirements.txtpins zensical. After upgrading it, re-runscripts/breakpoints.py(seedocs/README.md).