* Implement headless rendering * Simplify window traits * Simplify and fix headless rendering * Rename HttpClient * Ignore wasm-pack output * Refactor stages and context * Rename runnable to eventloop and fix variable names * Fix tests * Add pipeline draft * Start implementing pipeline steps * Use pipeline in headless rendering * Improve the style significantly. The colors are taken from the default OSM map style * Start working on a specific headless API * Refactor thread state and pipeline * Refactor thread state and pipeline * Fix web * Remove mem::replace usage * Improve pipeline types * Simplify pipeline API * Add comment * Fix tests * Remove dynamic dispatch for schedule * Add Run Test config * Revive old legacy webworker example * Fix resize detection * Cleanup dependencies and simplify bounds * Conditionally enable create_png * Add some comments and rename * Run more tests in CI * Fix tests for various platforms * Install missing dependency
Project State
This project is in a proof-of-concept state. The proof of concept is done except for text rendering. The Rust ecosystem is suited very well for this project.
In the future, this project could be adopted and supported by Maplibre to implement a next-gen mapping solution.
Description
maplibre-rs is a portable and performant vector maps renderer. We aim to support web, mobile and desktop applications. This is achieved by the novel WebGPU specification. Plenty of native implementations are already implementing this specification. On the web, it is implemented by Firefox, Chrome and Safari. There are also standalone implementations that directly use Vulkan, OpenGL or Metal as a backend. Those backends allow maplibre-rs to run on mobile and desktop applications.
Rust is used as a Lingua-franka on all platforms. This is made possible by WebAssembly, which allows us to use Rust for web development.
The goal of maplibre-rs is to render maps to visualize data. Right now the goal of maplibre-rs is not to replace existing vector map renderers like Google Maps, Apple Maps or MapLibre. The current implementation serves as a proof-of-concept of the used technology stack. It is unclear whether the high-performance requirements of rendering maps using vector graphics are achievable using the current stack.
Talk: World in Vectors
https://user-images.githubusercontent.com/905221/163552617-5db04c66-23e3-4915-87c1-25185d96730a.mp4
(YouTube)
Current Features
- Runs on Linux, Android, iOS, macOS, Firefox and Chrome
- Render a vector tile dataset
- Simple navigation powered by winit
- Multithreaded on all platforms
- Querying feature data
Missing Features
- Rendering Text
- Per-Feature Rendering
- Rendering:
- Labels
- Symbols
- Raster data
- 3D terrain
- Hill-shade (DEM)
- Collision detection
- Support for:
- GeoJSON
- API for:
- TypeScript
- Swift
- Java/Kotlin
Building & Running
Clone the project
git clone https://github.com/maplibre/maplibre-rs.git
Build and run it on a desktop
cargo run -p maplibre-demo
More information about building for different platforms can be found here.
Rust Setup
Install rustup because this is the recommended way of setting up Rust toolchains.
The toolchain will be automatically downloaded when building this project. See ./rust-toolchain.toml for more details about the toolchain.
Documentation
This generates the documentation for this crate and opens the browser. This also includes the documentation of every dependency.
cargo doc --open
You can also view the up-to-date documentation here.