Skip to main content

transitio: Transit feeds in and out, ready for routing

Find the right public transport feeds for any city, validated and ready for routing or editing.

transitio is a Python library that helps you to find public transport feeds serving a given city and prepares them for routing. transitio's feed index catalogues the world's public transport feeds in GTFS format and the places they serve (currently listing approximately 150,000 places). The General Transit Feed Specification (GTFS) is the standard format for public transport timetables, used by thousands of transport authorities across the world. With transitio, you can get recommendations on which feeds to use for a given city (and time) and an explanation of why certain feeds should be left out. transitio then helps you to download the recommended feeds, crop them to the given area and validate them to avoid using broken or defective feeds. With transitio, you can also download OpenStreetMap data for the same area (using pyrosm under the hood) if you want to do multimodal routing that combines public transport and walking.

Status: early development.

Installation

pip install transitio

Prebuilt Python packages (wheels) are available for Linux, macOS and Windows. Building from source with pip install . requires a Rust toolchain. To show the download progress bars as widgets in Jupyter, install ipywidgets with pip install "transitio[notebook]". result.to_cafein() also requires cafein; install it with pip install cafein.

Example

import transitio

transitio.index.refresh()             # once: install the feed index

turku = transitio.place("Turku")
rec = turku.recommend()               # which feeds to use, and why
result = transitio.fetch(feeds=rec)   # download, crop and validate

result.paths                          # the feed files
result.osm_pbf                        # the OpenStreetMap extract
network = result.to_cafein()          # a network to route on (needs cafein)

What can you do with transitio?

  • Find places and their feeds. Look up a city, metro area, region or country by name and list the feeds that serve it, from local to international (Finding places).
  • Choose the feeds to use. recommend() considers the feeds that serve a place, selects which to use and explains why it leaves the others out (Choosing feeds).
  • Fetch the data. Download the feeds for a place, a box or any polygon and crop them to that area. Also download an OpenStreetMap extract of the area (Fetching data).
  • Reuse downloads. Every feed that fetch downloads is kept in a cache. This lets the same analysis use the same feeds again, even offline (The download cache).
  • Check, repair and edit feeds. Validate any GTFS feed with the notice codes of the canonical GTFS validator. Repair defects that can be fixed without changing the trips riders see. Edit a feed with undo and redo (Working with a GTFS feed).
  • Crop and merge feeds. Cut a feed to an area or a date range, merge several feeds into one, or replace a feed's broken trips with those of another (Cropping and merging feeds).
  • Build scenario feeds. Turn routes drawn in a GIS tool and their headways (how often they run) into a GTFS feed (Building scenario feeds).
  • Search the catalogues. Query the Mobility Database and download OpenStreetMap extracts directly (Catalogues and OSM extracts).
  • Draw missing route shapes. infer_shapes draws the shapes a feed lacks from OpenStreetMap (below).

Drawing missing route shapes

Many feeds do not have shapes.txt, so their routes appear as straight lines between stops. infer_shapes draws route shapes from an OpenStreetMap extract. It follows OpenStreetMap route relations where they exist. Otherwise, it matches each route's stops to the tram, rail or road network.

report = transitio.infer_shapes(
    "feed.zip", "shaped.zip", pbf, strictness="strict"
)
report["written"]     # shapes written
report["shapes"]      # per shape: method, matched OSM relation, score
report["skipped"]     # per refused pattern: the step that refused it

strictness sets how much guessing to accept. "strict" (the default) writes only unambiguous matches. "relaxed" and "permissive" write more shapes with less certainty. Before infer_shapes writes a shape, the stops in the pattern must lie along it in order. When the shapes of Helsinki's tram feed were withheld, the three levels produced these results (scripts/validate_shapes.py):

level shapes written median length error worst offset
strict 35/80 0.9% 42 m
relaxed 40/80 0.9% 34 m
permissive 43/80 0.9% 184 m

Helsinki's OpenStreetMap data is unusually complete. Elsewhere, expect fewer and less accurate shapes.

Documentation

The documentation is available at https://transitio.readthedocs.io and includes the Quickstart, the tutorials and the API reference. To build it locally, install transitio and the Sphinx toolchain:

pip install . -r docs/requirements.txt
sphinx-build -b html docs docs/_build/html

The feed index is built in a separate repository, transitio-dev/transitio-index.

License

MIT

Metadata

Release files for transitio 0.24.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for transitio 0.24.0
File Size Uploaded
transitio-0.24.0.tar.gz 405.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for transitio 0.24.0
File
transitio-0.24.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
transitio-0.24.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
transitio-0.24.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
transitio-0.24.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
transitio-0.24.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 9.1 MB

Release files / transitio-0.24.0.tar.gz

Download URL transitio-0.24.0.tar.gz
Size 405.8 kB
Tags Source
SHA-256 checksum
How to use checksums
432222e9c4421023fec06fab5e80b24606d2b2b9586ea5b2031640911806493c
BLAKE2b-256 checksum
How to use checksums
545f6b21404fc46ad5929b625b134f590c24d01d9b8a3f76d6e7142135d47215
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 Oct 11, 2026.

Transparency log

Release files / transitio-0.24.0-cp310-abi3-win_amd64.whl

Download URL transitio-0.24.0-cp310-abi3-win_amd64.whl
Size 1.6 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b024738af7a49eb2ea9eb8a1a952b1cdabdef7cee9767ab439a8d796efbe5e9b
BLAKE2b-256 checksum
How to use checksums
09cbf7f7c38cdc1ee837c9390f883fcad7a9eaa39bd7314757f4cdea50420f5a
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 Oct 11, 2026.

Transparency log

Release files / transitio-0.24.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL transitio-0.24.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.9 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
7dbfe8f6b6f03cb1ec25e7f0e12e542292329c8639d0303aa5e78b0be6abe6f6
BLAKE2b-256 checksum
How to use checksums
8709bff8e3750150e1cfcad97428d818f9747283bbf3d30a6b89aa1970fec6a4
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 Oct 11, 2026.

Transparency log

Release files / transitio-0.24.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL transitio-0.24.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.8 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
c0aeba1296fa07eadaa74939c1a5ca0460f25f005b7b8da8ddee01373e16e44a
BLAKE2b-256 checksum
How to use checksums
3bd3f13ce88ee1258de4766ecd01224fd9bb60489e8609339d99f185ca4d4a28
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 Oct 11, 2026.

Transparency log

Release files / transitio-0.24.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL transitio-0.24.0-cp310-abi3-macosx_11_0_arm64.whl
Size 1.6 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
362a5e83d0f902394b1a662fd31bb0b68697859329bba1b18f097e51529669ac
BLAKE2b-256 checksum
How to use checksums
4270aecd7e1152cee1688e8028c9e7ca0e84cca5ed52389609bac5ebd50e3d0d
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 Oct 11, 2026.

Transparency log

Release files / transitio-0.24.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL transitio-0.24.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 1.8 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b2b0db6fcb734213c0845deda3c9451b8ac958cc59d1cf014849d5a423b76947
BLAKE2b-256 checksum
How to use checksums
ee71c6d72908690e594b6bc434b8486a5ed07f969b97b3c9b9769421981d10fa
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 Oct 11, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page