GitHub - Lionel-Lim/asciimap: asciimap is a browser-based ASCII cartography app that renders live map features

2 min read Original article ↗
█████╗  ███████╗ ██████╗██╗██╗    ███╗   ███╗ █████╗ ██████╗
██╔══██╗██╔════╝██╔════╝██║██║    ████╗ ████║██╔══██╗██╔══██╗
███████║███████╗██║     ██║██║    ██╔████╔██║███████║██████╔╝
██╔══██║╚════██║██║     ██║██║    ██║╚██╔╝██║██╔══██║██╔═══╝
██║  ██║███████║╚██████╗██║██║    ██║ ╚═╝ ██║██║  ██║██║
╚═╝  ╚═╝╚══════╝ ╚═════╝╚═╝╚═╝    ╚═╝     ╚═╝╚═╝  ╚═╝╚═╝

asciimap is a hobby project for experimenting with ASCII cartography in the browser.

demo.mp4

Try the live demo at https://lionel-lim.github.io/asciimap/.

Rendering modes

asciimap now supports two renderers:

  • Canvas: the original canvas-based ASCII renderer with proportional label and aircraft overlays.
  • Text: a native DOM text renderer using IBM Plex Mono, with selectable and copyable map output.

Text mode keeps the map in plain text form instead of stretching glyphs to match the canvas renderer. City names, landmark names, and aircraft are stamped directly into the ASCII grid, so copied text includes the same labels and aircraft arrows shown on screen.

Aircraft in text mode are rendered with 8-direction arrows:

Text mode controls

  • Drag normally to select text.
  • Hold Space and drag inside the map to pan the view.
  • Use the text-mode Zoom In and Zoom Out controls to adjust the map view.
  • After focusing the map, Cmd/Ctrl+A selects the map text instead of the whole page.

Stack

  • SvelteKit (static build via @sveltejs/adapter-static)
  • Pretext
  • MapLibre GL JS

Development

Useful commands:

npm run check
npm run lint
npm run test
npm run build

Aircraft feed note

Aircraft data is fetched directly from Airplanes.live in the browser using its /v2/point/{lat}/{lon}/{radius} endpoint. The app converts the current map viewport into a center point and nautical-mile radius, so it remains deployable on GitHub Pages without a proxy.

Airplanes.live currently allows unauthenticated browser access for non-commercial use, documents a 1 request / second rate limit, and provides no SLA or uptime guarantee. If the feed is unavailable or rate-limited, the map still renders and the aircraft layer shows an error status.

Credits

Data sources

Open-source libraries

License

This repository is licensed under AGPL-3.0-only.

If you run a modified public version of this app over a network, the AGPL requires that you also make the corresponding source available.