Tileserver RS
Available on GitHub Releases Browser-Local AI — no API keys

Serve Vector TilesAt Lightning Speed

High-performance tile server built in Rust. Serve PMTiles, MBTiles, PostGIS, and Cloud Optimized GeoTIFF with a browser-local AI assistant and native MapLibre rendering.

brew install vinayakkulkarni/tap/tileserver-rs

Capabilities

Everything you need to serve vector tiles

Blazing Fast

Built in Rust for maximum performance. Serve tiles with sub-millisecond latency.

PMTiles & MBTiles

Native support for modern PMTiles and classic MBTiles tile archives with MVT and MLT format support.

MLT Transcoding

On-the-fly MLT↔MVT transcoding. Serve next-gen MapLibre Tiles from existing MVT sources — up to 6x smaller tiles.

PostgreSQL / PostGIS

Serve vector tiles directly from PostGIS tables with optimized spatial queries.

Cloud Optimized GeoTIFF

Serve raster tiles from COG files with on-the-fly reprojection and colormap support.

PostgreSQL Out-DB Rasters

Dynamic VRT/COG tile serving via PostGIS functions with query-based filtering.

Vector & Raster

Serve vector tiles directly or render them to raster on-the-fly.

Static Images

Generate static map images like Mapbox Static API with native MapLibre rendering.

Self-Hosted

Run on your own infrastructure. No vendor lock-in, no API keys required.

Zero-Config Startup

Point at a directory or file and start serving. Auto-detects PMTiles, MBTiles, styles, and fonts.

Hot-Reload

Reload configuration without downtime via SIGHUP or admin API. Zero-request-drop with ArcSwap.

Drag & Drop

Drop GeoJSON, KML, GPX, CSV, Shapefile, PMTiles, MBTiles, or COG files onto the map for instant visualization with auto-styling.

One-Click Deploy

Deploy to Railway, Render, DigitalOcean, or Fly.io in minutes. Sample data auto-downloads on first start.

Browser-Local AI

Talk to your maps with a built-in LLM. Runs entirely in your browser via WebGPU — no API keys, no cloud, no token costs.

GeoParquet Source

Serve vector tiles directly from GeoParquet files — no preprocessing. Point at Overture Maps data and get instant tiles.

DuckDB Backend

Generate tiles from SQL queries against embedded DuckDB. Query GeoParquet, CSV, or any format DuckDB reads — PostGIS power, zero ops.

OpenAPI & Analytics

Interactive OpenAPI spec with Scalar UI. Generate SDKs, import into Postman, or track usage with built-in telemetry.

Configurable Caching

Per-source cache control headers with configurable max-age, stale-while-revalidate, and CDN-friendly strategies for optimal tile delivery.

AI Assistant

AI Without the Landlord

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.

Zero Data Leakage

Every query stays in your browser. Map data, questions, and results never touch a third-party server.

WebGPU Powered

Runs on your GPU via WebLLM. No server to maintain, no API keys to rotate, no monthly AI bills.

Natural Language Control

Fly to locations, filter layers, query features, and restyle your map — all by chatting in plain English.

10+ Map Tools

fly_to, fit_bounds, set_layer_paint, query_rendered_features, spatial_query, and more — all callable by the LLM.

AI Chat — browser-local, WebGPU

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

No tokens. No telemetry. No landlords.

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.

  • Works offline after first model download
  • 10+ map tools: navigate, filter, style, query
  • Spatial queries against your tile data
  • Chat history persisted locally in IndexedDB

Benchmarks

Benchmarked & Proven

Real numbers from Docker-to-Docker benchmarks on ARM64. No marketing fluff.

0

PMTiles req/sec

10% faster than tileserver-gl

0

PostGIS req/sec

Matches martin (PostGIS-bound)

0

PostGIS req/sec at z14

7ms avg latency

~0

MB/s throughput

Consistent across zoom levels

Configuration

Simple Setup

Get started with a simple TOML configuration file. Define your tile sources, styles, and server settings in one place.

  • Multiple tile sources (PMTiles, MBTiles, PostGIS, COG)
  • Custom MapLibre GL styles
  • In-memory tile caching with TTL
  • Configurable CORS and connection pooling
config.toml
# 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

RESTful API

Simple, standards-compliant API with a built-in OpenAPI spec — something neither tileserver-gl nor martin offer. Explore the API

Interactive OpenAPI Spec

Every endpoint fully documented with request/response schemas. Generate client SDKs, import into Postman, or browse the Scalar UI.

Vector Tiles

GET/data/{source}/{z}/{x}/{y}.pbf
GET/data/{source}/{z}/{x}/{y}.mlt
GET/data/{source}.json

COG/Raster Tiles

GET/data/{cog}/{z}/{x}/{y}.png
GET/data/{cog}/{z}/{x}/{y}.webp

PostgreSQL Out-DB Rasters

GET/data/{source}/{z}/{x}/{y}.png?satellite=...

Style Rendering

GET/styles/{style}/{z}/{x}/{y}.png
GET/styles/{style}/{z}/{x}/{y}@2x.png

Static Images

GET/styles/{style}/static/{lon},{lat},{zoom}/{w}x{h}.png

Health & Admin

GET/health
GET/ping
POST/__admin/reload

Ready to Deploy?

Deploy your own tile server in minutes with our comprehensive documentation.