Migrating from TiTiler 1.x to 2.0¶
Note
This migration guide was generated with the help of Claude AI
This document describes the breaking changes and migration steps required when upgrading from TiTiler 1.1.1 to 2.0.0.
Overview¶
TiTiler 2.0.0 introduces several breaking changes primarily focused on:
- Tile sizing: Replaced
tile_scalewith directtilesizeparameter - Dependency simplification: changed per-asset band indexes (
bidx) option for multi-asset readers - rio-tiler 9.0 compatibility: Removed
MultiBandTilerFactoryand related classes
Breaking Changes¶
1. Tile Size Parameter Changes¶
Removed: tile_scale and @{scale}x suffix¶
The tile_scale parameter and @{scale}x URL suffix have been removed from all endpoints.
Before (1.x):
GET /tiles/WebMercatorQuad/10/512/384@2x.png?url=...
GET /tilejson.json?url=...&tile_scale=2
GET /map.html?url=...&tile_scale=2
GET /WMTSCapabilities.xml?url=...&tile_scale=2
After (2.0):
GET /tiles/WebMercatorQuad/10/512/384.png?url=...&tilesize=512
GET /tilejson.json?url=...&tilesize=512
GET /map.html?url=...&tilesize=256
GET /WMTSCapabilities.xml?url=... # can't overwrite tilesize anymore
New: tilesize query parameter¶
A new tilesize query parameter is available for tile and tilejson endpoints:
| Endpoint | Old Default | New Default |
|---|---|---|
/tiles/{tms}/{z}/{x}/{y} |
256x256 (scale=1) | TileMatrix's tileHeight x tileWidth |
/tilejson.json |
256 | 512 |
/map.html |
256 | 256 |
Migration Steps:
1. Replace @2x suffix with tilesize=512 query parameter
2. Replace @4x suffix with tilesize=1024 query parameter
3. Replace tile_scale=N with tilesize=N*256 query parameter
4. Update any client code that constructs tile URLs with scale suffix
2. Dependency Class Renames¶
Several dependency classes have been renamed to reflect their simplified functionality.
Renamed Classes¶
| Old Name (1.x) | New Name (2.0) |
|---|---|
AssetsBidxExprParams |
AssetsExprParams |
Migration Steps:
# Before (1.x)
from titiler.core.dependencies import AssetsBidxExprParams, AssetsBidxExprParamsOptional
# After (2.0)
from titiler.core.dependencies import AssetsExprParams
Removed Classes¶
The following classes have been removed entirely:
titiler.core.dependencies.AssetsBidxParamstitiler.core.dependencies.BandsParamstitiler.core.dependencies.BandsExprParamsOptionaltitiler.core.dependencies.BandsExprParams
Migration Steps:
If you were using BandsParams or BandsExprParams with a custom MultiBandReader:
- Consider migrating to a MultiBaseReader approach with assets
- Or use expressions to select specific bands
3. Removed Functions¶
The following functions have been removed:
titiler.core.dependencies.parse_asset_indexes()titiler.core.dependencies.parse_asset_expression()
These were used internally for parsing asset_indexes and asset_expression query parameters.
4. Removed: MultiBandTilerFactory¶
The MultiBandTilerFactory class has been completely removed because MultiBandReader is no longer available in rio-tiler 9.0.
Before (1.x):
from titiler.core.factory import MultiBandTilerFactory
from rio_tiler.io import MultiBandReader
class MyBandReader(MultiBandReader):
...
tiler = MultiBandTilerFactory(reader=MyBandReader)
Migration Steps:
- Convert your
MultiBandReaderto aMultiBaseReaderthat exposes bands as assets - Use
MultiBaseTilerFactoryinstead
# After (2.0)
from titiler.core.factory import MultiBaseTilerFactory
from rio_tiler.io import MultiBaseReader
class MyAssetReader(MultiBaseReader):
# Expose bands as assets
...
tiler = MultiBaseTilerFactory(reader=MyAssetReader)
5. assets parameter is mandatory for MultiBaseReader¶
Info and statistics¶
/info and /statistics endpoints now require assets= parameter to be set. Users can use special notation assets=:all: to get info/statistics for all assets.
Before (1.x):
GET /stac/info?url=...
After (2.0):
GET /stac/info?url=...&assets=:all:
Expression¶
The expression parameter cannot be used to define assets and thus assets parameter must be provided.
Before (1.x):
GET /stac/tiles/WebMercatorQuad/10/512/384.png?url=...&expression=B02_b1+B03_b1
After (2.0):
GET /stac/tiles/WebMercatorQuad/10/512/384.png?url=...&assets=B02&assets=B03&expression=b1+b2
6. bidx Parameter Ignored for MultiBaseReader¶
The bidx (band index) parameter is now ignored by MultiBaseTilerFactory endpoints. Previously, you could use bidx to select bands across all assets.
Before (1.x):
GET /stac/tiles/WebMercatorQuad/10/512/384.png?url=...&assets=B02&assets=B03&bidx=1
After (2.0):
Use new asset notation: assets={AssetName}|indexes=1,2,3
GET /stac/tiles/WebMercatorQuad/10/512/384.png?url=...&assets=B02|indexes=1&assets=B03|indexes=1
7. Removed: asset_indexes and asset_expression Options¶
The asset_indexes and asset_expression query parameters have been removed from dependencies.py.
Before (1.x):
GET /stac/preview.png?url=...&asset_indexes=data|1,2,3
GET /stac/preview.png?url=...&asset_expression=data|b1*b2
After (2.0):
Use new asset notation: assets={AssetName}|indexes=1,2,3 or assets={AssetName}|expression=b1*2
GET /stac/preview.png?url=...&assets=B01|indexes=1,2,3
GET /stac/preview.png?url=...&assets=B01|expression=b1*2
8. Extension Changes¶
COG and STAC Viewers¶
The cogViewerExtension and stacViewerExtension now force tilesize=256 in their tile requests.
WMTS Capabilities¶
The tile_scale parameter has been removed from /WMTSCapabilities.xml endpoints in both titiler.extensions and titiler.mosaic.
API Endpoint Changes Summary¶
| Endpoint Pattern | Change |
|---|---|
/tiles/{tms}/{z}/{x}/{y}@{scale}x |
Removed - Use tilesize query param |
/tiles/{tms}/{z}/{x}/{y}@{scale}x.{format} |
Removed - Use tilesize query param |
/tilejson.json?tile_scale=N |
Removed - Use tilesize=N*256 |
/map.html?tile_scale=N |
Removed - Use tilesize=N*256 |
/WMTSCapabilities.xml?tile_scale=N |
Removed |
Code Migration Checklist¶
- Replace all
@{scale}xtile URL suffixes withtilesizeparameter - Replace
tile_scalequery parameter withtilesize - Update imports:
AssetsBidxExprParams→AssetsExprParams - Remove usage of
AssetsBidxParams,BandsParams,BandsExprParams,BandsExprParamsOptional - Migrate
MultiBandTilerFactoryusage toMultiBaseTilerFactory - Remove
bidxparameter from multi-asset requests (useexpressioninstead) - Remove
asset_indexesandasset_expressionparameters - Use
assets=:all:for/infoand/statisticsendpoints forMultiBaseTilerFactory
Dependency Updates¶
TiTiler 2.0 requires: - rio-tiler >= 9.0
Make sure to update your pyproject.toml accordingly.
Need Help?¶
If you encounter issues during migration: - Check the CHANGES.md for detailed release notes - Open an issue at https://github.com/developmentseed/titiler/issues