Rendering Maps in Terminals


I’ve been working for years with geospatial data, the ecosystem is vibrant (thanks to DuckDB), but I’ve always missed some tools in the terminal to visually look at geometries in context.

I’ve started to work on a pure Go renderer, in 2025, and after 3 different iterations I finally have an API I’m happy with.

This 3rd iteration was created by DeepSeek Pro for around 1USD, feeding it with my previous attempts.

Maprender

Maprender is a foundation library to render maps.

Give it an MVT source and it will render a canva that can later be saved as a rasterized image or SVG, PDF …

It supports MapBox styles, texts, icons.

style, _ := maprender.FetchStyle("https://tiles.openfreemap.org/styles/liberty")

img, _ := maprender.Render(ctx, maprender.RenderRequest{
    CenterLat:        48.864716,
    CenterLng:        2.349014,
    Zoom:             14,
    Width:            800,
    Height:           600,
    DevicePixelRatio: 1.0,
    Style:            style,
})

Tiletea

I then interfaced Maprender with the Kitty image protocol to display a rendered map in terminals.

Tiletea is a map component for the TUI framework Charm Bubble Tea

tiletea

With this new component, I was able to build the tools I needed: Où & Vduck.

, stands for Where in French, it’s a simple TUI tool to display a location or a geometry, provided as a GeoJSON or WKT/WKB file.

Open the map with a marker at a specific location:

ou -lat 48.8566 -lng 2.3522

Display a file’s geometry. The format is guessed from its content (GeoJSON, WKT, WKB):

ou -file geometry.geojson

Or pipe geometry in on stdin:

cat geometry.geojson | ou

ou

VDuck

Because I’m manipulating a lot of Parquet & Geoparquet files, I have created VDuck.

It’s a terminal UI for DuckDB, designed to work seamlessly with any data provided by DuckDB with support for Quack remote servers & spatial data.

vduck