🌍 Mapryx: A Browser-Native Spatial Data Engine
🧭 Introduction: What is Mapryx?
Mapryx is a geospatial platform that runs entirely inside your browser. It brings a full spatial SQL engine, a high-performance geometry rendering pipeline, and an AI-powered analysis assistant together in a single browser tab — with no server, no installation, and no data uploads required.
Most WebGIS tools follow a client-server model: you upload data to a server, the server processes it, and the browser displays the results. Mapryx inverts this. It treats the browser as the compute environment, not just a display layer. When you drop a file into Mapryx, that file is parsed, indexed, queried, and rendered locally — your data never leaves your machine unless you explicitly export it.
This makes Mapryx a fundamentally different kind of GIS tool. It's closer to having a lightweight desktop GIS that happens to run in a browser tab.
🏗️ System Architecture Overview
Mapryx is organized as a layered pipeline where each stage transforms data closer to what the GPU needs for rendering.
┌─────────────────────────────────────────────────────────────┐
│ Browser Runtime │
│ │
│ ┌────────────────────┐ ┌───────────────────────────┐ │
│ │ Data Sources │ │ AI Agent Layer │ │
│ │ Files / URLs │ │ Natural Language → SQL │ │
│ │ WMS / WFS / ESRI │ │ 18 Spatial Tools │ │
│ │ MVT / OGC API │ │ Context-Aware Execution │ │
│ └────────┬────────────┘ └───────────┬───────────────┘ │
│ ↓ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Spatial SQL Engine (DuckDB-WASM) │ │
│ │ In-memory tables · R-tree spatial indexing │ │
│ │ Spatial functions · Dynamic simplification │ │
│ │ 6000+ coordinate systems · SQL-driven export │ │
│ └─────────────────────┬────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Binary Geometry Pipeline │ │
│ │ WKB parsing → flat coordinate arrays │ │
│ │ Zero-copy GPU handoff · Web Worker threading │ │
│ └─────────────────────┬────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ GPU Rendering (deck.gl + MapLibre) │ │
│ │ Points · Lines · Polygons · Tile layers │ │
│ │ Client-side filtering · Dynamic styling │ │
│ └─────────────────────┬────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ State & Persistence │ │
│ │ Reactive stores · IndexedDB session snapshots │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
📦 Data Handling & Processing
📥 Getting Data In
Mapryx accepts the formats GIS professionals already work with: GeoParquet, GeoJSON, Shapefile, GeoPackage, SpatiaLite, KML, CSV with coordinates, and even pasted WKT text or Google Sheets URLs. Each format is streamed into the spatial SQL engine as a proper database table with typed geometry columns.
For remote data, Mapryx connects directly to OGC and enterprise services — WMS, WFS, MVT vector tiles, Esri Feature Services, Esri Vector Tiles, OGC API Features, and even MapLibre style.json definitions. These remote layers render live without any local processing.
🔍 Querying and Analysis
Once data is loaded, it becomes a fully queryable SQL table. This is not a simplified query interface — it's the full DuckDB analytical SQL engine running in-browser, with the spatial extension providing hundreds of geometry functions: buffers, intersections, unions, distance calculations, coordinate transformations, and aggregate operations like computing the bounding box of an entire layer.
A key optimization is viewport-driven querying. Instead of loading an entire dataset into the renderer, Mapryx uses R-tree spatial indices to extract only the features visible on screen. It also applies dynamic simplification — as you zoom out, complex polygon boundaries are automatically simplified to a level of detail appropriate for the current pixel resolution. This means a 100,000-polygon dataset renders as smoothly at a continental zoom as it does at street level, because the engine only sends what the screen can actually display.
For point datasets, Mapryx goes further with adaptive sampling: at low zoom levels, nearby points are grouped into representative clusters using a spatial grid, preventing millions of overlapping dots from overwhelming the GPU.
⚡ Performance: The Zero-Copy Pipeline
The term "zero-copy" describes how Mapryx avoids the expensive step of converting data between formats. In most WebGIS tools, geometry data is deserialized into JavaScript objects (like GeoJSON), processed, and then re-serialized into a format the GPU understands. Each conversion copies millions of coordinate values through memory.
Mapryx skips this entirely. Geometries come out of the SQL engine as WKB (Well-Known Binary) — a compact, standardized binary format. The geometry parser reads these binaries and writes coordinate values directly into flat numeric arrays (TypedArrays) that the GPU can consume without any further transformation. The GPU reads from the same block of memory that the parser wrote to. No intermediate GeoJSON, no object allocation per feature, no accessor functions per vertex.
This direct binary path is the primary reason Mapryx can render complex datasets with hundreds of thousands of features at interactive frame rates in a browser.
Threading adds another layer: the SQL engine runs in a dedicated background thread, and geometry parsing can be offloaded to a separate worker thread, keeping the main UI responsive even during heavy data loading.
Recommended by LinkedIn
Trade-offs: The browser's memory sandbox is the ceiling. Datasets beyond ~500MB can strain low-memory devices. CPU-intensive spatial operations run at roughly 70% of native desktop speed due to WebAssembly overhead, though this gap is shrinking with each browser release.
🧰 Core Tools
Mapryx provides 13 built-in spatial tools organized into four categories:
Every tool operation is expressed as a spatial SQL query under the hood. Results are materialized as new database tables, automatically indexed, and added as interactive map layers. Data can be exported at any point as GeoJSON, CSV, or Parquet — optionally filtered to only the current viewport.
🤖 The AI Assistant
Mapryx includes a spatial AI assistant that translates natural language into spatial SQL operations. It's not a chatbot that describes what to do — it's an agent that executes operations directly on your data.
The assistant understands the live state of your workspace: which layers are loaded, their column names and types, their geometry columns. When you ask "show me all buildings within 500 meters of the river," it generates the appropriate buffer and intersection operations, runs them against the SQL engine, and adds the result as a new map layer. It can also restyle layers, apply categorization by attribute, filter features, and inspect data schemas.
The assistant works with any OpenAI-compatible API, Google Gemini, or even a local model running on your machine — keeping your data and queries completely private if needed.
🔌 Tools Ecosystem & Extensibility
Every tool in Mapryx is defined as a structured schema that serves a dual purpose: it powers both the visual tool panels that users interact with manually, and the function-calling interface that the AI assistant uses programmatically. This means any tool available in the UI is also available to the AI, and vice versa.
Adding a new spatial operation follows a clean pattern: define the tool's parameters, implement the SQL logic, and connect it. The new tool immediately becomes available to both human users and the AI agent without modifying the rendering or data ingestion layers.
💡 Why Use Mapryx?
For users comparing options: Mapryx trades the editing tools and print cartography of desktop GIS for instant shareability and zero-install deployment. It trades the multi-user collaboration of server-backed platforms for complete data privacy and zero operational overhead.
🛣️ Roadmap
The direction is consistent: expand capability while keeping the browser as the execution platform, not a window into a remote server.
Try it here https://mapryx.geoforger.com