Transitland
An open data platform that collects GTFS, GTFS Realtime, and other open data feeds from transit providers around the world.
https://github.com/transitland/transitland-atlas
Category: Consumption
Sub Category: Mobility and Transportation
Keywords
gbfs gtfs gtfs-realtime gtfs-rt mds mobility open-data transit transitland transportation
Keywords from Contributors
public-transport transit-data bike-share transit-agencies realtime-data gtfs-validator gtfs-utils gtfs-libraries gtfs-files gtfs-feed
Last synced: about 3 hours ago
JSON representation
Repository metadata
an open directory of mobility feeds and operators — powers both Transitland v1 and v2
- Host: GitHub
- URL: https://github.com/transitland/transitland-atlas
- Owner: transitland
- License: cc-by-4.0
- Created: 2019-11-15T21:28:51.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2026-08-05T11:19:44.000Z (6 days ago)
- Last Synced: 2026-08-05T13:48:45.217Z (6 days ago)
- Topics: gbfs, gtfs, gtfs-realtime, gtfs-rt, mds, mobility, open-data, transit, transitland, transportation
- Language: Python
- Homepage: https://www.transit.land/operators/
- Size: 34.1 MB
- Stars: 194
- Watchers: 8
- Forks: 232
- Open Issues: 39
- Releases: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
README.md
Transitland Atlas
An open catalog of transit/mobility data feeds and operators.
This catalog is used to power the canonical Transitland platform, is available for distributed used of the transitland-lib tooling, and is open to use as a "crosswalk" within other transportation data systems.
[!NOTE]
Transitland Atlas is now released under the CC-BY license. When using Transitland Atlas in your own projects, please include a link to this repo or to www.transit.land
Table of contents:
- Feeds
- How to Add a New Feed
- Opinionated DMFR file format
- How to Update an Existing Feed
- Operators
- Onestop IDs
- Enriching Transitland Atlas with external reference data
- License
Feeds
Public mobility/transit data feeds cataloged in the Distributed Mobility Feed Registry format.
Includes feeds in the following data specifications (specs):
- GTFS
- GTFS Realtime
- GBFS - automatically synchronized from https://github.com/MobilityData/gbfs/blob/master/systems.csv
- MDS - automatically synchronized from https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/providers.csv
How to Add a New Feed
- Check if a
./feedsfile exists with the domain name for the feed URL. (ex.http://bart.gov->bart.gov.dmfr.json)- If a file exists, use that file, otherwise create a new empty DMFR file.
- To create a new file, you can use
example.com.dmfr.jsonas a starting point, which contains the basic schema and an example feed. - Feeds exist as an array in the
feedsproperty of a DMFR file.
- Propose a new Onestop ID for the feed (see below)
- Feed Onestop ID's begins with
f-and continues with a unique string, like the transit operator's name - Use lowercase, alphanumeric unicode characters in the name component
- Use
~instead of spaces or other punctuation
- Feed Onestop ID's begins with
- Add the appropriate URL to
static_current - Add license and/or authorization metadata if you are aware of it.
- Open a PR. Feel free to add any questions as a comment on the PR if you are uncertain about your DMFR file.
- GitHub Actions (continuous integration service) will run a basic validation check on your PR and report any errors.
- A moderator will review and comment on your PR. If you don't get a response shortly, feel free to ping us at hello@transit.land
If you are using the Github web interface, you can click "Add a file -> Create a new file" in the ./feeds directory, or when viewing an individual existing file, the pencil icon in the upper right of the contents display. Make sure to select "Create a new branch for this commit" and begin creating a pull request to propose changes.
For more information on what can go into a DMFR file, see the DMFR documentation.
Opinionated DMFR file format
The Atlas repository enforces an opinionated DMFR format that extends the standard DMFR JSON schema. This format enforces:
- Consistent JSON indentation
- Consistent key ordering
- A trailing line break at the end of the file (this is a change as of March 2025)
This opinionated format is not part of the DMFR specification itself, but rather an additional layer of formatting rules to ensure that DMFR files in the Atlas repository only change to reflect meaningful changes in the data, not inconsequential formatting differences. This reduces the amount of lines that are likely to change in PRs in this repository. The opinionated format is applied using the transitland dmfr format command from the transitland-lib CLI tool and is checked by GitHub Actions on all PRs in this repo.
How to Update an Existing Feed
- Find the DMFR file containing the feed.
- Update the URLs and other properties for that feed
- For static feeds, use
static_currentfor the present URL. - Add the previous URL value to the
static_historicarray.
- For static feeds, use
- Edit the file and open the PR as described above.
Onestop ID values for feeds and operators are used to synchronize with existing values in the Transitland database. Editing the Onestop ID value will cause a new feed or operator record to be created; values in the database that are no longer present in the Transitland Atlas will be marked as soft-deleted. Use caution and clear intent when changing a Onestop ID value.
Operators
Operators describe, annotate, and group data from different feed data sources. For example, o-9q9-actransit describes a transit operator, Alameda-Contra Costa Transit District, which pulls from two different data sources (one GTFS-RT, one static GTFS) and adds additional metadata such as a US National Transit Database ID.
Operators can exist in the top-level operators property if a DMFR file, or nested within a feed. An operator defined in the top-level operators property requires an associated_feeds value to connect the operator with data sources. When an operator is nested within a feed, there is an implicit association that all GTFS agencies contained in that file are associated with that operator, which helps reduces complexity and maintenance.
The key properties for an operator are:
onestop_id: A Onestop ID value for this operator, starting witho-name: A formal name for the operator, such asBay Area Rapid Transitshort_name: A simpler, colloqial name for an operator, such asBARTtags: A set of key,value string pairs that provide additional metadata and referenceswebsite: A URL to find more information about this operatorassociated_feeds: An array of feed association objects; for each entry,feed_onestop_idis required andgtfs_agency_idis optional
Values for onestop_id and name are required; associated_feeds (either explicit or through nesting the operator in a feed) are highly recommended.
Onestop IDs
Every feed and operator record in the Atlas repository is identified by a unique Onestop ID. Onestop IDs are meant to be globally unique (no duplicates in the world) and to be stable (no change over time).
To simplify the process of creating Onestop IDs, we now allow two different variants:
- a three-part Onestop ID includes an entity prefix, a geohash, and a name. For example:
f-9q9-bart - a two-part Onestop ID includes just the entity prefix and a name. For example:
f-banning~pass~transit
The two-part Onestop ID is simpler to create if you are manually adding records to the Transitland Atlas repository.
Rules for Onestop IDs in this repository:
- Feeds start with
f-and operators start witho- - Geohash part is optional
- Name can include any alphanumeric characters in UTF-8
- The only separation or punctuation character allowed in the name component is a tilde (
~)
Enriching Transitland Atlas with external reference data
We welcome help from the community to expand Transitland Atlas by reviewing external reference datasets, including:
License
Unless otherwise indicated, data files and scripts in this repository are made available under the Creative Commons Attribution 4.0 International Public License. This license allows you to:
- use this data for commercial, educational, or research purposes and be able to trust that it's cleanly licensed
- duplicate data, as long as you mention (attribute) this source
- use this data to create analyses and derived data (such as geocoding), without needing to provide attribution
We welcome you to contribute your edits and improvements directly to this repository. Please open a pull request!
Owner metadata
- Name: Transitland
- Login: transitland
- Email: hello@transit.land
- Kind: organization
- Description: a community edited data service aggregating transit networks across metropolitan and rural areas around the world; maintained by @interline-io
- Website: https://www.transit.land
- Location:
- Twitter: transitland
- Company:
- Icon url: https://avatars.githubusercontent.com/u/9141652?v=4
- Repositories: 31
- Last ynced at: 2024-03-27T07:16:12.983Z
- Profile URL: https://github.com/transitland
GitHub Events
Total
- Issues event: 22
- Watch event: 32
- Delete event: 297
- Issue comment event: 171
- Push event: 566
- Pull request review event: 6
- Pull request review comment event: 11
- Pull request event: 812
- Fork event: 43
- Create event: 313
Last Year
- Issues event: 22
- Watch event: 32
- Delete event: 257
- Issue comment event: 156
- Push event: 467
- Pull request review event: 5
- Pull request review comment event: 5
- Pull request event: 709
- Fork event: 40
- Create event: 277
Committers metadata
Last synced: 6 days ago
Total Commits: 2,019
Total Committers: 167
Avg Commits per committer: 12.09
Development Distribution Score (DDS): 0.445
Commits in past year: 299
Committers in past year: 39
Avg Commits per committer in past year: 7.667
Development Distribution Score (DDS) in past year: 0.385
| Name | Commits | |
|---|---|---|
| Drew Dara-Abrams | d****w@i****o | 1120 |
| aquaticpotato3677 | 7****7 | 113 |
| github-actions[bot] | 4****] | 97 |
| Automated Bot | i****o@i****o | 84 |
| Rodrigo Pedraza | 4****1 | 65 |
| szjozsef | 1****f | 63 |
| Ian Rees | i****n@i****t | 56 |
| Juliet Eldred | e****t@g****m | 38 |
| Nome | d****i@g****m | 20 |
| MapGuy11 | 4****1 | 16 |
| Nicolas Derive | k****3@u****m | 14 |
| Colby Davis | 1****3 | 13 |
| Kyler Chin | 7****n | 11 |
| AliG1000 | a****s@h****m | 10 |
| Rodolfo Navalon | n****o@g****m | 10 |
| transitland-atlas-bot[bot] | 2****] | 10 |
| Fabio Alessandro Locati | 7****e | 9 |
| Lach-anonym | 5****m | 9 |
| evantrillium | 3****m | 8 |
| Altonss | 6****s | 7 |
| Reid | b****e | 7 |
| Frederick | 8****z | 7 |
| Brock Haywood | b****d@g****m | 6 |
| Kona Farry | k****a@t****m | 6 |
| Claudio Pereira | d****t@c****m | 5 |
| Dmytro Pashchenko | p****2@g****m | 5 |
| Félix Desjardins | F****X | 5 |
| João Pereira | 6****p | 5 |
| ericouyang | e****c@g****y | 5 |
| Weston Shippy | 5****m | 4 |
| and 137 more... | ||
Committer domains:
- interline.io: 2
- rideamigos.com: 2
- eutampieri.eu: 1
- fika.studio: 1
- kokanovic.org: 1
- bbauer.eu: 1
- ethanpooley.net: 1
- zaclys.net: 1
- greenvillesc.gov: 1
- bretagne.bzh: 1
- pm.me: 1
- seznam.cz: 1
- ricardomacas.com: 1
- patrickbrosi.de: 1
- disroot.org: 1
- blinktag.com: 1
- kevink.dev: 1
- goswift.ly: 1
- claudiop.com: 1
- trilliumtransit.com: 1
- ubuntu.com: 1
- intalere.com: 1
- mvanlaar.net: 1
- tcd.ie: 1
- gmx.de: 1
- hoshiru.net: 1
- petr.spackovi.net: 1
- shutdown.network: 1
- dzen.ws: 1
- cavallium.it: 1
- elsinga.de: 1
- idesmi.eu: 1
- pagopa.it: 1
- libero.it: 1
- nwex.de: 1
- jakse.fr: 1
- highstreetconsulting.com: 1
- soundtransit.org: 1
- boun.cr: 1
- fdms.eu: 1
- live.fr: 1
- kde.org: 1
- ianrees.net: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 57
Total pull requests: 2,295
Average time to close issues: 3 months
Average time to close pull requests: 4 days
Total issue authors: 32
Total pull request authors: 179
Average comments per issue: 0.98
Average comments per pull request: 0.37
Merged pull request: 1,943
Bot issues: 0
Bot pull requests: 181
Past year issues: 0
Past year pull requests: 135
Past year average time to close issues: N/A
Past year average time to close pull requests: 3 days
Past year issue authors: 0
Past year pull request authors: 34
Past year average comments per issue: 0
Past year average comments per pull request: 0.57
Past year merged pull request: 90
Past year bot issues: 0
Past year bot pull requests: 27
Top Issue Authors
- drewda (18)
- christrillium (4)
- aquaticpotato3677 (3)
- rosecitytransit (2)
- Fale (2)
- dinwun450 (2)
- idofurst (1)
- Robot8A (1)
- kylebarron (1)
- fredisz (1)
- rpedraza01 (1)
- 1Maxnet1 (1)
- kylerchin (1)
- airon90 (1)
- nekohayo (1)
Top Pull Request Authors
- drewda (1,162)
- github-actions[bot] (173)
- aquaticpotato3677 (121)
- rpedraza01 (71)
- szjozsef (67)
- irees (50)
- julieteldred (41)
- NomeQ (36)
- colbyjd3 (31)
- evantrillium (29)
- Altonss (26)
- kylerchin (26)
- Fale (18)
- Lach-anonym (16)
- MapGuy11 (15)
Top Issue Labels
- bug (3)
- question (1)
- enhancement (1)
Top Pull Request Labels
- dependencies (1)
Dependencies
- actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd composite
- actions/create-github-app-token bcd2ba49218906704ab6c1aa796996da409d3eb1 composite
- actions/setup-python a309ff8b426b58ec0e2a45f0f869d46889d02405 composite
- astral-sh/setup-uv 37802adc94f370d6bfd71619e3f0bf239e1f3b78 composite
- attrs 26.1.0
- certifi 2026.4.22
- charset-normalizer 3.4.7
- check-jsonschema 0.37.2
- click 8.3.3
- colorama 0.4.6
- idna 3.13
- jsonschema 4.26.0
- jsonschema-specifications 2025.9.1
- markdown-it-py 4.2.0
- mdurl 0.1.2
- numpy 2.4.4
- pandas 3.0.2
- pygments 2.20.0
- python-dateutil 2.9.0.post0
- rapidfuzz 3.14.5
- referencing 0.37.0
- regress 2025.10.1
- requests 2.33.1
- rich 15.0.0
- rpds-py 0.30.0
- ruamel-yaml 0.19.1
- six 1.17.0
- thefuzz 0.22.1
- transitland-atlas 0
- typing-extensions 4.15.0
- tzdata 2026.2
- urllib3 2.7.0
- actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd composite
- actions/create-github-app-token bcd2ba49218906704ab6c1aa796996da409d3eb1 composite
- actions/setup-python a309ff8b426b58ec0e2a45f0f869d46889d02405 composite
- astral-sh/setup-uv 37802adc94f370d6bfd71619e3f0bf239e1f3b78 composite
- actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd composite
- actions/create-github-app-token bcd2ba49218906704ab6c1aa796996da409d3eb1 composite
- astral-sh/setup-uv 37802adc94f370d6bfd71619e3f0bf239e1f3b78 composite
- actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd composite
- actions/github-script ed597411d8f924073f98dfc5c65a23a2325f34cd composite
- actions/upload-artifact ea165f8d65b6e75b540449e92b4886f43607fa02 composite
- astral-sh/setup-uv 37802adc94f370d6bfd71619e3f0bf239e1f3b78 composite
- actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd composite
- actions/github-script f28e40c7f34bde8b3046d885e986cb6290c5673b composite
- check-jsonschema ==0.37.2
- pandas *
- requests >=2.32.5
- rich *
- thefuzz *
- actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd composite
- astral-sh/setup-uv 37802adc94f370d6bfd71619e3f0bf239e1f3b78 composite
Score: 10.569032265982456