Skip to content

GISPulseThe Declarative Geospatial Engine

Rules-as-config for your spatial data. What dbt is to data, GISPulse is to GIS. v1.1.1 available — 117 capabilities.

GISPulseGISPulse
v1.1.1

GISPulse v1.1.1 is available. 117 capabilities (vector, attributes, classification, spatial statistics, clustering, 3D pointcloud, raster, network, PostGIS SQL), 3,600+ tests, multi-backend DuckDB/PostGIS engine, Prometheus metrics.

Install now
Open source AGPL-3.016+ formats3,600+ tests4 deployment modesPython 3.10+
117spatial capabilities
3engines (DuckDB / PostGIS / Hybrid)
1JSON file to describe it all
0server install in portable mode

The problem with current tools

What you deal with today

  • FME — 5,000 to 15,000 EUR/year per seat. Perpetual licenses deprecated in 2025. Total vendor lock-in.
  • QGIS Processing — Excellent for interactive use, but not headless, no API, no server mode or scheduling.
  • PostGIS alone — Powerful engine, but raw SQL to maintain, no native rule versioning, steep learning curve.
  • GeoPandas scripts — Flexible, but imperative: every change requires a developer, impossible to audit by a non-dev.

What GISPulse brings

  • Declarative JSON rules that your GIS team can read, modify and version without writing a single line of Python.
  • A portable engine — no database required. Run a processing job on any machine in 60 seconds.
  • The power of PostGIS when you need it — same rules, same file, just a different engine.
  • A REST API and Python SDK included — integrate GISPulse into your existing pipelines, ETLs, and apps.
FME: 5,000–15,000 EUR/yearGISPulse Community: free

A spatial pipeline in 5 lines

Identify parcels in flood zones, compute their area, and export statistics by municipality — all in a single rules file:

json
[
  {
    "name": "parcelles_a_risque",
    "capability": "spatial_join",
    "params": {
      "input": "parcelles.gpkg",
      "ref_layer": "zones_inondables.gpkg",
      "predicate": "intersects",
      "columns": ["niveau_risque"]
    }
  },
  {
    "name": "surface_par_commune",
    "capability": "spatial_aggregate",
    "params": {
      "input": "parcelles_a_risque",
      "ref_layer": "communes.gpkg",
      "predicate": "within",
      "agg": { "parcelle_id": "count", "surface_m2": "sum" }
    }
  }
]
bash
# Portable mode — no database required
gispulse run rules.json --engine duckdb

# API mode
curl -X POST http://localhost:8000/jobs \
  -d @rules.json

# SDK mode
from gispulse import GISPulse
gp = GISPulse()
result = gp.run("rules.json")
Same rules file, three execution modes: local CLI, REST API, Python SDK.

Three steps, zero friction

1

Import your data

GPKG, GeoJSON, Shapefile, GeoParquet, CSV, WFS... GISPulse reads everything, no prior conversion needed. The engine automatically adapts the schema.

2

Declare your rules

A JSON file describes the complete pipeline: capabilities to apply, parameters, execution order. Versionable under Git.

3

Export in the same format

The result is written in the original format. No database to manage, no conversion. Your files remain your files.

117 capabilities, ready to use

Vector — geometry

  • buffer, clip, union, dissolve, centroid, reproject
  • convex_hull, concave_hull, alpha_shape, voronoi_polygons, delaunay_triangulation
  • simplify, chaikin_smooth, offset_curve, line_merge, line_substring

Cross-layer analysis & overlay

  • spatial_join, intersects, spatial_aggregate, filter, nearest_neighbor
  • overlay_intersection, overlay_union, erase, merge_layers, classify_by_ring

Attributes & reshape

  • add_field, drop_field, rename_field, cast_field, attribute_join
  • case_when, coalesce_fields, lookup_table, pivot, unpivot
  • sort, deduplicate, random_sample, top_n

Classification & styling

  • classify (jenks / quantile / std_dev / pretty), classify_categorical
  • head_tail_breaks (Jiang 2013), normalize (log1p / minmax / zscore)
  • choropleth, bivariate_choropleth, continuous_ramp, graduated_size

Spatial statistics & clustering

  • morans_i, getis_ord_g, spatial_weights, kde_heatmap
  • cluster_kmeans, cluster_dbscan, cluster_hdbscan
  • grid_create, hexgrid_create

Topology & validation

  • topology_check, duplicate_geometry, attribute_validation, completeness_check
  • polygon_fix_gaps, polygon_fix_overlaps, polygon_remove_slivers
  • network_snap_endpoints, network_node_lines, network_remove_pseudo_nodes

3D pointcloud

  • pointcloud_load_las — LAS / LAZ to GeoDataFrame
  • pointcloud_filter_classification — ASPRS codes
  • pointcloud_zonal_height — building / canopy heights
  • pointcloud_grid_summary — Z statistics per grid cell

Raster & network (Pro)

  • zonal_stats, raster_clip, raster_reproject, ndvi, change_detection
  • shortest_path, isochrone, od_matrix, network_allocation, connectivity_check
  • postgis_sql — parameterized SQL query on PostGIS

Portable or persistent — same rules

📁

Portable mode

No database required. GISPulse spins up a temporary DuckDB engine in memory, executes your rules on your files, and writes the result in the original format.

GPKG in → DuckDB (memory) → GPKG out
  • Zero server installation
  • Works offline and in CI/CD
  • Output format = input format
  • Ideal for scripts, one-shots, batch ETL
📗

Persistent mode

Connect PostGIS. The same rules become real-time triggers, continuous pipelines, spatial materialized views.

PostGIS ↔ active triggers ↔ live results
  • Real-time spatial triggers
  • Continuous pipelines with scheduling
  • Multi-user with RBAC
  • Ideal for servers, APIs, dashboards

Pricing

Community (free, AGPL-3.0), Pro and Enterprise plans are available — see the pricing page.

Interested in volume licensing or early-adopter pricing? Contact us.

GISPulse vs the alternatives

CriteriaGISPulseFMEQGIS ProcessingPostGIS alone
PriceFree (AGPL)5–15k EUR/yearFreeFree
DeclarativeNative JSONVisual GUIGUI + scriptsRaw SQL
Portable modeEmbedded DuckDBNoDesktop interfaceNo
Server modePostGIS / APIFME Flow ($$)NoYes
CLI / headlessYesPartialNopsql only
REST APIIncludedPaidNoNot native
Versionable (Git)Native (JSON)XML exportNon-standardSQL migrations
Python SDKIncludedPaidPyQGIS scriptspsycopg2/SQLAlchemy
QGIS PluginYesYesNativeNo
Cloud-nativeS3, Docker, K8sFME Cloud ($$)NoSelf-managed
FME remains an excellent tool for complex graphical workflows. GISPulse targets teams that want to automate, version, and deploy their spatial processing in a modern pipeline. Detailed comparison →

Published under AGPL-3.0 license.