Martin is a Rust-based tile server and toolkit from the MapLibre project that generates vector tiles on the fly from PostgreSQL/PostGIS databases and GeoJSON files, serves tiles from PMTiles, MBTiles and GeoParquet sources, and ships command-line tooling for bulk tile generation and MBTiles maintenance, aimed at teams that self-host map tiles under heavy traffic.
What it is
Martin is an open-source tile server and a set of supporting tools, distributed under the MapLibre organisation with documentation at martin.maplibre.org and maplibre.org/martin. It is written in Rust, listed in this registry under Infrastructure & Operations / Databases, and the registry records its licence as Apache-2.0, while the README states that it is licensed under either Apache License 2.0 or the MIT license, at the user's option. Beyond serving tiles, it also serves styles and generates sprites and font glyphs on the fly, so a map client can point at a single Martin instance for both tiles and the assets a style needs.
The concrete problem it solves is the glue code that usually sits between a spatial database and a tile cache. Martin reads PostGIS databases and automatically discovers compatible tables and functions, which removes the need to hand-write a layer definition for every table. It converts GeoJSON files to vector tiles on the fly, so there is no separate pre-rendering step, and it can pass tiles through from an upstream HTTP tile server or combine several sources into one composite source. For offline work, the martin cp subcommand generates tiles in bulk from any Martin-supported source into an MBTiles file, and the mbtiles tool examines, copies, validates, compares and applies diffs between MBTiles files. The project explicitly optimises for speed and heavy traffic.
Key capabilities
- Serve vector tiles from PostGIS databases, automatically discovering compatible tables and functions.
- Serve PMTiles from local files and over HTTP, and serve MBTiles files.
- Convert GeoJSON files to vector tiles on the fly, and read GeoParquet files via DuckDB (unstable).
- Passthrough tiles from an upstream HTTP tile server, and combine multiple tile sources into one composite source.
- Serve styles and generate sprites or font glyphs on the fly.
- Generate tiles in bulk into an MBTiles file with the
martin cp subcommand.
- Examine, copy, validate, compare and apply diffs between MBTiles files with the
mbtiles tool.
Who uses it and how
- Teams serving map tiles under heavy traffic, the workload Martin is built and optimised for, running the Rust server themselves instead of a hosted tile service.
- Operators whose authoritative geodata already lives in large PostgreSQL/PostGIS databases: Martin discovers compatible tables and functions and publishes them as vector tiles without a separate export step.
- Teams shipping MBTiles or PMTiles artifacts to browser clients, which the topic list indicates through maplibre-gl-js, mapbox-gl-js and leaflet; Martin serves those files directly, including PMTiles over HTTP.
- Pipelines that need a portable tile archive:
martin cp produces a bulk MBTiles file from any supported source, and the mbtiles tool validates and diffs those archives afterwards.
- Operators who need to front or merge existing tile services, using passthrough and composite sources rather than re-rendering data.
Getting started
Install the martin crate published on crates.io, following the Installation page at maplibre.org/martin/installation/, then run it with the CLI or a configuration file; the Quick Start at maplibre.org/martin/quick-start/ covers the shortest path.
How it compares
No paid products or comparable tools are named in the facts provided for this registry entry. Martin therefore stands alone in this registry on the comparison axis.
When to use it — and when not to
A self-hoster must operate PostgreSQL/PostGIS for database sources and DuckDB for GeoParquet, and no hosted option is described in the facts, so the server and its upstream database remain the team's responsibility. GeoParquet support is explicitly marked unstable, and the README also describes a narrower licence position than the registry records, since it offers Apache-2.0 or MIT at the user's option while the registry lists Apache-2.0 only, which is worth confirming before adopting. Teams that do not want to run and maintain a PostGIS instance alongside a Rust service should not pick Martin.