IsoMap
Isotopic and paleoecological data standardisation middleware.
IsoMap is an open-source desktop application that automates the standardisation, validation, and export of legacy isotopic and paleoecological datasets for submission to centralised repositories (Neotoma, IsoArcH, PANGAEA, NOAA NCEI, LiPD).
📖 User Guide — full walkthrough with screenshots, workflow steps, and troubleshooting. 📋 Changelog — version history and release notes.
Features
IsoMap provides a 6-tab wizard interface backed by 8 processing engines.
Implementation status is marked next to each engine — several engines
are partial stubs; see CHANGELOG.md for the full list of known
limitations.
- Import Engine ✅: CSV and Excel spreadsheets with automatic encoding detection and type inference.
- Column Mapping Engine ✅: 6-stage fallback pipeline (exact → preferences → fuzzy → semantic embeddings → Valentine ensemble → distribution profiling) to map source columns to 5 target repository schemas. Valentine is now correctly wired against the ≥1.0 API; the semantic stage requires the optional
[ml]extras (SciBERT ONNX, ~400 MB). - Chronology Engine ✅: Auto-detects and normalises uncalibrated/calibrated dates to
cal_BPwith 1950 CE anchor. Note: this is format normalisation only — no radiocarbon calibration (IntCal20 etc.) is performed. - Spatial Verification Engine ✅: Cleans coordinates, displays on interactive Leaflet map, exports bounding box. EPSG:4326 only — no UTM/other CRS transformation yet.
- Validation Engine ✅: Pandera constraint checking with row-level error tracking against schema definitions. Required-field presence is enforced.
- Export Engine ⚠️ partial: CSV, Excel, GeoJSON, JSON, PANGAEA, NOAA, RO-Crate, LaTeX data paper all produce output. LiPD export is non-conformant (missing required LiPD v1.3 fields;
pylipd.load()rejects it). PANGAEA and NOAA exports are template stubs with[INSERT_*]placeholders, not submission-ready files. - Provenance Engine ⚠️ partial:
ProvenanceTrackerclass exists and is unit-tested but is not wired into the RPC pipeline —main.pydoesn't instantiate it. Produces a JSON audit log, not PROV-O RDF as the original scope doc describes. - Automated Data Papers ✅: Jinja2 ESSD-compliant LaTeX manuscript generation.
Technology Stack
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| Frontend | React 19, Vite 7, TypeScript, Leaflet |
| Backend (sidecar) | Python 3.12+, Pandas, Pandera, GeoPandas |
| ML/NLP | SciBERT ONNX (Optimum), RapidFuzz, Valentine |
| Testing | Pytest (backend), Playwright (E2E) |
Getting Started
Prerequisites
- Rust 1.70+ — rustup.rs
- Python 3.12+ —
pip install -e ".[dev]" - Node.js 20+ with npm
Development
cd ui && npm install # Frontend dependencies
npm run tauri dev # Full desktop app with hot-reload
npm run dev # Vite frontend only (no Tauri)
cd src-tauri && cargo build # Rust backend only
Testing
pytest tests/ # Python backend (36 tests)
cd ui && npx playwright test # E2E browser tests (6 tests)
Production Build
./scripts/build-sidecar.sh # PyInstaller standalone binary
cd ui && npm run tauri build # Full desktop app bundle
Bundles output to ui/src-tauri/target/release/bundle/.
Supported Repositories
| Schema | Repository | Fields | Required Fields |
|---|---|---|---|
neotoma_v2 |
Neotoma | 11 | SiteName, Latitude, Longitude, TaxonName, Value |
isoarch_v1 |
IsoArcH | 10 | site_name, latitude, longitude, sample_id, material, d13c |
pangaea |
PANGAEA | 20 | Event, Latitude, Longitude, Parameter, Value, Unit |
noaa |
NOAA NCEI | 24 | SiteName, Latitude, Longitude, Proxy, Proxy_Value, Proxy_Unit |
lipd |
LiPD v1.3 | 24 | dataSetName, SiteName, Latitude, Longitude, PaleoData_VariableName, PaleoData_Value, PaleoData_Unit |
Add custom schemas in data/schemas/ following the JSON Schema format.
Architecture
React invoke() → Rust Tauri commands → sidecar_rpc() → shell wrapper → Python JSON-RPC
The Rust layer (ui/src-tauri/src/lib.rs) exposes 9 Tauri commands that serialise
parameters to JSON-RPC and forward them to the Python sidecar (src/isomap/main.py)
via stdin/stdout. The sidecar processes the request and returns a JSON-RPC response.
Key Files
| File | Purpose |
|---|---|
ui/src-tauri/src/lib.rs |
9 Tauri commands + sidecar_rpc() JSON-RPC helper |
ui/src-tauri/tauri.conf.json |
App config, window, sidecar external binary |
ui/src-tauri/binaries/isomap-sidecar* |
Platform-specific sidecar wrappers |
src/isomap/main.py |
Python JSON-RPC server (stdin/stdout or CLI mode) |
ui/src/api/sidecar.ts |
Frontend API layer (invoke() calls) |
ui/src/App.tsx |
Main React app with shared wizard state |
data/schemas/*.json |
Repository schema definitions |
scripts/build-sidecar.sh |
PyInstaller sidecar binary builder |
License
MIT
Metadata
Release files for isomap-desktop 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| isomap_desktop-0.3.0.tar.gz | 2.7 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| isomap_desktop-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.8 MB
Release files / isomap_desktop-0.3.0.tar.gz
| Download URL | isomap_desktop-0.3.0.tar.gz |
|---|---|
| Size | 2.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5e383b8d51b87474e93f514ba9fba626fdab645914075e396cbf80a11566b7d
|
|
BLAKE2b-256 checksum How to use checksums |
4974566e606fe433f0cf8ecbdce1f06df66ab23a2c4cdc5ce071f46380143cef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 29, 2026.
Transparency logRelease files / isomap_desktop-0.3.0-py3-none-any.whl
| Download URL | isomap_desktop-0.3.0-py3-none-any.whl |
|---|---|
| Size | 52.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f8580cedd73c99bc6e65a9d3523ce7b801701fe5ed91c7025740d4907afa9901
|
|
BLAKE2b-256 checksum How to use checksums |
ea48afd27366b0b5b5f42801d458385d0192c6f451eae763f15ab6b59822e7bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 29, 2026.
Transparency logSecurity for isomap-desktop 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for isomap_desktop-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.