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 →

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.
# CLIcargo install ezu-cli
# Rust librarycargo add ezu
# Browser / Node / Workersnpm install @reearth/ezuezu tile --style https://raw.githubusercontent.com/reearth/ezu/main/crates/ezu/examples/styles/hillshade.json \--tile 11/1813/807 --out fuji.pngThat 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.