Sphere is a geospatial data visualization and editing desktop application built with Tauri (Rust backend) and React/TypeScript (frontend), using MapLibre GL for map rendering. It loads GeoJSON, Shapefile, CSV, GPX, and MBTiles sources.
- Node 24 (managed via Mise)
- Rust 1.92
The app version is stored in files that must stay in sync:
| File | Field | Updated by |
|---|---|---|
apps/sphere/package.json |
version |
npm version |
src-tauri/tauri.conf.json |
version |
scripts/version.js |
src-tauri/Cargo.toml |
version |
scripts/version.js |
src-tauri/Cargo.lock |
version |
cargo update (via hook) |
The script scripts/version.js copies the version from apps/sphere/package.json into tauri.conf.json and Cargo.toml, then runs cargo update to sync Cargo.lock. It runs automatically as the npm version hook on @sphere/app.
-
Bump the version — pick one of
patch,minor, ormajor:npm version patch -w @sphere/app # e.g. 0.9.4 → 0.9.5This command:
- Updates
versioninapps/sphere/package.json - Runs
scripts/version.jsto synctauri.conf.json,Cargo.toml, andCargo.lock - Stages the changed files and creates a commit
- Tags the commit as
v<version>
- Updates
-
Push the tag:
git push --tags
-
GitHub Actions (
publish.yaml) picks up thev*tag and builds macOS and Windows binaries usingtauri-apps/tauri-action. A draft GitHub Release is created with the build artifacts attached. -
Open the draft release on GitHub, edit the release notes, and publish it.
Sphere uses a custom sphere:// protocol to access loaded data sources by ID:
| URL | Description |
|---|---|
sphere://{id} |
Source GeoJSON data |
sphere://{id}/tilejson |
TileJSON metadata |
sphere://{id}/tile?z={z}&x={x}&y={y} |
Tile bytes |
Source IDs are short alphanumeric strings (e.g. K7X2MR) generated when a source is loaded. File-based sources use a SHA-256 digest of the source URL as their ID.


