~mil/mepo

Fast, simple, and hackable OSM map viewer for Linux. Designed with the Pinephone & mobile linux in mind; works both offline and online.
Use XDG_CACHE_HOME consistently
Bump version to 1.3.3
Remove unneeded cast, use curl.curl_off_t for progress_dl_{now,total} directly

clone

read-only
https://git.sr.ht/~mil/mepo
read/write
git@git.sr.ht:~mil/mepo

You can also use your local clone with git send-email.

#Mepo

mepo_demo.gif

Mepo is a fast, simple, and hackable OSM map viewer for desktop & mobile Linux devices (like the PinePhone, Librem 5, pmOS devices etc.) and both environment's various user interfaces (Wayland & X inclusive). Mepo works both offline and online, is fast, features a minimalist both touch/mouse and keyboard compatible interface, and offers a simple & powerful JSON API to allow the user to change & add functionality such as adding their own search & routing scripts, add arbitrary buttons/keybindings to the UI, and more.

#Features

  • Fast & usable in resource-constrained environments:
    • Mepo launches quickly and runs quickly on the PinePhone and other resource-constrained devices.
    • Mepo renders using SDL which keeps things fast and lightweight; also as a bonus: portable.
    • Built in a non GC'd language (Zig) with an aim toward careful memory usage and allocations/deallocations
  • Simple JSON API for Scripting & Extending:
    • Mepo's core UI is built out to be as minimal as possible, only handling map rendering, displaying, pins, and simple IO operation (keybinding, mouse callbacks, etc.)
    • Extendeded functionality such as menus & and search integrations (via Nominatim, Overpass), routing (via Mobroute and GraphHopper), and similar are built out utilizing Mepo's extensible JSON API
    • The JSON API allows you to
      • Reposition the map, change tileserver, etc.
      • Change preferences
      • Create arbitrary buttons to run other API commands
      • Create arbitrary keybindings to run other API commands
      • Inject pin data onto the map
      • Modify pin "groups" to collect sets of pins together
      • Create custom user scripts (in any language of your choosing outputting JSON)
      • And more
  • Offline operation as a first-class feature:
    • Downloading of maps for later offline use can be done non-interactively through a command-line flag.
    • Users can download based on a bounding-box or a user-specified radius from a specific point for multiple zoom levels.
    • Offline usage is a primary usecase and should be treated as such, we can't assume a user is always online.
  • Supports touch AND keyboard-oriented operation:
    • A map application must of course be usable with a mouse / touch, but the keyboard as a tool for map navigation has been overlooked in in map applications.
    • Provides vi-like (& customizable) keybindings out-of-the-box.
    • Should be usable in touch-oriented environments like the PinePhone and similar where a physical keyboard isn't present.
    • Compatible across multiple Linux mobile environments including: Phosh, Plasma Mobile, Sxmo, and Swmo. Being written in SDL ensures good support and portability to other future environments as well.

#Documentation Website

Mepo has a documentation website which lives at: mepo.lrdu.org

#Releases

The most current release is 1.3.3 which builds against zig 0.13.x.

Details on releases are available at: releases page.

#Funding

Between October 2021 and October 2022, NLnet kindly awarded a grant to support Mepo's development efforts as part of the NGI0 Discovery Fund under grant agreement No 825322. This funding enabled the financial support for implementing of the roadmap to reach 1.0 as seen in this document. We are very thankful to NLnet for accepting our application and making this development possible!

#Contributing

Mepo is surely welcome to contributors who have experience or interest in mobile Linux, OSM, and/or Zig.

#Packaging Links

Packaging status