One Rust binary. All geospatial formats. Vector tiles, raster tiles, PostGIS collections, COG, STAC, and OGC APIs — everything you need to serve maps at scale, with a browser-local AI that actually talks to your data.
brew install vinayakkulkarni/tap/tileserver-rsCapabilities
Native support for modern PMTiles and classic MBTiles tile archives with MVT and MLT format support.
Serve vector tiles directly from PostGIS tables with optimized spatial queries.
Serve raster tiles from COG files with on-the-fly reprojection and colormap support.
Dynamic VRT/COG tile serving via PostGIS functions with query-based filtering.
Serve vector tiles directly from GeoParquet files — no preprocessing. Point at Overture Maps data and get instant tiles.
Generate tiles from SQL queries against embedded DuckDB. Query GeoParquet, CSV, or any format DuckDB reads — PostGIS power, zero ops.
Serve PostGIS tables as OGC-compliant feature collections. CRS reprojection, CQL2 filtering with SQL-injection defence, full CRUD write operations, and JSON Schema introspection. QGIS, ArcGIS, and FME ready.
Point at any STAC API (Element84, Planetary Computer, USGS) and serve COGs as tiles. Static discovery, dynamic per-tile bbox search, and multi-asset mosaic compositing — all without preprocessing.
Built in Rust for maximum performance. Serve tiles with sub-millisecond latency.
On-the-fly MLT↔MVT transcoding. Serve next-gen MapLibre Tiles from existing MVT sources — up to 6x smaller tiles.
Serve vector tiles directly or render them to raster on-the-fly.
Generate static map images like Mapbox Static API with native MapLibre rendering.
Point at a directory or file and start serving. Auto-detects PMTiles, MBTiles, styles, and fonts.
Reload configuration without downtime via SIGHUP or admin API. Zero-request-drop with ArcSwap.
Drop GeoJSON, KML, GPX, CSV, Shapefile, PMTiles, MBTiles, or COG files onto the map for instant visualization with auto-styling.
Interactive OpenAPI spec with Scalar UI. Generate SDKs, import into Postman, or track usage with built-in telemetry.
Per-source cache control headers with configurable max-age, stale-while-revalidate, and CDN-friendly strategies for optimal tile delivery.
Run on your own infrastructure. No vendor lock-in, no API keys required.
Deploy to Railway, Render, DigitalOcean, or Fly.io in minutes. Sample data auto-downloads on first start.
Talk to your maps with a built-in LLM. Runs entirely in your browser via WebGPU — no API keys, no cloud, no token costs.
AI Assistant
Your maps, your GPU, your data. The built-in AI assistant runs entirely in your browser — no API keys, no cloud inference, no per-token billing. Just open the chat and talk to your maps.
Every query stays in your browser. Map data, questions, and results never touch a third-party server.
Runs on your GPU via WebLLM. No server to maintain, no API keys to rotate, no monthly AI bills.
Fly to locations, filter layers, query features, and restyle your map — all by chatting in plain English.
fly_to, fit_bounds, set_layer_paint, query_rendered_features, spatial_query, and more — all callable by the LLM.
You
Show me all buildings in downtown Tokyo
AI
Flying to [139.7670, 35.6812] at zoom 15 ✅ Found 847 building features in viewport Highlighting buildings with height > 100m...
You
Make parks greener and more visible
AI
✅ Set park fill-color to #22c55e, opacity to 0.7
The AI runs a quantized LLM directly on your GPU via WebGPU — the same technology that powers browser gaming. First load downloads the model (~2 GB), then it’s cached in your browser forever.
Benchmarks
Real numbers from Docker-to-Docker benchmarks on ARM64. Single-tile throughput and real-world viewport grid loads — no marketing fluff.
0
ms to fill 4×4 viewport
4× faster than tileserver-gl
0
Grids/sec at z14
PMTiles 4×4 viewport load
0
PostGIS req/sec at z14
7.45ms avg, 410 MB/s throughput
~0
MB/s throughput
Steady across the city zoom band
Configuration
Get started with a simple TOML configuration file. Define your tile sources, styles, and server settings in one place.
# Tile sources
[[sources]]
id = "openmaptiles"
type = "pmtiles"
path = "/data/tiles.pmtiles"
serve_as = "mlt" # MVT→MLT on the fly
# PostgreSQL / PostGIS
[postgres]
connection_string = "postgresql://user:pass@localhost/db"
[[postgres.tables]]
id = "buildings"
table = "buildings"
geometry_column = "geom"API Reference
Simple, standards-compliant API with a built-in OpenAPI spec — something neither tileserver-gl nor martin offer. Explore the API
Every endpoint fully documented with request/response schemas. Generate client SDKs, import into Postman, or browse the Scalar UI.
Compare
We didn’t rebuild these. We rolled them into one binary.
| Feature | tileserver-rs | martin | tileserver-gl | pg_tileserv | titiler |
|---|---|---|---|---|---|
| Vector tiles (MVT/PBF) | ✓ | ✓ | ✓ | ✓ | ✓ |
| MLT transcoding | ✓ | ✗ | ✗ | ✗ | ✗ |
| Raster tiles from COG | ✓ | ✗ | ✗ | ✗ | ✓ |
| Server-side MapLibre rendering | ✓ | ✗ | ✓ | ✗ | ✗ |
| PostGIS-backed tiles | ✓ | ✓ | ✗ | ✓ | ✗ |
| OGC API Features (CRUD) | ✓ | ✗ | ✗ | ◐ | ✗ |
| STAC catalog sources | ✓ | ✗ | ✗ | ✗ | ✓ |
| Browser-local AI | ✓ | ✗ | ✗ | ✗ | ✗ |
| Single binary (no Python deps) | ✓ | ✓ | ✗ | ✓ | ✗ |
| OpenAPI spec built-in | ✓ | ✗ | ✗ | ✗ | ✗ |
| Zero-config startup | ✓ | ◐ | ◐ | ◐ | ✗ |
| Drag-and-drop file serving | ✓ | ✗ | ✗ | ✗ | ✗ |
Features as of April 2026. Alternatives may have added features since — check their docs.
Deploy your own tile server in minutes with our comprehensive documentation.