Crates
API documentation lives on docs.rs and is not duplicated here. This page is the map: what each crate is for, and which one to read.
| Crate | crates.io | docs.rs | Role |
|---|---|---|---|
ezu |
crates.io | docs.rs | Umbrella crate: re-exports plus feature flags. Start here. |
ezu-core |
crates.io | docs.rs | Tile and world coordinates, deterministic seeding. |
ezu-features |
crates.io | docs.rs | GIS feature parsing — MVT via geozero, GeoJSON. No remote fetch. |
ezu-style |
crates.io | docs.rs | Style spec parser (serde). Pure data, no rendering. |
ezu-graph |
crates.io | docs.rs | Typed node-DAG evaluator: cache, pad propagation, Rayon parallelism. No rendering deps. |
ezu-paint |
crates.io | docs.rs | Painting primitives, the built-in ops, host glue (PNG/WebP, asset banks, fonts). |
ezu-translate |
crates.io | docs.rs | Lower other engines’ styles into ezu recipes. MapLibre GL is the first frontend. |
ezu-cli |
crates.io | docs.rs | The ezu binary: rendering, translate, check, graph, schema, serve. |
ezu-wasm |
— | — | WebAssembly bindings, published to npm as @reearth/ezu. Not published to crates.io. |
ezu-compare |
— | — | Internal benchmark: convert a MapLibre style, render it, pixel-compare against maplibre-gl-js. Not published. |
Sister repositories
Section titled “Sister repositories”| Project | What it is |
|---|---|
maplibre-expr |
Pure-Rust MapLibre expression parser and evaluator, 100 % conformance against the official spec fixtures. Its own repository and crate. |
hokusai |
The brush engine behind fill-dabs, line, and friends. |
The dependency shape
Section titled “The dependency shape”ezu-style (parse) ──┐ ├──> ezu-graph (evaluate) ──> ezu-paint (the ops + host glue)ezu-core (coords) ──┘ │ezu-features (MVT/GeoJSON) ────────────────────────────────┘
ezu-translate ──> emits ezu-style JSONezu-cli / ezu-wasm ──> hostsTwo boundaries are worth knowing:
ezu-graphhas no rendering dependencies.tiny-skia,hokusai, andlibblurall live inezu-paint, which registers the concrete ops. That is why a custom op in your own crate is a first-class citizen — see custom ops.ezu-styledoes not evaluate anything. Parsing gives you aDocument, which is data.build_graphturns it into something executable.
Feature flags
Section titled “Feature flags”On the umbrella crate:
| Feature | Effect |
|---|---|
parallel |
pulls in Rayon and enables Evaluator::render_parallel. Leave off for wasm. |
ezu-cli additionally has heap-profile, which writes dhat-heap.json for
allocation-site attribution.
Versioning
Section titled “Versioning”All published crates are versioned together with the workspace (currently
0.9.x) and released as a set, so ezu 0.9.0 expects ezu-graph 0.9.0. Pin the
umbrella crate and let it pin the rest. maplibre-expr versions independently.
Map renders on this site are made fromOpenStreetMap data viaProtomaps (© OpenStreetMap contributors), elevation from Re:Earth Terrain,Mapterhorn andEGM2008 (NGA), and aerial imagery from GSI Japan(© 国土地理院). The painterly styles use CC0 brushes byDavid Revoy.