ALL SYSTEMS CAVE |
zero trackers · zero cookies open source · agplv3 + mit three devs · one cave hosted in the eu zero trackers · zero cookies open source · agplv3 + mit three devs · one cave hosted in the eu
zéro traceurs · zéro cookies open source · agplv3 + mit trois devs · une cave hébergé en europe zéro traceurs · zéro cookies open source · agplv3 + mit trois devs · une cave hébergé en europe
| PARIS · --:--
corploc CorpLoc
ship it
corploc / tools / kmlcli
// tool · beta ·

your gps traces,
in the terminal.
tes traces gps,
dans le terminal.

Terminal viewer for KML/KMZ files. Full TUI with braille map rendering on an OpenStreetMap tile background, interactive pan/zoom, place names from vector tiles — plus JSON output modes for scripting. No equivalent tool exists. Viewer de fichiers KML/KMZ en terminal. TUI complet avec rendu de carte en braille sur fond de tuiles OpenStreetMap, pan/zoom interactif, noms de lieux depuis les tuiles vectorielles — plus des modes de sortie JSON pour le scripting. Aucun outil équivalent n'existe.

~/cave · kmlcli
$ kmlcli tree multi.kml
→ 📄 Multi Test
→ ├── 📁 Routes
→ │   └── ─ Route 1
→ ├── ◻ Zone A
→ └── ◈ Multi
$ kmlcli info multi.kml
→ {
→   "name": "Multi Test",
→   "placemark_count": 3,
→   "folder_count": 1,
→   "bounding_box": { "min_lon": -1.69, … }
→ }
$ kmlcli multi.kml
→ TUI — braille map over OSM tiles, hjkl to pan
stars
language
latest version
0–14
zoom levels
// 01

how it works

3 steps · no surprises
// 01

install.

cargo install kmlcli — or grab a prebuilt binary from releases. Single static binary, rustls TLS, no openssl headaches.

// 02

open.

kmlcli file.kml launches the TUI: braille-rendered map with OpenStreetMap tiles in the background, your geometries overlaid. hjkl to pan, +/- to zoom from world view to street level, t toggles the tree panel.

// 03

script.

info, list and tree subcommands dump JSON (or --format table) — pipe into jq, batch over a folder of traces. Shell completions for fish, bash, zsh.

// 02

use cases

3 scenarios

hikers & travelers

A folder full of GPS traces from hikes and trips. Find which track is in which file with kmlcli tree, then eyeball the route on the map — without leaving the shell.

geoint / osint

Quick triage of KML exports — Google Earth projects, location timelines, field data — on a headless box over SSH, where no GUI viewer will ever run.

geo pipelines

JSON output makes KML files scriptable: count placemarks, extract bounding boxes, validate batches of files in CI with jq.

// 03

origin story

A folder full of GPS traces from hikes and trips. One evening I just wanted to know which track was in which file. The answer in 2026: open a browser, find some random 'KML viewer online' site, and upload my own file to it. For data sitting on my own disk. mapscii proved years ago that braille maps work in a terminal — but nothing out there could open a KML. So I built it. One command, and the map shows up where I already am.

Un dossier plein de traces GPS de randos et de voyages. Un soir, je voulais juste savoir quelle trace était dans quel fichier. La réponse en 2026 : ouvrir un navigateur, trouver un site 'KML viewer online' douteux, et y uploader mon propre fichier. Pour de la donnée posée sur mon propre disque. mapscii a prouvé il y a des années que les cartes en braille marchent dans un terminal — mais rien ne savait ouvrir un KML. Donc je l'ai construit. Une commande, et la carte s'affiche là où je suis déjà.

// 04

comparisons

honest positioning

mapscii

The proof that terminal maps work — braille OSM rendering since 2017. But it's a map explorer: it can't open a KML/KMZ file. kmlcli is file-first — your data on the map, not just the map.

Google Earth

The reference for KML, and massively overkill to peek into one file. kmlcli won't do 3D flythroughs — it answers what's in this file in one command.

GDAL / ogrinfo

ogrinfo dumps KML metadata and geometries as text — no map. kmlcli gives you both: JSON for scripts, a rendered map for your eyes.

// 05

threat model

Your files never leave your machine. Unlike web-based KML viewers, parsing is fully local — only tile coordinates go out. Tes fichiers ne quittent jamais ta machine. Contrairement aux viewers KML web, le parsing est entièrement local — seules les coordonnées de tuiles sortent.

  • KML/KMZ parsing is 100% local — no upload, ever
  • Tile fetching sends only z/x/y tile coordinates to OpenFreeMap — which reveals the area you're viewing, nothing more
  • TLS via rustls for tile fetches, no telemetry, no analytics
  • Fully offline-capable: without network, your geometries still render (empty background)
// 06

roadmap

what's next
// 07

faq

5 questions
how do you draw a map in a terminal?
Braille characters — each cell packs 2×4 dots, giving 8× the resolution of regular characters. The background comes from OpenStreetMap vector tiles (MVT): fetched from OpenFreeMap, protobuf-decoded, prerendered to segments, and kept in an LRU cache with 4 parallel fetch workers.
what does it support?
KML and KMZ (zipped KML). Points, lines, polygons, multi-geometry, nested folders, styles and StyleMaps. Place names — countries, cities, roads, water bodies — filtered by zoom level.
does it need internet?
Only for the tile background. Your KML renders fully offline — no network, no problem, the geometries still show up. The map background just stays empty.
can I use it in scripts?
Yes — that's half the point. kmlcli info file.kml and kmlcli list file.kml output JSON, tree prints the document structure. Triage a folder of traces without ever opening a UI.
why not just use Google Earth?
Opening a desktop app — or worse, uploading your file to a random KML viewer online website — to peek into one file is friction. kmlcli file.kml is one command, in the terminal you already have open.
> ESC
↑↓ navigate select esc close