Blazing fast and lightweight PostGIS, MBtiles and PMtiles tile server, tile generation, and mbtiles tooling.
Go to file
Yuri Astrakhan 38d5a55340 Update lock
2023-12-10 02:30:02 -05:00
.cargo-husky/hooks fix pre-push hook script escaping 2023-08-15 15:43:26 -04:00
.github Adjust CI link checker (#1058) 2023-12-09 23:23:43 -05:00
debian Revert doc book links - may break a few new ones (#1018) 2023-11-21 08:06:27 +00:00
demo chore(deps-dev): Bump vite from 4.5.0 to 4.5.1 in /demo/frontend (#1037) 2023-12-06 02:15:55 -05:00
docs Fix SQL comments when func or table is pre-configured (#1045) 2023-12-07 07:24:51 +00:00
martin Minor test update for tile copying 2023-12-09 00:54:23 -05:00
martin-tile-utils Move utils to v0.2, MAX_ZOOM 2023-12-09 10:19:49 -05:00
mbtiles Add tiles table/view validation to mbtiles validate (#1057) 2023-12-10 10:59:14 +08:00
tests Add tiles table/view validation to mbtiles validate (#1057) 2023-12-10 10:59:14 +08:00
.dockerignore Update Docker build process (#1022) 2023-11-23 21:14:32 -05:00
.gitignore add .vscode to gitignroe (#791) 2023-08-02 08:10:01 -04:00
Cargo.lock Update lock 2023-12-10 02:30:02 -05:00
Cargo.toml Move utils to v0.2, MAX_ZOOM 2023-12-09 10:19:49 -05:00
CHANGELOG.md fix spaces 2023-10-12 16:10:24 -04:00
CODE_OF_CONDUCT.md feat: clean up readme and code of conduct (#382) 2022-08-11 07:06:12 -04:00
docker-compose.yml Update Docker build process (#1022) 2023-11-23 21:14:32 -05:00
justfile Fix SQL comments when func or table is pre-configured (#1045) 2023-12-07 07:24:51 +00:00
LICENSE-APACHE Clean up licensing per on-boarding (#364) 2022-07-06 08:25:45 -04:00
LICENSE-MIT Clean up licensing per on-boarding (#364) 2022-07-06 08:25:45 -04:00
logo.png docs: ✏️ add notes on debugging 2019-02-04 20:22:04 +03:00
README.md Add Markdown linting and url check to CI and justfile (#1030) 2023-12-04 22:11:03 +00:00
rustfmt.toml Minor refactor and cleanup (#716) 2023-06-15 18:36:41 -04:00
SECURITY_POLICY.txt Create SECURITY_POLICY.txt (#489) 2023-02-04 19:06:17 -05:00

Martin

Book docs.rs docs Slack chat GitHub crates.io version Security audit CI build

Martin is a tile server able to generate and serve vector tiles on the fly from large PostGIS databases, PMTile, and MBTile files, allowing multiple tile sources to be dynamically combined into one. Martin optimizes for speed and heavy traffic, and is written in Rust.

Additionally, there are several tools for generating tiles in bulk from any Martin-supported sources (similar to tilelive-copy), copying tiles between MBTiles files, creating deltas (patches) and applying them, and validating MBTiles files.

See Martin book for complete documentation.

Installation

See installation instructions in the Martin book.

Prerequisites: If using Martin with PostgreSQL database, you must install PostGIS with at least v3.0+, v3.1+ recommended.

You can download martin from GitHub releases page.

Platform AMD-64 ARM-64
Linux .tar.gz (gnu)
.tar.gz (musl)
.deb
.tar.gz (musl)
macOS .tar.gz .tar.gz
Windows .zip

If you are using macOS and Homebrew you can install martin and mbtiles using Homebrew tap.

brew tap maplibre/martin
brew install martin

Running Martin Service

See running instructions in the Martin book.

Martin supports any number of PostgreSQL/PostGIS database connections with geospatial-enabled tables and tile-producing SQL functions, as well as PMTile and MBTile files as tile sources.

Martin can auto-discover tables and functions using a connection string. A PG connection string can also be passed via the DATABASE_URL environment variable.

Each tile source will have a TileJSON endpoint.

Examples

# publish all tables and functions from a single database
export DATABASE_URL="postgresql://user:password@host:port/database"
martin

# same as above, but passing connection string via CLI, together with a directory of .mbtiles/.pmtiles files
martin postgresql://user:password@host:port/database path/to/dir

# publish all discovered tables/funcs from two DBs
# and generate config file with all detected sources
martin postgres://... postgres://...  --save-config config.yaml

# use configuration file instead of auto-discovery
martin --config config.yaml

Docker Example

See Docker instructions in the Martin book.

Martin is also available as a Docker image. You could either share a configuration file from the host with the container via the -v param, or you can let Martin auto-discover all sources e.g. by passing DATABASE_URL or specifying the .mbtiles/.pmtiles files.

export PGPASSWORD=postgres  # secret!
docker run -p 3000:3000 \
           -e PGPASSWORD \
           -e DATABASE_URL=postgresql://user@host:port/db \
           -v /path/to/config/dir:/config \
           ghcr.io/maplibre/martin --config /config/config.yaml

API

See API documentation in the Martin book.

Martin data is available via the HTTP GET endpoints:

URL Description
/ Status text, that will eventually show web UI
/catalog List of all sources
/{sourceID} Source TileJSON
/{sourceID}/{z}/{x}/{y} Map Tiles
/{source1},…,{sourceN} Composite Source TileJSON
/{source1},…,{sourceN}/{z}/{x}/{y} Composite Source Tiles
/sprite/{spriteID}[@2x].{json,png} Sprites (low and high DPI, index/png)
/font/{font}/{start}-{end} Font source
/font/{font1},…,{fontN}/{start}-{end} Composite Font source
/health Martin server health check: returns 200 OK

Documentation

See Martin book for complete documentation.

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.