Carri/ole

Carriole

Desktop ETL for geographic data. Flows are built in a visual editor from modifiers written in Python, and every intermediate result can be checked on a table and a map.

Windows and Linux. Free software under the MIT license.

Download Source code
A flow in the editor; below, the output of the buffer node on the table and the map.

What it does

Inspector: features colored by an attribute, synchronized with the table.

Download

Windows 10 / 11 Carriole-Setup.exe
Installer for all users of the computer. It is not code-signed: on the SmartScreen warning, choose “More info”, then “Run anyway”.
Linux x64 Carriole.AppImage
Make the file executable (chmod +x) and run it. No installation or admin rights needed.

Python, GDAL, DuckDB and the projection grids are included. All versions and checksums.

Writing a modifier

A modifier is one Python class in one file. Its parameters become a form in the editor. The file is placed in the plugins folder; no rebuild is needed.

class SurfaceCalculator(Modifier):
    name = "SurfaceCalculator"
    label = "Surface area"
    category = "Geometry"

    class Params(Params):
        attribute: str = "surface"
        unit: Literal["m2", "ha"] = "m2"

    def process(self, batch):
        area = shapely.area(geometries(batch))
        if self.params.unit == "ha":
            area = area / 10_000
        return {"output": batch.append_column(
            self.params.attribute, pa.array(area))}

Libraries used

Data
DuckDB (Spatial), Apache Arrow, GDAL (pyogrio, Rasterio), Shapely / GEOS, PROJ / pyproj, NumPy
Databases
psycopg, python-oracledb, SQLite, SQLAlchemy
Backend
FastAPI, Uvicorn, Pydantic, Typer
Interface
React, React Flow, MapLibre GL JS, CodeMirror, TanStack Virtual, i18next, Zustand, Vite
Desktop application
Electron, electron-builder, uv, python-build-standalone
Maps and data
OpenStreetMap contributors, IGN transformation grids

Components and licenses