All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Note: Minor version 0.X.0 update might break the API, It's recommended to pin tipg to minor version: tipg>=0.1,<0.2
1.3.1 - 2026-02-26
- fix: bbox filter when collection's geometry is not in EPSG:4326 CRS
1.3.0 - 2025-11-17
- switch to official python docker image from
bitnami - add
FactoryExtensiontoEndpointsFactory - rename
viewer_endpointfunction tomap_viewerbreaking change - rename
/viewerendpoint to/map.htmlbreaking change - changed container image to use non-root
user - update minimum python version to 3.11
- add python 3.14 support
- switch to UV for development
1.2.1 - 2025-08-26
- update
starlette-cramjamrequirement to>=0.4,<0.6
1.2.0 - 2025-07-23
-
remove
request: RequestinCollection.featuresandCollection.get_tileabstract methods -
pass a
asyncpg.ConnectiontoPgCollection.featuresandPgCollection.get_tileinstead of aRequestobject -
switch
pg_get_collection_indexinput fromasyncpg.BuildPgPooltoasyncpg.Connectionobject
1.1.2 - 2025-07-02
- fix
relvalues for tiling scheme links
1.1.1 - 2025-06-13
- remove
tipg_schemaalias inDatabaseSettingsto support env variable settings
1.1.0 - 2025-05-06
- update geojson-pydantic requirement to
>=1.0,<3.0
1.0.1 - 2025-03-17
- fix typo when using catalog_ttl
1.0.0 - 2025-03-07
- add
tilesetsandviewerlinks in/collectionsand/collections/{collectionId}response links - add the ability to use a schema other than pg_temp for installing catalog functions (using
TIPG_DB_APPLICATION_SCHEMAenvironment variable) - re-use pg connection for
features_countandfeatures - add
tipg.collections.Collectionabstract base class
-
rename
tipg.collections.Collection -> tipg.collections.PgCollectionbreaking change -
update
Collection.get_tile()andCollection.features()signature to expectrequest: Requestas first parameter breaking change -
rename
tipg.collections.get_collection_indextotipg.collections.pg_get_collection_indexand change the function to useDatabaseSettingsinstance directly instead of keyword option breaking change -
update
tipg.collections.pg_get_collection_indexto return a list of PgCollection instead of a Catalog breaking change -
update
tipg.collections.register_collection_catalogto passdb_settingstopg_get_collection_indexfunction breaking change -
remove deprecated tiles endpoint with default TileMatrixSet
-
rename tilejson endpoint from
/collections/{collectionId}/{tileMatrixSetId}/tilejson.jsonto/collections/{collectionId}/tiles/{tileMatrixSetId}/tilejson.jsonbreaking change -
rename stylejson endpoint from
/collections/{collectionId}/{tileMatrixSetId}/style.jsonto/collections/{collectionId}/tiles/{tileMatrixSetId}/style.jsonbreaking change -
change
database.connect_to_dbinput order breaking change# Before async def connect_to_db( app: FastAPI, settings: Optional[PostgresSettings] = None, schemas: Optional[List[str]] = None, user_sql_files: Optional[List[pathlib.Path]] = None, **kwargs, ) -> None: # Now async def connect_to_db( app: FastAPI, *, schemas: List[str], tipg_schema: str = "pg_temp", user_sql_files: Optional[List[pathlib.Path]] = None, settings: Optional[PostgresSettings] = None, **kwargs, ) -> None:
- fix URL in HTML templates when behind proxy
0.10.1 - 2025-03-04
- remove
PostgresSettingsinitialization from main.py
0.10.0 - 2025-02-20
- convert tile bbox into collection's CRS for
MVTwhere selection (author @callsumzg, #205)
0.9.0 - 2025-01-17
-
fix serialization of UUID columns (author @giorgiobasile, #199)
-
Unify Docker images (deprecate
tipg-uvicorn) -
Remove
python3.8support -
Add
python3.13support
0.8.0 - 2024-10-17
- update
starlette-cramjamdependency and set compression-level default to 6 - update
morecantiledependency requirement to allow6.x
0.7.3 - 2024-09-16
- add
TIPG_SORT_COLUMNSsettings to enable/disable columns sorting (default toTrue) (author @mattdiez-at, #187) - fix
protomaps-leafletversion in HTML template (co-author @bmcandr, #190)
0.7.2 - 2024-08-27
- move back to
fastapidependency
0.7.1 - 2024-05-07
- move to
fastapi-slimto avoid unwanted dependencies
0.7.0 - 2024-04-01
- update leaflet version
- add
templated=Truein template URL links - add
(Template URL)in template URL links title - remove deserialization in
tipg.factory.create_html_responsefunction - add
titleoption tocreate_html_responsemethod, in order to set the web page title - add
**kwargstocreate_html_responsemethod to allow custom object to be passed to the template - fix url/path passed to the HTML template
- fix HTML templates when passing Query Parameters
- replace
maplibrewithleaflet+protomaps-leafletto support other TMS in the HTMLviewer - deprecate non-tilematrixset prefixed endpoints for tiles/tilejson/stylejson/viewer to better match with the OGC Spec breaking
- re-order endpoints
- remove Z limit to support negative values
0.6.3 - 2024-02-02
- update pydantic's
Fieldusage to avoid 3.0 deprecation - update starlette's `TemplateResponse' usage to avoid deprecation
0.6.2 - 2024-01-19
- add
root_pathAPI settings - fix invalid
urlparsing in HTML responses
0.6.1 - 2024-01-11
- use
spatial_extentanddatetime_extentconfiguration options inCatalogUpdateMiddlewareand/refreshendpoint (author @hrodmn, #164)
0.6.0 - 2024-01-09
- update FastAPI version lower limit to
>0.107.0and adapt for new starlette version - fix invalid streaming response formatting
- refactor internal table properties handling
- fix sub-model Table settings (#154)
0.5.8 - 2024-01-10
- fix invalid streaming response formatting [backported from 0.6.0]
0.5.7 - 2024-01-08
- add
tagsto all routes - fix
collectionsanditemsHTML templates to keep query-parameters when changing thepage size - update FastAPI version upper limit to
<0.107.0to avoid starlette breaking change (0.28)
0.5.6 - 2023-12-19
- Fix collections
prevlinks and collections html templates
0.5.5 - 2023-12-19
- Fix
prevoffset value
0.5.4 - 2023-12-19
- Fix decimal error for streaming responses (author @RemcoMeeuwissen, #148)
0.5.3 - 2023-11-29
- add Postgres
datetype as valid datetime column type
0.5.2 - 2023-11-28
- add
TIPG_DB_SPATIAL_EXTENTandTIPG_DB_DATETIME_EXTENTenvironment options to control iftipgwill scan the tables for spatio-temporal extents (author @hrodmn, #143)
0.5.1 - 2023-11-15
- fix for using
is nullin CQL2 filter (#140)
0.5.0 - 2023-11-02
-
add
py.typedfile -
add
tipg.collections.ItemListandtipg.collections.CollectionListTypedDictclass ItemList(TypedDict): """Items.""" items: List[Feature] matched: Optional[int] next: Optional[int] prev: Optional[int] class CollectionList(TypedDict): """Collections.""" collections: List[Collection] matched: Optional[int] next: Optional[int] prev: Optional[int]
-
hide map element in HTML pages when collections/items do not have spatial component (#132)
-
exclude/include tables and functions (#130)
-
split endpoints registration for more customization
# before class OGCFeaturesFactory(EndpointsFactory): def register_routes(self): @self.router.get("/collections", ...) @self.router.get("/collections/{collectionId}", ...) ... # now class OGCFeaturesFactory(EndpointsFactory): def register_routes(self): self._collections_route() self._collection_route() self._queryables_route() self._items_route() self._item_route() def _collections_route(self): @self.router.get("/collections", ...) ...
-
Collection.features()method now returns anItemListdict#before collection = Collection() features_collection, matched = collection.features(...) #now collection = Collection() items_list = collection.features(...) print(items_list["matched"]) # Number of matched items for the query print(items_list["next"]) # Next Offset print(items_list["prev"]) # Previous Offset
-
rename
catalog_dependencyattribute tocollections_dependency -
move the
collections_dependencyattribute from theEndpointsFactorytoOGCFeaturesFactoryclass -
move
/collectionsQueryParameters in theCollectionsParamsdependency -
rename
CatalogParamstoCollectionsParams -
the
CollectionsParamsnow returns aCollectionListobject -
move
s_intersectsandt_intersectsfunctions fromtipg.factorytotipg.dependencies
0.4.4 - 2023-10-03
- replace
string_to_table(...)byunnest(string_to_array(...))to support Postgres<14
- update pydantic minimum version to >=2.4
0.4.3 - 2023-08-28
- forward
catalog_dependencyinOGCFeaturesFactoryandOGCTilesFactorywhen usingEndpointsfactory - allow Factory's prefix with path parameter
- changed
database_urltype inPostgresSettingsto always be ofpydantic.PostgresDsntype postgres_porttype inPostgresSettingsto be ofintegertype- remove additional
/prefix for dbname when constructing the database url from individual parameters
- changed
function_parameters_queryandproperties_filter_queryfrom dependencies to simple callabe
0.4.2 - 2023-08-24
- replace stamen basemap by OSM in tiles viewer
limitoption isless than or equal toto theMAX_FEATURES_PER_QUERYconfiguration (instead ofless than)
0.4.1 - 2023-08-04
- set
custom_sql_directoryinCustomSQLSettingstoNoneto ensure it can be properly optional
0.4.0 - 2023-08-01
-
update requirement to switch to pydantic~=2.0
- morecantile>=5.0,<6.0
- pydantic~=2.0
- pydantic-settings~=2.0
- geojson-pydantic>=1.0,<2.0
- fastapi>=0.100
-
move
ResponseType,QueryablesResponseType,ItemsResponseType,ItemResponseType,VectorResponseType,VectorTypeandFilterLangfromtipg.enumstotipg.dependenciesand useLiteralinstead ofEnum -
add
funcattribute toCatalogUpdateMiddlewareto allow custom Catalog Update function# Before app.add_middleware( CatalogUpdateMiddleware, ttl=300, ) # Now app.add_middleware( CatalogUpdateMiddleware, func=register_collection_catalog, ttl=300, )
-
add global variables for conformance classes
- remove usage of pydantic models in
/itemsand/items/{itemId}endpoints to increase performance
0.3.1 - 2023-07-28
- fixed wrong media type option for
/queryablesendpoint (jsoninstead of `schemajson``)
- more endpoints in performance benchmarks
0.3.0 - 2023-07-27
- added
python-dotenvdependency viapydantic[dotenv] typequery parameter to filter collections based on their type (FunctionorTable)- fixed a small bug in the
tipg_propertiesSQL function where the bounds property was not properly transformed to 4326 (author @RemcoMeeuwissen, #87) - handling functions that are interpreted as collections but lack parameters (author @jackharrhy, #96)
- fixed a bug where Numeric/Decimal postgres datatype could not get serialized by orjson. They will now be encoded as string (author @RemcoMeeuwissen, #89)
- added popups to leaflet maps on
itemsanditempage. (author @krishnaglodha & @jackharrhy, #91, #94) catalog_dependencyto retrieve the list of collections (defaults totipg.dependencies.CatalogParams)
- pin
geojson-pydanticto>=0.4.3,<1.0to avoid geojson-pydantic breaking changes - pin
pydanticto~=1.0
0.2.0 - 2023-06-22
-
rename
tipg.db->tipg.database -
rename
tipg.dbmodel->tipg.collections -
rename
tipg.dbmodel.Database->tipg.collections.Catalog -
move
register_collection_catalogfromtipg.dbmodeltotipg.collections# before from tipg.db import close_db_connection, connect_to_db from tipg.db import register_collection_catalog from tipg.dbmodel import Database, Collection # now from tipg.collections import Catalog, Collection from tipg.collections import register_collection_catalog from tipg.database import close_db_connection, connect_to_db
- remove useless
app.state.db_settings
0.1.0 - 2023-06-15
- Initial release