Skip to content

Nimbus

A GPU-accelerated vector map renderer built on wgpu (WebGPU). Nimbus fetches Mapbox Vector Tiles from Woosmap's tile API, decodes the protobuf-based MVT format, and renders polygons, lines, points, icons, and text labels using GPU shaders.

Features

  • WebGPU rendering via wgpu — runs on Metal, Vulkan, DX12, and WebGPU in the browser
  • Mapbox style JSON support with fill, line, symbol, and background layer types
  • Expression engine for data-driven styling (interpolate, step, match, case, let/var, arithmetic, string ops)
  • Google Maps styler compatibility for HSL-based color transforms and POI visibility control
  • SDF text rendering with PBF glyph atlases, text wrapping, variable anchors, and halo effects
  • Icon/sprite rendering with SDF + RGBA dual-mode fragment shader
  • Symbol collision detection with fade-in/fade-out animations
  • Globe projection at low zoom levels (toggle with G key)
  • Raster tile layer support (satellite imagery as textured quads)
  • Dual-target: native desktop (winit) and WASM (web workers for tile decode/tessellation)
  • iOS support via UniFFI Swift bindings and xcframework
  • Tile-relative Mercator encoding for f32 GPU precision at high zoom levels

Quick Start

# Clone and run
git clone <repo-url>
cd wgpu-triangle
cargo run

This opens a window displaying a map centered on Montpellier, France. Use the mouse to pan and scroll to zoom. Press G to toggle globe mode.

Build Targets

Command Description
make build Debug build
make run Build and run the desktop app
make test Run all tests
make wasm Build WASM package (release, SIMD128)
make xcframework Build iOS xcframework + Swift bindings
make doc Build rustdoc
make doc-serve Serve this documentation site locally

See Getting Started for prerequisites and detailed build instructions.