~mil/mepo

Fast, simple, and hackable OSM map viewer for Linux. Designed with the Pinephone & mobile linux in mind; works both offline and online.

#75 cannot download noninteractively from custom source

~julianuu filed ticket on mepo-tickets todo

2 months ago

#74 Build fails on OpenSuse Tumbleweed with latest available zig (version 0.10.1)

~mil commented on mepo-tickets todo

4 months ago

#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, features a minimalist both touch/mouse and keyboard compatible interface, and offers a UNIX-philosophy inspired underlying design, exposing a powerful command language called Mepolang capable of being scripted to provide things like custom bounding-box search scripts, bookmarks, 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
  • UNIX-philosophy inspired design - scriptability via mepolang:
    • Mepo's UI is built to do one thing well: download & render maps. Extra functionality is enabled via its command language / API (Mepolang).
    • Reduces overall application logic complexity, handing over to shell-scripting integral features like map bounding-box searches, location search lookup, bookmarking, dropping pins, routing, rebinding keys, and more.
    • Uses single abstraction (central pin API via Mepolang) for indicating and placing user-defined coordinates graphically on the map (e.g. same mechanism used generically between POI searches, bookmarks, routing, etc.)
    • Existing OSM tools for search & routing like the Nominatim, Overpass, and GraphHopper APIs are integrated through bundled shell scripts; customize to your heart's content or write your own scripts for custom integrations.
    • Bundled scripts utilize menuing and user input functionality via zenity rather then implementing application-specific input logic.
  • 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.milesalan.com

#Releases

The most current release is 1.2.0 which builds against zig 0.11.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.