Skip to content
    Introducing Skarve Open-source alpha

    Spend less time
    waiting on rasters.

    Skarve is a fast, open-source engine for measuring raster data inside polygons. For the repeated questions behind your maps, notebooks and spatial applications.

    Built in Rust. Use it from Python, Node.js or the CLI.

    Same raster. A different area.
    Centre polygon over an illustrative rasterOrange cells intersect the selected area. Blue cells are outside it. The statistics use fractional cell coverage.
    Centre area
    Sum
    4,981.3
    Mean
    57.92
    Cell coverage
    86.0

    Including the fraction of each cell along the boundary.

    Try another area. This browser illustration uses generated, unitless values—not real-world data or a timed Skarve query.

    Why Skarve

    A new polygon shouldn’t mean starting over.

    How many people live inside this catchment? What is the average rainfall across that region? The area changes. The raster often doesn’t.

    Skarve gives you sums, means, minimums and maximums for the areas you care about. Open a TIFF or Cloud Optimized GeoTIFF directly. For repeated queries, prepare an SKV: a lossless snapshot designed for this kind of work.

    SKV keeps the raster values alongside reusable summaries. Where a query allows it, Skarve combines summaries for the interior and reads individual cells along the boundary.

    How the SKV format works
    Start with what you have

    TIFF / COGQuery an area

    No conversion required.
    Working with the same raster again?

    TIFF / COGSKVKeep querying

    Prepare once. Reuse the snapshot. Preparation takes time and storage; changed data needs a new snapshot.

    Release alpha.4 · 24 September 2026

    How fast is it?

    In this test, SKV with summaries beat the fastest native TIFF/COG control in 16 of 16 scenarios. Explore the workload closest to yours.

    What we tested: two synthetic rasters generated for Skarve’s test suite—513 × 519 cells with 36 bands, and 1,025 × 1,031 cells with 40 bands. These are generated test data, not real-world datasets.

    1,025 × 1,031 cells · 40 bandsMedian query time · shorter is faster

    Skarve + SKVSummaries enabled
    1,618.03 ms
    Best TIFF / COG controlCOG + RSI64
    2,415.34 ms
    exactextractNatural numerical policy
    4,583.00 ms

    Three measurements per configuration. Query time excludes SKV preparation. The exactextract comparison uses a different numerical policy, not bit-identical results.

    All seven configurations for this selection
    Median and observed range, in milliseconds. Three observations per configuration; the range is not a confidence interval.
    ConfigurationMedianObserved range
    Tuned COG3,756.15 ms3,432.33 ms–4,191.24 ms
    COG + RSI2563,412.93 ms3,369.70 ms–3,483.43 ms
    COG + RSI642,415.34 ms2,282.41 ms–2,747.19 ms
    SKV without summaries2,477.63 ms2,303.68 ms–2,610.49 ms
    Skarve + SKV summaries1,618.03 ms1,417.41 ms–1,898.86 ms
    Tuned TIFF5,901.58 ms5,724.42 ms–5,908.29 ms
    exactextract (natural policy)4,583.00 ms3,997.53 ms–4,610.23 ms
    Test conditions, trade-offs and full results

    The setup. Published alpha.4 on one Ubuntu 24.04.4 Linux x86-64 host, with 2 vCPUs and 4 GB RAM. Two rasters, four polygon/band workloads, local files and unthrottled loopback HTTP. Seven configurations per scenario, three fresh-worker observations each: 336/336 operations passed.

    The clock. Source open through fully consumed results. Raster generation, TIFF/COG preparation, indexing, SKV compilation, imports and installation are outside query time. OS caches were not evicted. Loopback is not a WAN or Cloudflare R2 test.

    The trade-offs. Summaries beat the same SKV with summaries disabled in 10 of 16 scenarios; the raw path was faster in the others. SKV is not always smaller than its source. Native configurations share a numerical contract; natural exactextract has its own policy. This is not a claim of bit-identical answers or a prediction for your data.

    All 16 comparisons
    Median milliseconds, three observations per configuration. Best control is the fastest measured TIFF, COG, RSI64 or RSI256 configuration, not an additional timed run.
    Raster / accessPolygons / bandsSKV summariesSKV rawBest controlexactextract
    36-band rasterLoopback HTTP1 / 141.84 ms36.68 ms78.76 msTuned TIFF80.84 ms
    36-band rasterLocal1 / 115.73 ms13.36 ms47.83 msTuned TIFF57.96 ms
    36-band rasterLoopback HTTP8 / 165.76 ms62.80 ms88.35 msTuned TIFF97.86 ms
    36-band rasterLocal8 / 125.56 ms25.74 ms62.75 msCOG + RSI25693.59 ms
    36-band rasterLoopback HTTP1 / 36478.78 ms345.42 ms747.14 msTuned TIFF505.48 ms
    36-band rasterLocal1 / 36380.43 ms268.44 ms453.54 msTuned COG464.63 ms
    36-band rasterLoopback HTTP8 / 36593.00 ms637.95 ms1,187.62 msTuned COG1,150.48 ms
    36-band rasterLocal8 / 36542.24 ms641.18 ms842.50 msCOG + RSI2561,063.41 ms
    40-band rasterLoopback HTTP1 / 174.66 ms147.61 ms117.68 msCOG + RSI6499.60 ms
    40-band rasterLocal1 / 129.58 ms41.18 ms80.17 msCOG + RSI6495.01 ms
    40-band rasterLoopback HTTP8 / 1171.79 ms168.95 ms204.11 msTuned TIFF213.80 ms
    40-band rasterLocal8 / 167.23 ms108.73 ms121.32 msCOG + RSI256204.85 ms
    40-band rasterLoopback HTTP1 / 401,019.96 ms1,184.60 ms2,831.83 msTuned TIFF2,208.92 ms
    40-band rasterLocal1 / 40928.36 ms1,065.95 ms1,492.69 msCOG + RSI641,829.08 ms
    40-band rasterLoopback HTTP8 / 401,798.23 ms2,765.86 ms4,406.39 msTuned COG4,793.43 ms
    40-band rasterLocal8 / 401,618.03 ms2,477.63 ms2,415.34 msCOG + RSI644,583.00 ms

    Try Skarve

    Bring your own raster.

    Start with a file and a polygon. You don’t need an SKV to make your first query.

    This alpha builds from source. Validated on Ubuntu 24.04, Linux x86-64. Set up Rust 1.98.1, a C compiler, pkg-config, GDAL and libdeflate development files first. Prebuilt binaries are not yet available. Windows and macOS are not yet qualified. Installation guide ↗
    pip install --pre skarve-engine==0.1.1a4
    System prerequisites and CLI names

    Python requires 3.10+; Node.js requires 20+. Use a Python virtual environment. After installing Rust and your language runtime, install the Ubuntu build dependencies:

    sudo apt-get update && sudo apt-get install --no-install-recommends build-essential pkg-config libgdal-dev libdeflate-dev python3-venv python3-dev

    Python installs the skarve CLI. Cargo installs raster-engine. A first source build takes minutes; the measurement notes record installation times separately from query times.

    A first query in Python

    Use your own raster.tif and area.geojson. The area must be a GeoJSON Polygon or Feature in the same coordinate system as the raster; this example does not reproject it.

    It reads the first band and asks the native engine for a sum and mean. Replace the TIFF path with a prepared SKV later—the query stays the same.

    Read the walkthrough
    Python raster.tif + area.geojson
    import json
    from skarve import Skarve
    
    with open("area.geojson", encoding="utf-8") as file:
        area = json.load(file)
    zone = area["geometry"] if area.get("type") == "Feature" else area
    
    with Skarve() as engine:
        with engine.infuse("raster.tif") as raster:
            result = raster.carve(
                zone=zone, bands=[0],
                metrics=["sum", "mean"], backend="native",
            )
            print(result["bands"][0]["fractional_sum"])

    Built by Florent Chif

    Made for Horizon Mapper.
    Open for your next project.

    Skarve grew out of work on Horizon Mapper, where choosing another area on a map means asking another question of the data. It is now a standalone engine you can use in your own applications.

    Open source under Apache-2.0. Still in alpha, with an experimental SKV format and an open development process.

    The qualified Belgium and France integration uses Skarve with SKV where eligible and COG fallback. Application performance is separate from the benchmark above.