Skip to content
An ezu pencil-sketch render of central Japan

ezu

Render vector tiles as paintings. Pure Rust, no GPU, no headless browser — and it speaks MapLibre.

ezu (絵図) turns vector tiles (MVT / PMTiles) into raster tiles on the CPU. It does this two ways, and does both at once.

Painterly

A declarative node-graph style language drives the hokusai brush engine and ~80 image-processing ops — watercolour, ink wash, ukiyo-e — while the geographic data underneath stays intact. The node graph →

MapLibre-compatible

ezu translate lowers a MapLibre GL style into an ezu recipe, and nodes carry raw MapLibre expressions for data-driven styling. Layer mapping →

CPU, everywhere

No GPU and no browser: a CLI, a Rust library, and a WebAssembly build that renders in a tab or a Worker. Install →

Seamless by construction

Brush dabs are anchored in world coordinates and label collision is shared across tiles, so tile borders don’t show. Tiles and determinism →

Every one is a style document and nothing else — same binary, same data, same tile. The gallery has the recipes.

Terminal window
# CLI
cargo install ezu-cli
# Rust library
cargo add ezu
# Browser / Node / Workers
npm install @reearth/ezu
Terminal window
ezu tile --style https://raw.githubusercontent.com/reearth/ezu/main/crates/ezu/examples/styles/hillshade.json \
--tile 11/1813/807 --out fuji.png

That style pulls its DEM tiles over HTTP, so it needs nothing but the CLI. Render your first tile walks through the rest.

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.