Dezfil
Get started

Unlock your location
data with AI

Dezfil is a free, open-source tool for geospatial analysis and map publishing. Import a file or connect your database, analyze the data yourself or let AI do it for you, then publish your map and share it with a link.

DezfilMaps/The world's air routes
Lena · just now
AssistantToolsExportPublish
LO
LayersBasemapWidgetsLegend
Add layer
No layers yet. Add one above.

Visualization

Points
Arc
Line
Cluster
Icon
Hex bins
Grid
Heatmap
Point size3
Width1
Layer opacity1

Fill

Color bySingle color
Single color
airlines
distance_km
Color
ScaleClassifiedContinuous
MethodQuantile
Global Warming
AllSequentialDiverging
Steps4
ReversedColorblind safe
New palette
Click a color or boundary to edit it.
Natural Earth · OpenFlights
DezfilMaps/Earthquakes, forty years
Lena · just now
AssistantToolsExportPublish
LO
LayersBasemapWidgetsLegend
Add layer
earthquakes67,510 features

Visualization

Fill

Color bySingle color
ScaleClassifiedContinuous
Depth
plate_boundaries241 features
Earthquakes by year · Histogram
19862025
Records67,510 of 67,510Zoom1.60
Natural Earth · USGS
Assistant
Map Earthquakes, forty yearsLayer earthquakes
Terra
DezfilWorkflows/Where New York's taxis go
Lena · just now
AssistantRun all
LO
Sources 9Tools 21
Search sources…
Workspace tables
taxi_flowson canvas
taxi_zoneson canvas
pickups_by_hour5,794
air_routes18,930
airports3,257
earthquakes67,510
plate_boundaries241
storm_tracks1,083
world_cities48
Add data
taxi_flows2,500 rows
Filter rowstaxi_flows_filter_rows
Group & summarizetaxi_flows_filter_rows_group_summarize
Join by keybusiest_dropoff_zones
taxi_zones263 rows

Filter rows

Inputs

taxi_flows2,500 rows
The dataset whose rows are kept or dropped.

Parameters

trips
The column the condition reads.
greater_than
How the column is compared against the value.
2000
What to compare against.

Output

taxi_flows_filter_rows
309 rows · LINESTRING
Run all3 nodes run in this order.
  1. Filter rows→taxi_flows_filter_rows
  2. Group & summarize→taxi_flows_filter_rows_group_summarize
  3. Join by key→busiest_dropoff_zones
CancelRun 3 nodes
Messages 0DataMapProvenanceSelect a node or a table to see its dataAll nodesThis node
NYC TLC
DezfilSQL
Assistant
LO
Sources 10History 1
Search 10 tables and their columns…
By personBy project
Tool outputs
busiest_dropoff_zones43
Workspace tables
storm_tracks1,083
storm_points52,273
air_routes18,930
airports3,257
earthquakes67,510
plate_boundaries241
taxi_flows2,500
taxi_zones263
world_cities48
Add data
Snippets⌘/Ctrl + Enter runs · a selection runs alone · ⌘K tables · ⌘/ comment · Ctrl + Space completesClearRun query
TableMapAdd as map layerDownloadSave as dataset
Nothing to show yet
Natural Earth · NOAA IBTrACS

Bring your own agent

Every Dezfil runs an MCP server. Connect Claude Code, Codex, Cursor or another MCP client, and your agent reads and builds your maps, data and workflows, with your account's rights.

Claude Code
$ claude mcp add --transport http dezfil 'http://localhost:3000/api/mcp' --header 'Authorization: Bearer ${DEZFIL_API_TOKEN}'
$ claude
> /mcp
dezfil connected
Make a map of the earthquakes deeper than 300 km, sized by magnitude, and publish it.
list_tables
inspect_tableearthquakes
create_map"Deep earthquakes"
create_layerearthquakes · depth_km > 300
update_layersize by magnitude
publish_map
Done. Deep earthquakes is published: 2,898 earthquakes deeper than 300 km, sized by magnitude. Anyone with the link can open it.
Published

Deep earthquakes

Anyone with the link can open it. No account needed.

dezfil.io/v/deep-earthquakesCopy linkOpen

Connect your database

Dezfil reads a table as a snapshot you can refresh later, filters it on the database, and puts every row in its place. Nothing is written back.

Publish maps in seconds

Publish gives a map a link anyone can open, with no account. Embed gives the code for a web page. Your later edits reach readers on their next load.

trees.csv82,064 rows
Import

CSV, GeoJSON, Shapefiles, a link, Overture Maps, OpenStreetMap or a PostGIS database.

SELECT zone, sum(pickups) …pickups
Query and style

SQL with DuckDB's spatial functions. Points, arcs, hex bins, 3D buildings, flows and time. Basemap, widgets and an editable legend.

Run all2 steps
Keep it running

Workflows chain tools such as Filter rows and Spatial join. Run all repeats the chain when the data changes.

Start your instance

Two commands on any machine with Docker. Your maps and data stay on your machine, in one volume.

  1. 1
    Pull the image
    $docker pull ghcr.io/dezfil/dezfil
    latest: Pulling from dezfil/dezfil
  2. 2
    Run it
    $docker run -d --name dezfil -p 127.0.0.1:3000:3000 -v dezfil-data:/data ghcr.io/dezfil/dezfil
    Dezfil is ready within 30 seconds of starting.
  3. 3
    Open it
    http://localhost:3000Create the first admin account, then make a map.
One containerOne data volumelinux/amd64 · linux/arm64Apache-2.0Docker Compose also works