48 breaking releases
Uses new Rust 2024
| 0.49.0 | Nov 7, 2025 |
|---|---|
| 0.47.0 | Oct 12, 2025 |
| 0.43.0 | Jul 11, 2025 |
| 0.36.0 | Mar 23, 2025 |
| 0.6.0 | Jul 18, 2023 |
#16 in Geospatial
35,646 downloads per month
Used in 7 crates
(4 directly)
115KB
2.5K
SLoC
Walkers, a map widget for Rust
Walkers is a slippy maps widget for egui, similar to very popular Leaflet, but written in Rust. It compiles to native applications as well as WASM. See the online demo here.

It supports OpenStreetMap, mapbox, and compatible tile servers. There is also experimental support for off-line vector tiles using the PMTiles format.
Before deploying your application, please get yourself familiar with the OpenStreetMap usage policy, and consider donating to the OpenStreetMap Foundation.
Quick start
Walkers has three main objects. Tiles downloads images from a tile map provider
such as OpenStreetMap and stores them in a cache, MapMemory keeps track of
the widget's state and Map is the widget itself.
use walkers::{HttpTiles, Map, MapMemory, Position, sources::OpenStreetMap, lon_lat};
use egui::{Context, CentralPanel};
use eframe::{App, Frame};
struct MyApp {
tiles: HttpTiles,
map_memory: MapMemory,
}
impl MyApp {
fn new(egui_ctx: Context) -> Self {
Self {
tiles: HttpTiles::new(OpenStreetMap, egui_ctx),
map_memory: MapMemory::default(),
}
}
}
impl App for MyApp {
fn update(&mut self, ctx: &Context, _frame: &mut Frame) {
CentralPanel::default().show(ctx, |ui| {
ui.add(Map::new(
Some(&mut self.tiles),
&mut self.map_memory,
lon_lat(17.03664, 51.09916)
));
});
}
}
You can see a more complete example here.
Running demos
Walkers supports numerous build options, such as Android and WASM. They all share
a common library - demo, but require a different build workflow, not
necessarily compatible with Cargo alone.
Native
cargo run
To see vector maps support in action, you need to obtain some .pmtiles
files and put them into the directory from where you run the demo. One way of
doing that is to download an extract from
Protonmaps.
pmtiles extract https://build.protomaps.com/20250928.pmtiles --bbox 16.802768,51.036355,17.209205,51.180686 wroclaw.pmtiles
To enable mapbox layers, you need to define MAPBOX_ACCESS_TOKEN environment
variable before building. You can get one by creating a
mapbox account.
Web / WASM
cd demo_web
trunk serve --release
Android
You need to have Android SDK and cargo-ndk installed.
cd demo_android
make run-on-device
Dependencies
~22–42MB
~661K SLoC