Starlet
Turn large geospatial datasets into fast, interactive maps. Starlet partitions a GeoParquet / GeoJSON file into spatial tiles, generates Mapbox Vector Tiles, and serves them over HTTP with a built-in web viewer — all from a single command-line tool.
Install
pip install starlet
Requires Python 3.10+. On systems where pip points at Python 2, use pip3:
pip3 install starlet
This installs the starlet command-line tool. Check it:
starlet --version
Quick start
Go from a data file to a live map in two commands:
# 1. Build a dataset: partition into tiles + pre-generate vector tiles
starlet build --input data.parquet --outdir datasets/mydata
# 2. Serve it
starlet serve --dir datasets --port 8765
Open http://localhost:8765 and pick your dataset to explore it on a map.
📖 Read the Guide → — using Starlet inside another project (CLI, Python API, embedded server) and styling the tiles with MapLibre (categorical, gradient, and label recipes, with screenshots).
Commands
Everything runs through the starlet CLI. Run starlet <command> --help for the
full option list.
| Command | What it does |
|---|---|
starlet build |
Full pipeline: partition and generate vector tiles |
starlet tile |
Partition a dataset into spatial Parquet tiles only |
starlet mvt |
Generate vector tiles from an already-tiled dataset |
starlet serve |
Run the HTTP tile server + web viewer |
starlet info |
Print a summary of a dataset (tiles, bbox, zoom levels) |
The options you'll actually use
| Option | Commands | Default | Description |
|---|---|---|---|
--input / --outdir |
build, tile | required | Source file and output dataset directory |
--zoom |
build, mvt | 7 |
Maximum vector-tile zoom level |
--geom-col |
build, tile | geometry |
Geometry column name (use wkb_geometry for OGR/ogr2ogr exports) |
--partition-size |
build, tile | 128mb GeoParquet / 512mb GeoJSON |
Target tile size, e.g. 256mb, 1gb |
--pmtiles |
build, mvt | off | Also export a single .pmtiles archive |
--threshold |
build, mvt | 0 |
Minimum feature count for a tile to be generated |
--dir |
serve, mvt, info | required | Dataset directory (or the root of several, for serve) |
--port |
serve | 8765 |
Port to bind the server |
Examples
# Build to a deeper zoom (more detail when you zoom in)
starlet build --input roads.parquet --outdir datasets/roads --zoom 12
# GeoJSON input, custom geometry column
starlet build --input places.geojson --outdir datasets/places --geom-col wkb_geometry
# Serve a whole folder of datasets; the viewer lists them all
starlet serve --dir datasets --port 8765
# Inspect what got built
starlet info --dir datasets/roads
Input formats
Starlet reads GeoParquet, GeoJSON, and CSV (with either x/y
columns or a WKT column — see starlet tile --help). Source data is assumed to
be longitude/latitude (EPSG:4326); tiles are produced in Web Mercator
(EPSG:3857).
One-file distribution with PMTiles
Pass --pmtiles to pack every generated tile into a single
PMTiles archive — handy for shipping a
dataset as one file or hosting it on static storage:
starlet build --input data.parquet --outdir datasets/mydata --pmtiles
Server API
While starlet serve is running:
| Method | Path | Description |
|---|---|---|
GET |
/ |
Interactive dataset browser |
GET |
/api/datasets |
List available datasets |
GET |
/<dataset>/<z>/<x>/<y>.mvt |
A Mapbox Vector Tile |
GET |
/datasets/<dataset>.json |
Dataset metadata (bbox, zoom range) |
GET/POST |
/datasets/<dataset>/features.<csv|geojson> |
Download features (optional geometry filter) |
GET |
/api/datasets/<dataset>/stats |
Per-attribute statistics |
Tiles are served in tiers — an in-memory LRU cache, then a pre-generated
PMTiles archive or .mvt files on disk, then generated on the fly from the
Parquet tiles when you zoom past the pre-built levels — so you can serve a
dataset even without pre-generating every zoom.
Configuration
Settings you reuse often (partition size, zoom, worker count, …) can live in a
starlet.toml file instead of being passed on every command. Copy
starlet.toml.example to starlet.toml and edit it;
Starlet loads it automatically. CLI flags always override the file. See
docs/CONFIGURATION.md for the full list of keys.
Deploying a server
docs/DEPLOYMENT.md walks through standing up a production tile server, including a no-root recipe behind an existing Apache install.
Using Starlet from Python
starlet is also importable — tile(), generate_mvt(), build(),
export_pmtiles(), and create_app() are documented in
docs/PUBLIC_API.md.
For worked examples — using the CLI or API inside another project, embedding the tile server, and styling the tiles with MapLibre (categorical, gradient, and label recipes) — see the Guide.
Want to work on Starlet itself — run it from a clone, run the tests, or contribute a change? See DEVELOPMENT.md.
License
Starlet is distributed under the MIT License.
Release files for starlet 0.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| starlet-0.4.2.tar.gz | 125.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| starlet-0.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 268.4 kB
Release files / starlet-0.4.2.tar.gz
| Download URL | starlet-0.4.2.tar.gz |
|---|---|
| Size | 125.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
28fc0d546b8b2788714c0a0b98e555727d7e7d02ab7b4a60006e30b0ae727f98
|
|
BLAKE2b-256 checksum How to use checksums |
a600040995da062675e27ec3424d03a8540d0da915344b17c390be23ea06d424
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 10, 2026.
Transparency logRelease files / starlet-0.4.2-py3-none-any.whl
| Download URL | starlet-0.4.2-py3-none-any.whl |
|---|---|
| Size | 142.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
28c480da755868ad4fc64d753973f84563f926600e0f32836f8090139e318db2
|
|
BLAKE2b-256 checksum How to use checksums |
48e4efd9ddd80acc2ec3ef164d241637feddd7d7301d7256afc0f23928110663
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 10, 2026.
Transparency log