1
0
Fork 0
mirror of https://github.com/coko7/osomty.git synced 2026-11-05 12:45:37 +00:00
🗺️ Terminal map browser for OpenStreetMap.
Find a file
Coko 862c30cda2
feat(search): fly smoothly to search results and selected places (#5)
* feat(search): fly smoothly to search results and selected places

- animate between views along a van Wijk & Nuij zoom-pan path: zoom out
while traveling, then back in to arrive, taking the short way across
the antimeridian
- duration scales with distance (0.6-3 s)
- used for search results, the command-line query and Enter in the places panel;
any user pan or zoom interrupts the flight
- also fly smoothly when resetting the world view
2026-10-30 13:46:13 +01:00
.github ci: add GitHub Actions for CI, releases and Dependabot 2026-10-28 16:26:45 +01:00
src feat(search): fly smoothly to search results and selected places (#5) 2026-10-30 13:46:13 +01:00
.gitignore feat: add ratatui terminal map browser for OpenStreetMap 2026-10-28 16:05:47 +01:00
Cargo.lock build(deps): bump crossterm from 0.28.1 to 0.29.0 2026-10-30 13:39:53 +01:00
Cargo.toml build(deps): bump crossterm from 0.28.1 to 0.29.0 2026-10-30 13:39:53 +01:00
LICENSE docs: add README and package metadata 2026-10-28 16:19:54 +01:00
README.md feat(search): fly smoothly to search results and selected places (#5) 2026-10-30 13:46:13 +01:00

🗺️ osomty

CI Release

Note

🤖 bip boop ai

This project is vibe coded: it was written almost entirely by an AI coding assistant (Claude Code), with only light human review. Expect rough edges.

Browse the OpenStreetMap world map in your terminal, from continents down to the names of shops, cafés and restaurants on a street.

Inspired by mapscii (telnet mapscii.me), built in Rust with ratatui. The map is drawn with braille characters, and labels are placed so they don't overlap.

       ⠉⠑⠢⢄⡀      ⢰⠁   ⢀⠎  ⠉⠒⢤⣎⠉⠑⠢⢄⡈⠉⠒⠤⣉⠑⠢⢍⡑⠢⢄⡀   ■ Aux chimères de Notre-Dame
           ⠈⠑⠢⢄⡀ ⢠⠃   ⢀⠎ ⡠⠔⠑⠒⠪⣴⡁   ⠈⠑⠢⢄⡀⠉⠒⠤⣈⠑⠢⢌⣑⠢⠤⣀⡸⡲⢄
               ⠈⠑⠣⠤⣀ ⢀⣎⠔⠊  ⢠⠒⠒⠁⠈⠑⠢⢄⡀   ⠈⠑⠢⠤⣀⠉⠒⠤⣀⡉⠒⠤⣱⠁ ⡱⠢⣀ ◆ Crêperie du Cloître
  Parvis Notre-Dame - Place Jean-Paul II    ⠉⠒⠤⣀⠈⠑⢢⢇⡉⡲⠥⣀⡑⠢⢄⡀
                   ⢀⠎    ⢀⠇             ⠉⠒⠤⣀    ⠉⠲⠧⣀⡸⠑⠢⢄⡈⠑⠢⢌⡑⠢⢄⡀         † Archevêché de Paris
        ★ Point zéro des Routes de France   ⠉⠒⠤⣀⡀   ⠉⠒⠢⢄⡈⠑⠢⢄⣈⠑⠢⢌⣑⠒⠤⣀
                 ⢀⠎    ⢀⠎       ★ Tours de Notre-Dame   ⠈⠑⠢⢄⡀⠉⠒⠤⣀⠉⠒⠤⣉⠒⠤⣀
                ⢀⠎    ⢀⠎                            ⠈⠑⠢⢄⡀   ⠈⠑⠢⢄⡀⠉⠒⠤⣀⠉⠒⠤⢍⡒⠤⣀
               ⢀⠎    ⢀⠎                                 ⠈⠑⠒⠤⣀   ⠈⠉⠒⠤⣀⠉⠒⠤⣀⡈⠑⠢⢍⡑⠢⢄⡀ ◆ La Rosace
               ⡎    ⢀⠎ ★ Galerie des Rois                    ⠉⠑⠒⠤⣀   ⠉⠒⠤⣀⠈⠑⠢⢄⡈⠑⠢⠬⣑⠢⢄⡀   ■ Au Jongleur de Notre Dame

Île de la Cité, Paris, at zoom 17. In the terminal, water, parks and buildings are coloured and labels are colour-coded by category.

Features

  • Map data from OpenStreetMap: vector tiles from OpenFreeMap, no API key needed
  • Smooth zoom from the whole world (zoom 0) to street level (zoom 19.5), centred on the mouse cursor
  • Points of interest (shops, restaurants, cafés, bars, museums, pharmacies, …) with a symbol and colour per category, from zoom 15
  • Street names from zoom 15.5, house numbers from zoom 18
  • Filter points of interest by category
  • Nearby places panel listing named places on screen, nearest first
  • Place search with Nominatim, or jump to lat, lon coordinates. The map flies to the result, zooming out to travel and back in to arrive
  • Tiles download in the background, and a lower-zoom version is shown until the detailed one arrives
  • Downloaded tiles are cached on disk, so areas you've already seen work offline

Installation

Prebuilt binaries for Linux (x86_64, aarch64), macOS (Intel, Apple Silicon) and Windows (x86_64) are attached to each GitHub release. Download the archive for your platform, extract it, and put osomty on your PATH.

To build from source instead, you need a Rust toolchain (edition 2024, Rust 1.88 or newer):

cargo install --git https://github.com/coko7/osomty

Or from a clone:

git clone https://github.com/coko7/osomty
cd osomty
cargo run --release

The map uses 24-bit colours and braille characters. Use a terminal with truecolor support and a font that has braille glyphs.

Usage

osomty                      # world view
osomty Paris                # search a place and jump to the first result
osomty "Café de Flore"
osomty 48.8530 2.3499       # latitude longitude (zoom 16)
osomty 48.8530 2.3499 18    # latitude longitude zoom

Map keys

Key Action
← ↑ ↓ → / h j k l Pan
+ - / a z Zoom in / out
Mouse drag / wheel Pan / zoom around the cursor
/ or s Search
p Show / hide the nearby places panel
Tab Focus the nearby places panel
f / F Next / previous category filter
Esc Clear the marker
r Back to the world view
? Help
q / Ctrl+C Quit

Nearby places panel

Key Action
↑ ↓ / j k Select a place (highlighted on the map)
Enter Go to the selected place
PgUp PgDn / g Scroll / back to top
Tab / Esc Back to the map
Key Action
Enter Search; press again to go to the selected result
↑ ↓ / Tab Select a result
Ctrl+W / Ctrl+Backspace / Alt+Backspace Delete the previous word
Ctrl+Delete / Alt+D Delete the next word
Ctrl+← Ctrl+→ / Alt+B Alt+F Move by word
Home End / Ctrl+A Ctrl+E Start / end of the line
Ctrl+U / Ctrl+K Delete to the start / end of the line
Esc Close

Place categories

Symbol Category Symbol Category
◆ red Food ▪ Transport
◆ yellow Drinks ★ Culture
■ Shops ▲ Education
+ Health † Worship
$ Money • Other
⌂ Lodging

Data, caching and network

  • Map tiles: OpenFreeMap planet tiles, using the OpenMapTiles schema. The most detailed tiles are at zoom 14, and higher zooms enlarge them.
  • Search: the public Nominatim instance. Each search is one request. Please follow its usage policy.
  • Cache: tiles are stored in your system cache directory (~/.cache/osomty on Linux, ~/Library/Caches/osomty on macOS, %LOCALAPPDATA%\osomty on Windows). Each OpenFreeMap release gets its own folder, and old folders are not cleaned up automatically, so it is safe to delete them.
  • Proxy: HTTPS_PROXY / HTTP_PROXY / ALL_PROXY are respected.

Attribution

Map data © OpenStreetMap contributors, available under the Open Database License. Tiles served by OpenFreeMap. The attribution is shown in the app's status bar.

License

MIT