Simple and Fast Geospatial OGC Features and Tiles API for PostGIS.
Documentation: https://developmentseed.org/tipg/
Source Code: https://github.com/developmentseed/tipg
tipg, pronounced T[ee]pg, is a Python package that helps create lightweight OGC Features and Tiles API with a PostGIS Database backend. The API has been designed for OGC Features and OGC Tiles specifications.
Note This project is the result of the merge between tifeatures and timvt.
Install
python -m pip install pip -U
python -m pip install tipg
# or from source
git clone https://github.com/developmentseed/tipg.git
cd tipg
python -m pip install -e .
OGC Specifications
| Specification | Status | link |
|---|---|---|
| OGC Common Part 1: Core | ✅ | https://docs.ogc.org/DRAFTS/19-072.html |
| OGC Common Part 2: Geospatial Data | ✅ | http://docs.ogc.org/DRAFTS/20-024.html |
| OGC Features Part 1: Core | ✅ | https://docs.ogc.org/is/17-069r4/17-069r4.html |
| OGC Features Part 2: CRS by Reference | ❌ | https://docs.ogc.org/is/18-058r1/18-058r1.html |
| OGC Features Part 3: Filtering / CQL2 | ✅ | https://docs.ogc.org/DRAFTS/19-079r1.html |
| OGC Tiles Part 1: Core | ✅ | https://docs.ogc.org/is/20-057/20-057.html |
Notes:
We chose to avoid implementing the second part of the specification to prevent the introduction of CRS-based GeoJSON. We may review this decision in the future.
While we tried to follow OGC specifications to the letter, some API endpoints might have more capabilities (e.g., geometry column selection).
PostGIS/PostgreSQL
tipg relies greatly on PostGIS' ST_* functions. PostGIS must be installed on your PostgreSQL database.
SELECT name, default_version,installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';
CREATE EXTENSION postgis;
Configuration
To be able to work, the application will need access to the database. tipg uses Starlette's configuration pattern, which makes use of environment variables or a .env file to pass variables to the application.
An example of a .env file can be found in .env.example
# you need to define the DATABASE_URL directly
DATABASE_URL=postgresql://username:password@0.0.0.0:5432/postgis
More info about configuration options at https://developmentseed.org/tipg/user_guide/configuration/
Launch
# Set your PostGIS database instance URL in the environment
export DATABASE_URL=postgresql://username:password@0.0.0.0:5432/postgis
uv run --group server uvicorn tipg.main:app
# or using Docker
docker-compose up app
Docker images
We are publishing two different docker images on tag and on every commit to main branch:
| Gunicorn | |
|---|---|
| main commit | ghcr.io/developmentseed/tipg:latest |
| tags | ghcr.io/developmentseed/tipg:X.X.X |
| dockerfile | /dockerfiles/Dockerfile |
See all version at https://github.com/developmentseed/tipg/pkgs/container/tipg
$ docker run \
-p 8000:8000 \
-e DATABASE_URL=postgresql://username:password@0.0.0.0:5432/postgis \
ghcr.io/developmentseed/tipg:latest \
uvicorn tipg.main:app --host 0.0.0.0 --port 8000 --workers 1
# using Gunicorn
$ docker run \
-p 8000:8000 \
-e DATABASE_URL=postgresql://username:password@0.0.0.0:5432/postgis \
ghcr.io/developmentseed/tipg:latest \
gunicorn -k uvicorn.workers.UvicornWorker tipg.main:app --bind 0.0.0.0:8000 --workers 1
Contribution & Development
See CONTRIBUTING.md
License
See LICENSE
Authors
Created by Development Seed
Changes
See CHANGES.md.
Metadata
Release files for tipg 1.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tipg-1.6.1.tar.gz | 61.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tipg-1.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 151.7 kB
Release files / tipg-1.6.1.tar.gz
| Download URL | tipg-1.6.1.tar.gz |
|---|---|
| Size | 61.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86fe3989969b6464abf3b5b5a54fd2e0744bb1b9cfda63f65ae2c481c995e04d
|
|
BLAKE2b-256 checksum How to use checksums |
075245d134a60314c557302fe2ffecdba8c15abc5678b38ea064cf7894cb2584
|
| 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 Sep 3, 2026.
Transparency logRelease files / tipg-1.6.1-py3-none-any.whl
| Download URL | tipg-1.6.1-py3-none-any.whl |
|---|---|
| Size | 90.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bf0fabdbe272c629f6dab14801e336c45be95af092097344cd6de9010863564a
|
|
BLAKE2b-256 checksum How to use checksums |
e1308e7fe163bd05dfe4b81988ca93719a960116fe22cdf6f0ff1c3c81ed5058
|
| 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 Sep 3, 2026.
Transparency log