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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file starlet-0.4.2.tar.gz.
File metadata
- Download URL: starlet-0.4.2.tar.gz
- Upload date:
- Size: 125.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28fc0d546b8b2788714c0a0b98e555727d7e7d02ab7b4a60006e30b0ae727f98
|
|
| MD5 |
1e394fa0e22c4b2c68532d82e20a1747
|
|
| BLAKE2b-256 |
a600040995da062675e27ec3424d03a8540d0da915344b17c390be23ea06d424
|
Provenance
The following attestation bundles were made for starlet-0.4.2.tar.gz:
Publisher:
publish.yml on ucr-bdlab/starlet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
starlet-0.4.2.tar.gz -
Subject digest:
28fc0d546b8b2788714c0a0b98e555727d7e7d02ab7b4a60006e30b0ae727f98 - Sigstore transparency entry: 2413308477
- Sigstore integration time:
-
Permalink:
ucr-bdlab/starlet@9803aeba30a40d547a18014b82f26da8b440a88d -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/ucr-bdlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9803aeba30a40d547a18014b82f26da8b440a88d -
Trigger Event:
push
-
Statement type:
File details
Details for the file starlet-0.4.2-py3-none-any.whl.
File metadata
- Download URL: starlet-0.4.2-py3-none-any.whl
- Upload date:
- Size: 142.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28c480da755868ad4fc64d753973f84563f926600e0f32836f8090139e318db2
|
|
| MD5 |
17573630be0d2a4a133feb6aee005698
|
|
| BLAKE2b-256 |
48e4efd9ddd80acc2ec3ef164d241637feddd7d7301d7256afc0f23928110663
|
Provenance
The following attestation bundles were made for starlet-0.4.2-py3-none-any.whl:
Publisher:
publish.yml on ucr-bdlab/starlet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
starlet-0.4.2-py3-none-any.whl -
Subject digest:
28c480da755868ad4fc64d753973f84563f926600e0f32836f8090139e318db2 - Sigstore transparency entry: 2413308507
- Sigstore integration time:
-
Permalink:
ucr-bdlab/starlet@9803aeba30a40d547a18014b82f26da8b440a88d -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/ucr-bdlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9803aeba30a40d547a18014b82f26da8b440a88d -
Trigger Event:
push
-
Statement type: