{"id":20160,"name":"Transitland","description":"An open data platform that collects GTFS, GTFS Realtime, and other open data feeds from transit providers around the world.","url":"https://github.com/transitland/transitland-atlas","last_synced_at":"2026-05-02T15:06:15.527Z","repository":{"id":37054273,"uuid":"222006183","full_name":"transitland/transitland-atlas","owner":"transitland","description":"an open directory of mobility feeds and operators — powers both Transitland v1 and v2","archived":false,"fork":false,"pushed_at":"2026-04-16T09:40:31.000Z","size":35005,"stargazers_count":186,"open_issues_count":29,"forks_count":219,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-04-17T08:02:43.559Z","etag":null,"topics":["gbfs","gtfs","gtfs-realtime","gtfs-rt","mds","mobility","open-data","transit","transitland","transportation"],"latest_commit_sha":null,"homepage":"https://www.transit.land/operators/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/transitland.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-11-15T21:28:51.000Z","updated_at":"2026-04-15T07:26:05.000Z","dependencies_parsed_at":"2024-04-15T20:04:17.494Z","dependency_job_id":"72a69e30-32a6-4785-ac2e-834d482c3ce1","html_url":"https://github.com/transitland/transitland-atlas","commit_stats":{"total_commits":1345,"total_committers":114,"mean_commits":"11.798245614035087","dds":0.4862453531598513,"last_synced_commit":"dbd02a5867097912f7925a97e6bd6d2b9a703b51"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/transitland/transitland-atlas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/transitland","download_url":"https://codeload.github.com/transitland/transitland-atlas/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32000740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"transitland","name":"Transitland","uuid":"9141652","kind":"organization","description":"a community edited data service aggregating transit networks across metropolitan and rural areas around the world; maintained by @interline-io ","email":"hello@transit.land","website":"https://www.transit.land","location":null,"twitter":"transitland","company":null,"icon_url":"https://avatars.githubusercontent.com/u/9141652?v=4","repositories_count":31,"last_synced_at":"2024-03-27T07:16:12.983Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/transitland","funding_links":[],"total_stars":814,"followers":21,"following":0,"created_at":"2022-11-05T15:04:30.866Z","updated_at":"2024-03-27T07:16:14.067Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/transitland","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/transitland/repositories"},"packages":[],"commits":{"id":1254150,"full_name":"transitland/transitland-atlas","default_branch":"main","total_commits":1939,"total_committers":159,"total_bot_commits":92,"total_bot_committers":1,"mean_commits":12.19496855345912,"dds":0.4486848891181021,"past_year_total_commits":363,"past_year_total_committers":42,"past_year_total_bot_commits":52,"past_year_total_bot_committers":1,"past_year_mean_commits":8.642857142857142,"past_year_dds":0.37741046831955927,"last_synced_at":"2026-04-18T10:02:20.838Z","last_synced_commit":"8a08571dd6ff2b421c57c07a2bb29104d1b3c92e","created_at":"2023-03-27T10:58:54.763Z","updated_at":"2026-04-18T10:01:16.000Z","committers":[{"name":"Drew Dara-Abrams","email":"drew@interline.io","login":"drewda","count":1069},{"name":"aquaticpotato3677","email":"72111431+aquaticpotato3677","login":"aquaticpotato3677","count":110},{"name":"github-actions[bot]","email":"41898282+github-actions[bot]","login":"github-actions[bot]","count":92},{"name":"Automated Bot","email":"info@interline.io","login":null,"count":84},{"name":"Rodrigo Pedraza","email":"46455263+rpedraza01","login":"rpedraza01","count":65},{"name":"szjozsef","email":"16382161+szjozsef","login":"szjozsef","count":63},{"name":"Ian Rees","email":"ian@ianrees.net","login":"irees","count":56},{"name":"Juliet Eldred","email":"eldredjuliet@gmail.com","login":"julieteldred","count":38},{"name":"Nome","email":"dickerson.nomi@gmail.com","login":"NomeQ","count":20},{"name":"MapGuy11","email":"43685307+MapGuy11","login":"MapGuy11","count":15},{"name":"Nicolas Derive","email":"kalon33@ubuntu.com","login":"kalon33","count":14},{"name":"Colby Davis","email":"135053263+colbyjd3","login":"colbyjd3","count":13},{"name":"Kyler Chin","email":"7539174+kylerchin","login":"kylerchin","count":11},{"name":"AliG1000","email":"alastairgreenshields@hotmail.com","login":"AliG1000","count":10},{"name":"Rodolfo Navalon","email":"navalonrodolfo@gmail.com","login":"poldz123","count":10},{"name":"Fabio Alessandro Locati","email":"77888+Fale","login":"Fale","count":9},{"name":"Lach-anonym","email":"53833376+Lach-anonym","login":"Lach-anonym","count":9},{"name":"evantrillium","email":"31700284+evantrillium","login":"evantrillium","count":8},{"name":"Altonss","email":"66519591+Altonss","login":"Altonss","count":7},{"name":"Reid","email":"botanize","login":"botanize","count":7},{"name":"Frederick","email":"8313330+fredisz","login":"fredisz","count":7},{"name":"Brock Haywood","email":"brock.haywood@gmail.com","login":"brockhaywood","count":6},{"name":"Kona Farry","email":"kona@trilliumtransit.com","login":"KonaTrillium","count":6},{"name":"Claudio Pereira","email":"development@claudiop.com","login":"claudioap","count":5},{"name":"Dmytro Pashchenko","email":"paschenkod2@gmail.com","login":"MrPaschenko","count":5},{"name":"Félix Desjardins","email":"FelixINX","login":"FelixINX","count":5},{"name":"João Pereira","email":"67809513+joaodcp","login":"joaodcp","count":5},{"name":"ericouyang","email":"eric@goswift.ly","login":"ericouyang","count":5},{"name":"Weston Shippy","email":"57922264+westontrillium","login":"westontrillium","count":4},{"name":"Kevin Kandlbinder","email":"kevin@kevink.dev","login":"Unkn0wnCat","count":4},{"name":"Charlotte","email":"69423184+tqpcharlie","login":"tqpcharlie","count":4},{"name":"Brendan Nee","email":"brendan@blinktag.com","login":"brendannee","count":4},{"name":"Artur","email":"5359825+sethidden","login":"sethidden","count":4},{"name":"Michael Moroni","email":"michaelmoroni@disroot.org","login":"airon90","count":3},{"name":"Marcin Kasznia","email":"kasmar00@gmail.com","login":"kasmar00","count":3},{"name":"Patrick Brosi","email":"info@patrickbrosi.de","login":"patrickbr","count":3},{"name":"Max Katz-Christy","email":"maxkatzchristy@gmail.com","login":"maxtkc","count":3},{"name":"Ricardo Maçãs","email":"universidade@ricardomacas.com","login":"ricardojorgerm","count":3},{"name":"Brian Newborn","email":"34843341+BNewborn","login":"BNewborn","count":3},{"name":"Joshua Houston","email":"joshuahouston@gmail.com","login":"joshuahouston","count":2},{"name":"Mark Stosberg","email":"mark@rideamigos.com","login":"markstos","count":2},{"name":"wflake","email":"wflake@greenvillesc.gov","login":"wflake","count":2},{"name":"Karolis Vyčius","email":"k.vycius@gmail.com","login":"vycius","count":2},{"name":"Maciej Kubień","email":"mkubien@gmail.com","login":"maciek-szn","count":2},{"name":"MarLoi","email":"73001509+MarLoi","login":"MarLoi","count":2},{"name":"Martin Němeček","email":"martinnemi03@pm.me","login":"MartinNemi03","count":2},{"name":"Miha Frangež","email":"miha.frangez@gmail.com","login":"franga2000","count":2},{"name":"Wes Schlenker","email":"wesley.schlenker@rideamigos.com","login":"wesleyschlenker","count":2},{"name":"gtfs.cc","email":"koles3520@gmail.com","login":"gtfscc","count":2},{"name":"hoermalmeister","email":"petr.novak.gogo@gmail.com","login":"hoermalmeister","count":2},{"name":"simportela","email":"100848577+simportela","login":"simportela","count":2},{"name":"smevel","email":"stephane.mevel-viannay@bretagne.bzh","login":"smevel","count":2},{"name":"Brody Flannigan","email":"46612183+brodyFlannigan","login":"brodyFlannigan","count":2},{"name":"applecuckoo","email":"aidancuckoo@gmail.com","login":"applecuckoo","count":2},{"name":"Noémie","email":"nlehuby@zaclys.net","login":"nlehuby","count":2},{"name":"Casual-Scrub","email":"65431423+Casual-Scrub","login":"Casual-Scrub","count":2},{"name":"Ethan Pooley","email":"ethan@ethanpooley.net","login":"ethanpooley","count":2},{"name":"Evan Siroky","email":"evan.siroky@yahoo.com","login":"evansiroky","count":2},{"name":"Florian Maunier","email":"fmaunier@gmail.com","login":"fmauNeko","count":2},{"name":"Francesco Piero Paolicelli","email":"piersoft2@gmail.com","login":"piersoft","count":2},{"name":"Gabor Tanz","email":"izolight@gmail.com","login":"izolight","count":2},{"name":"Giasin","email":"94991581+Giasinit","login":"Giasinit","count":2},{"name":"Horváth Dusán","email":"hoordus@gmail.com","login":"hoordev","count":2},{"name":"Jakub Ondroušek","email":"peperman66@seznam.cz","login":"Peperman66","count":2},{"name":"Jonas Frei","email":"53214867+HelloJowet","login":"HelloJowet","count":2},{"name":"Daniel Radding","email":"Dradding@gmail.com","login":"dradding","count":2},{"name":"Ben Hess","email":"32969785+benhess02","login":"benhess02","count":1},{"name":"Baptiste Pignier","email":"43184520+BaptistePignier","login":"BaptistePignier","count":1},{"name":"Artur H. Lange","email":"ArturLange","login":"ArturLange","count":1},{"name":"Angel Romero","email":"mrprogramador21@gmail.com","login":"AngelJRomero21","count":1},{"name":"Andrey Kostakov","email":"bps@dzen.ws","login":"AyumuKasuga","count":1},{"name":"Andrea Cavalli","email":"andrea@cavallium.it","login":"cavallium","count":1},{"name":"Allister Grange","email":"allistergrange@gmail.com","login":"allister-grange","count":1},{"name":"AlkindiX","email":"AlkindiX","login":"AlkindiX","count":1},{"name":"Alexandre Oliveira","email":"rockytvbr@gmail.com","login":"Xinayder","count":1},{"name":"Alexandre Franke","email":"alexandre.franke@gmail.com","login":"afranke","count":1},{"name":"Alexander Roumeliotis","email":"59561790+alexroumi","login":"alexroumi","count":1},{"name":"Alex Bores","email":"48452211+alexwb72","login":"alexwb72","count":1},{"name":"Aleardo Lodi","email":"aleardo.lodi1997@gmail.com","login":"LodiAleardo","count":1},{"name":"fabrice1236","email":"87321357+fabrice1236","login":"fabrice1236","count":1},{"name":"Travis Wrightsman","email":"traviswrightsman@gmail.com","login":null,"count":1},{"name":"hvents4","email":"141850736+hvents4","login":"hvents4","count":1},{"name":"golynxcbayard","email":"95454939+golynxcbayard","login":"golynxcbayard","count":1},{"name":"Byron Williams","email":"byron@fika.studio","login":"byronwilliams","count":1},{"name":"eutampieri","email":"eugenio@eutampieri.eu","login":"eutampieri","count":1},{"name":"ansons","email":"ansonstewart@gmail.com","login":"ansoncfit","count":1},{"name":"akaise21","email":"94837345+akaise21","login":"akaise21","count":1},{"name":"Wylie Timmerman","email":"61324620+wtimmerman-fitp","login":"wtimmerman-fitp","count":1},{"name":"Wyatt Stanke","email":"47758296+Wyatt-Stanke","login":"Wyatt-Stanke","count":1},{"name":"Will McBride","email":"wmcb91@gmail.com","login":"wmcb91","count":1},{"name":"WHY","email":"why04@protonmail.com","login":"why-2004","count":1},{"name":"Volker Krause","email":"vkrause@kde.org","login":"vkrause","count":1},{"name":"Transport Public Ungheni","email":"unghenitransport.md@gmail.com","login":"UngheniTransport","count":1},{"name":"Tom Arnaud","email":"tomarnaud@live.fr","login":"TomBerger90","count":1},{"name":"Thomas Dickson","email":"modscrat+github@gmail.com","login":"Hoverth","count":1},{"name":"Stöger Florian D. M","email":"contact@fdms.eu","login":"FDMS","count":1},{"name":"Slovak_Cat","email":"slovak_cat@boun.cr","login":"0Charliecat","count":1},{"name":"Romain","email":"wycvhrt6vzscfpedxr@gmail.com","login":"Starmania","count":1},{"name":"Pi-Cla","email":"pirateclip@protonmail.com","login":"Pi-Cla","count":1},{"name":"Philip Nelson","email":"philip@shutdown.network","login":"blu3r4d0n","count":1},{"name":"wolfy1339","email":"4595477+wolfy1339","login":"wolfy1339","count":1},{"name":"ward-high-street","email":"ward@highstreetconsulting.com","login":"ward-high-street","count":1},{"name":"useless2764","email":"useless2764","login":"useless2764","count":1},{"name":"shoyip","email":"yip.syip.shoichi98@gmail.com","login":"shoyip","count":1},{"name":"raphj","email":"raphael.github@jakse.fr","login":"raphj","count":1},{"name":"poophnom","email":"142555857+poophnom","login":"poophnom","count":1},{"name":"pleitman","email":"35862428+pleitman","login":"pleitman","count":1},{"name":"phil-swiftly","email":"161875492+phil-swiftly","login":"phil-swiftly","count":1},{"name":"nop-s","email":"nop-s","login":"nop-s","count":1},{"name":"networkException","email":"github@nwex.de","login":"networkException","count":1},{"name":"nathop","email":"58845919+NadaTheOptimist","login":"NadaTheOptimist","count":1},{"name":"martiandeath","email":"69183059+martiandeath","login":"martiandeath","count":1},{"name":"malimedo22","email":"77342223+malimedo22","login":"malimedo22","count":1},{"name":"krtz07","email":"72149782+krtz07","login":"krtz07","count":1},{"name":"jumpjack","email":"jumpjack@libero.it","login":"jumpjack","count":1},{"name":"joywang8","email":"yinnxwang@gmail.com","login":"joywang8","count":1},{"name":"joyceljh7","email":"88694635+joyceljh7","login":"joyceljh7","count":1},{"name":"jonaes","email":"36273569+jonaes","login":"jonaes","count":1},{"name":"icjuego","email":"34762264+icjuego","login":"icjuego","count":1},{"name":"Petr Špaček","email":"github@petr.spackovi.net","login":"spacekpe","count":1},{"name":"Jacopo Pompilii","email":"Jacopo.pompilii@pagopa.it","login":"thisisjp","count":1},{"name":"Idesmi","email":"kilgore.trout@idesmi.eu","login":"Idesmi","count":1},{"name":"Guilhem Fanton","email":"8671905+gfanton","login":"gfanton","count":1},{"name":"Grzegorz M","email":"13075554+grzesjam","login":"grzesjam","count":1},{"name":"Gonçalo Matos","email":"50376686+gmatosferreira","login":"gmatosferreira","count":1},{"name":"George Kanellopoulos","email":"george2seven@gmail.com","login":"george2seven","count":1},{"name":"Frank Elsinga","email":"frank@elsinga.de","login":"CommanderStorm","count":1},{"name":"Emma Alexia","email":"wafflecoffee7@gmail.com","login":"triphora","count":1},{"name":"Elsa","email":"46323914+elsa-pato","login":"elsa-pato","count":1},{"name":"Elizabeth Sall","email":"easall@gmail.com","login":"e-lo","count":1},{"name":"Dean Pearce","email":"75143716+deanapearce","login":"deanapearce","count":1},{"name":"David Cortés","email":"cortestoledanodavid@gmail.com","login":"dacoto97","count":1},{"name":"Dan McGee","email":"dpmcgee@gmail.com","login":"toofishes","count":1},{"name":"Chad Selph","email":"chad.selph@gmail.com","login":"chadselph","count":1},{"name":"Cesar Lopez","email":"69815569+cal5390","login":"cal5390","count":1},{"name":"Akira Ochiai","email":"porolakka@gmail.com","login":"porolakka","count":1},{"name":"Branko Kokanovic","email":"branko@kokanovic.org","login":"stalker314314","count":1},{"name":"Benedikt Bauer","email":"benedikt.bauer@bbauer.eu","login":"mastacheata","count":1},{"name":"Ben Standaert","email":"71239179+bstandaert-wustl","login":"bstandaert-wustl","count":1},{"name":"Oran Viriyincy","email":"oran@hoshiru.net","login":"oranv","count":1},{"name":"Niko B","email":"130271621+nikobgit","login":"nikobgit","count":1},{"name":"Nate Codes","email":"nathaniel.gibson@gmail.com","login":"newsbubbles","count":1},{"name":"Mikołaj Kuranowski","email":"mkuranowski@gmail.com","login":"MKuranowski","count":1},{"name":"MentalKnight","email":"MentalKnight","login":"MentalKnight","count":1},{"name":"Max Buchholz","email":"Max.Buchholz@gmx.de","login":"1Maxnet1","count":1},{"name":"Matthew Wootten","email":"the.mattenator.knows@gmail.com","login":"mwootten","count":1},{"name":"Matthew Pierce","email":"mapierce@tcd.ie","login":"mapierce","count":1},{"name":"MattBurb","email":"77400079+MattBurb","login":"MattBurb","count":1},{"name":"Matt Riggott","email":"flother","login":"flother","count":1},{"name":"Mathieu Méa","email":"mathieu.mea@gmail.com","login":"mmathieum","count":1},{"name":"Matheus Gomes","email":"86851490+matheusgomesms","login":"matheusgomesms","count":1},{"name":"Martijn van Laar","email":"martijn@mvanlaar.net","login":"mvanlaar","count":1},{"name":"Kkenzzie","email":"mackenzie.ahiggins@yahoo.com","login":"Kkenzzie","count":1},{"name":"KitsapTransit","email":"90354162+KitsapTransit","login":"KitsapTransit","count":1},{"name":"Joe Yates","email":"joeyates","login":"joeyates","count":1},{"name":"Jeffrey DiVincent","email":"43482496+jeffreydivi","login":"jeffreydivi","count":1},{"name":"Jeder321","email":"12257652+Jeder321","login":"Jeder321","count":1},{"name":"Jason McHuff","email":"20979597+rosecitytransit","login":"rosecitytransit","count":1},{"name":"Richie Fulop","email":"richard.fulop@intalere.com","login":null,"count":1}],"past_year_committers":[{"name":"Drew Dara-Abrams","email":"drew@interline.io","login":"drewda","count":226},{"name":"github-actions[bot]","email":"41898282+github-actions[bot]","login":"github-actions[bot]","count":52},{"name":"Lach-anonym","email":"53833376+Lach-anonym","login":"Lach-anonym","count":9},{"name":"MapGuy11","email":"43685307+MapGuy11","login":"MapGuy11","count":9},{"name":"Altonss","email":"66519591+Altonss","login":"Altonss","count":5},{"name":"Dmytro Pashchenko","email":"paschenkod2@gmail.com","login":"MrPaschenko","count":5},{"name":"Charlotte","email":"69423184+tqpcharlie","login":"tqpcharlie","count":4},{"name":"Nicolas Derive","email":"kalon33@ubuntu.com","login":"kalon33","count":4},{"name":"Max Katz-Christy","email":"maxkatzchristy@gmail.com","login":"maxtkc","count":3},{"name":"szjozsef","email":"16382161+szjozsef","login":"szjozsef","count":3},{"name":"Marcin Kasznia","email":"kasmar00@gmail.com","login":"kasmar00","count":3},{"name":"Fabio Alessandro Locati","email":"77888+Fale","login":"Fale","count":3},{"name":"applecuckoo","email":"aidancuckoo@gmail.com","login":"applecuckoo","count":2},{"name":"Claudio Pereira","email":"git@claudiop.com","login":"claudioap","count":2},{"name":"Giasin","email":"94991581+Giasinit","login":"Giasinit","count":2},{"name":"Joshua Houston","email":"joshuahouston@gmail.com","login":"joshuahouston","count":2},{"name":"Nome","email":"dickerson.nomi@gmail.com","login":"NomeQ","count":2},{"name":"gtfs.cc","email":"koles3520@gmail.com","login":"gtfscc","count":2},{"name":"hoermalmeister","email":"petr.novak.gogo@gmail.com","login":"hoermalmeister","count":2},{"name":"Aleardo Lodi","email":"aleardo.lodi1997@gmail.com","login":"LodiAleardo","count":1},{"name":"Alexander Roumeliotis","email":"59561790+alexroumi","login":"alexroumi","count":1},{"name":"ward-high-street","email":"ward@highstreetconsulting.com","login":"ward-high-street","count":1},{"name":"useless2764","email":"useless2764","login":"useless2764","count":1},{"name":"phil-swiftly","email":"161875492+phil-swiftly","login":"phil-swiftly","count":1},{"name":"nop-s","email":"nop-s","login":"nop-s","count":1},{"name":"malimedo22","email":"77342223+malimedo22","login":"malimedo22","count":1},{"name":"krtz07","email":"72149782+krtz07","login":"krtz07","count":1},{"name":"jonaes","email":"36273569+jonaes","login":"jonaes","count":1},{"name":"Transport Public Ungheni","email":"unghenitransport.md@gmail.com","login":"UngheniTransport","count":1},{"name":"Philip Nelson","email":"philip@shutdown.network","login":"blu3r4d0n","count":1},{"name":"Niko B","email":"130271621+nikobgit","login":"nikobgit","count":1},{"name":"Nate Codes","email":"nathaniel.gibson@gmail.com","login":"newsbubbles","count":1},{"name":"Martin Němeček","email":"martinnemi03@pm.me","login":"MartinNemi03","count":1},{"name":"Maciej Kubień","email":"mkubien@gmail.com","login":"maciek-szn","count":1},{"name":"Jeder321","email":"12257652+Jeder321","login":"Jeder321","count":1},{"name":"Félix Desjardins","email":"FelixINX","login":"FelixINX","count":1},{"name":"Colby Davis","email":"135053263+colbyjd3","login":"colbyjd3","count":1},{"name":"Cesar Lopez","email":"69815569+cal5390","login":"cal5390","count":1},{"name":"Brock Haywood","email":"brock.haywood@gmail.com","login":"brockhaywood","count":1},{"name":"Brian Newborn","email":"34843341+BNewborn","login":"BNewborn","count":1},{"name":"Ben Standaert","email":"71239179+bstandaert-wustl","login":"bstandaert-wustl","count":1},{"name":"Angel Romero","email":"mrprogramador21@gmail.com","login":"AngelJRomero21","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-19T00:00:13.908Z","repositories_count":6214220,"commits_count":900054957,"contributors_count":34914894,"owners_count":1143436,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"transitland/transitland-atlas","html_url":"https://github.com/transitland/transitland-atlas","last_synced_at":"2026-04-16T13:00:12.398Z","status":null,"issues_count":57,"pull_requests_count":2244,"avg_time_to_close_issue":8859512.851063829,"avg_time_to_close_pull_request":338872.36842105264,"issues_closed_count":47,"pull_requests_closed_count":2128,"pull_request_authors_count":171,"issue_authors_count":32,"avg_comments_per_issue":0.9824561403508771,"avg_comments_per_pull_request":0.35472370766488415,"merged_pull_requests_count":1904,"bot_issues_count":0,"bot_pull_requests_count":169,"past_year_issues_count":3,"past_year_pull_requests_count":367,"past_year_avg_time_to_close_issue":514328.0,"past_year_avg_time_to_close_pull_request":127099.15533980583,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":309,"past_year_pull_request_authors_count":40,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":0.2098092643051771,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":66,"past_year_merged_pull_requests_count":277,"created_at":"2023-05-09T10:34:56.986Z","updated_at":"2026-04-16T13:00:12.426Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/transitland%2Ftransitland-atlas/issues","issue_labels_count":{"bug":3,"question":1,"enhancement":1},"pull_request_labels_count":{"dependencies":1},"issue_author_associations_count":{"NONE":22,"MEMBER":18,"CONTRIBUTOR":16,"OWNER":1},"pull_request_author_associations_count":{"MEMBER":1187,"CONTRIBUTOR":882,"NONE":100,"COLLABORATOR":75},"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,"etam":1,"ivyrze":1,"cmata23x3":1,"dradding":1,"grzesjam":1,"JRascagneres":1,"martiandeath":1,"e-lo":1,"prasannar2009":1,"sryyyl-tech":1,"shawnz-swiftly":1,"matteoferrux":1,"hopthru-mattlaquidara":1,"Altonss":1,"NefrayLaysh":1,"adelcasse":1,"kierramarie":1},"pull_request_authors":{"drewda":1136,"github-actions[bot]":168,"aquaticpotato3677":119,"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,"AliG1000":13,"kalon33":13,"brockhaywood":12,"airon90":11,"westontrillium":10,"poldz123":9,"joaodcp":9,"HelloJowet":9,"fredisz":7,"KonaTrillium":7,"kasmar00":6,"FelixINX":6,"MartinNemi03":6,"Casual-Scrub":6,"claudioap":6,"dradding":5,"sethidden":5,"ricardojorgerm":5,"markstos":5,"BNewborn":5,"ericouyang":5,"piersoft":5,"Unkn0wnCat":5,"brendannee":4,"toofishes":4,"wflake":4,"cmata23x3":4,"blu3r4d0n":4,"triphora":4,"lolpro11":4,"maxtkc":3,"hvents4":3,"jonaes":3,"maciek-szn":3,"Kkenzzie":3,"TomBerger90":3,"brodyFlannigan":3,"simportela":3,"evansiroky":2,"why-2004":2,"Starmania":2,"ethanpooley":2,"Jeder321":2,"hoermalmeister":2,"wesleyschlenker":2,"poophnom":2,"nikobgit":2,"MrPaschenko":2,"AnastasiaOpti":2,"MarLoi":2,"schuellerf":2,"byronwilliams":2,"wolfy1339":2,"GastonTransit":2,"nlehuby":2,"networkException":2,"izolight":2,"joywang8":2,"joyceljh7":2,"applecuckoo":2,"AlkindiX":2,"Giasinit":2,"vycius":2,"1Maxnet1":2,"franga2000":2,"tqpcharlie":2,"jjasloot":2,"gmatosferreira":2,"deanapearce":2,"Wyatt-Stanke":2,"hoordev":2,"sryyyl-tech":2,"Idesmi":2,"martiandeath":2,"BaptistePignier":2,"dacoto97":2,"phil-swiftly":2,"grzesjam":2,"rohan-tuli":2,"ArturLange":2,"CommanderStorm":2,"jumpjack":2,"Peperman66":2,"cal5390":2,"Pi-Cla":2,"afranke":2,"fmauNeko":2,"matheusgomesms":2,"jeffreydivi":2,"smevel":2,"joshuahouston":2,"mwootten":2,"vkrause":2,"NadaTheOptimist":1,"RileyQuartic":1,"mmathieum":1,"thisisjp":1,"AyumuKasuga":1,"rosecitytransit":1,"KitsapTransit":1,"raphj":1,"alexroumi":1,"stalker314314":1,"cswilson252":1,"eutampieri":1,"MattBurb":1,"wtimmerman-fitp":1,"shoyip":1,"gtfscc":1,"wmcb91":1,"gfanton":1,"g1nger-bred":1,"icjuego":1,"3dpgg":1,"twrightsman":1,"porolakka":1,"useless2764":1,"ciospettw":1,"allister-grange":1,"LodiAleardo":1,"fabrice1236":1,"alexwb72":1,"benhess02":1,"eniehack":1,"Hoverth":1,"ansoncfit":1,"Xinayder":1,"FDMS":1,"mastacheata":1,"golynxcbayard":1,"walkerconsultants":1,"MentalKnight":1,"cavallium":1,"pleitman":1,"botanize":1,"george2seven":1,"akaise21":1,"WardDeb":1,"ward-high-street":1,"UngheniTransport":1,"joeyates":1,"VitorRDias":1,"patrickbr":1,"flother":1,"Bassam-Loulou":1,"dependabot[bot]":1,"0Charliecat":1,"spacekpe":1,"mapierce":1,"e-lo":1,"oranv":1,"malimedo22":1,"richiebful":1,"mvanlaar":1,"elsa-pato":1,"bstandaert-wustl":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-17T00:00:09.649Z","repositories_count":14293927,"issues_count":34560357,"pull_requests_count":113097569,"authors_count":11236650,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"CONTRIBUTOR":1,"MEMBER":1,"NONE":1},"past_year_pull_request_author_associations_count":{"MEMBER":204,"CONTRIBUTOR":128,"NONE":25,"COLLABORATOR":4},"past_year_issue_authors":{"1Maxnet1":1,"drewda":1,"shawnz-swiftly":1},"past_year_pull_request_authors":{"drewda":204,"github-actions[bot]":64,"Lach-anonym":16,"kasmar00":6,"Fale":6,"Altonss":5,"blu3r4d0n":4,"szjozsef":4,"NomeQ":4,"MapGuy11":3,"maxtkc":3,"jonaes":3,"phil-swiftly":2,"rohan-tuli":2,"Giasinit":2,"cal5390":2,"nikobgit":2,"hoermalmeister":2,"tqpcharlie":2,"joshuahouston":2,"MrPaschenko":2,"applecuckoo":2,"maciek-szn":2,"MartinNemi03":2,"UngheniTransport":1,"useless2764":1,"ward-high-street":1,"malimedo22":1,"LodiAleardo":1,"Kkenzzie":1,"gtfscc":1,"g1nger-bred":1,"eniehack":1,"cswilson252":1,"ciospettw":1,"bstandaert-wustl":1,"BNewborn":1,"alexroumi":1,"3dpgg":1},"maintainers":[{"login":"drewda","count":1154,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/drewda"},{"login":"irees","count":50,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/irees"},{"login":"julieteldred","count":41,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/julieteldred"},{"login":"NomeQ","count":34,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/NomeQ"},{"login":"WardDeb","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/WardDeb"},{"login":"kierramarie","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/kierramarie"}],"active_maintainers":[{"login":"drewda","count":205,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/drewda"},{"login":"NomeQ","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/NomeQ"}]},"events":{"total":{"IssuesEvent":22,"WatchEvent":32,"DeleteEvent":297,"IssueCommentEvent":171,"PushEvent":566,"PullRequestReviewEvent":6,"PullRequestReviewCommentEvent":11,"PullRequestEvent":812,"ForkEvent":43,"CreateEvent":313},"last_year":{"IssuesEvent":22,"WatchEvent":32,"DeleteEvent":257,"IssueCommentEvent":156,"PushEvent":467,"PullRequestReviewEvent":5,"PullRequestReviewCommentEvent":5,"PullRequestEvent":709,"ForkEvent":40,"CreateEvent":277}},"keywords":["gbfs","gtfs","gtfs-realtime","gtfs-rt","mds","mobility","open-data","transit","transitland","transportation"],"dependencies":[{"ecosystem":"pypi","filepath":"scripts/Pipfile","sha":null,"kind":"manifest","created_at":"2022-08-08T19:01:31.034Z","updated_at":"2022-08-08T19:01:31.034Z","repository_link":"https://github.com/transitland/transitland-atlas/blob/main/scripts/Pipfile","dependencies":[{"id":687419121,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":687419122,"package_name":"sqlite-utils","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"scripts/Pipfile.lock","sha":null,"kind":"lockfile","created_at":"2022-08-08T19:01:31.059Z","updated_at":"2022-08-08T19:01:31.059Z","repository_link":"https://github.com/transitland/transitland-atlas/blob/main/scripts/Pipfile.lock","dependencies":[{"id":687420236,"package_name":"certifi","ecosystem":"pypi","requirements":"==2021.5.30","direct":false,"kind":"runtime","optional":false},{"id":687420237,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"==2.0.3","direct":false,"kind":"runtime","optional":false},{"id":687420238,"package_name":"click","ecosystem":"pypi","requirements":"==8.0.1","direct":false,"kind":"runtime","optional":false},{"id":687420239,"package_name":"click-default-group","ecosystem":"pypi","requirements":"==1.2.2","direct":false,"kind":"runtime","optional":false},{"id":687420240,"package_name":"idna","ecosystem":"pypi","requirements":"==3.2","direct":false,"kind":"runtime","optional":false},{"id":687420241,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"==4.6.1","direct":false,"kind":"runtime","optional":false},{"id":687420242,"package_name":"requests","ecosystem":"pypi","requirements":"==2.26.0","direct":false,"kind":"runtime","optional":false},{"id":687420243,"package_name":"sqlite-fts4","ecosystem":"pypi","requirements":"==1.0.1","direct":false,"kind":"runtime","optional":false},{"id":687420244,"package_name":"sqlite-utils","ecosystem":"pypi","requirements":"==3.13","direct":false,"kind":"runtime","optional":false},{"id":687420245,"package_name":"tabulate","ecosystem":"pypi","requirements":"==0.8.9","direct":false,"kind":"runtime","optional":false},{"id":687420246,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"==3.10.0.0","direct":false,"kind":"runtime","optional":false},{"id":687420247,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.26.6","direct":false,"kind":"runtime","optional":false},{"id":687420248,"package_name":"zipp","ecosystem":"pypi","requirements":"==3.5.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/update-gbfs.yml","sha":null,"kind":"manifest","created_at":"2023-02-17T22:30:26.157Z","updated_at":"2023-02-17T22:30:26.157Z","repository_link":"https://github.com/transitland/transitland-atlas/blob/main/.github/workflows/update-gbfs.yml","dependencies":[{"id":7747636807,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7747636812,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/update-mds.yml","sha":null,"kind":"manifest","created_at":"2023-02-17T22:30:26.805Z","updated_at":"2023-02-17T22:30:26.805Z","repository_link":"https://github.com/transitland/transitland-atlas/blob/main/.github/workflows/update-mds.yml","dependencies":[{"id":7747638164,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7747638165,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/validate.yml","sha":null,"kind":"manifest","created_at":"2023-02-17T22:30:26.899Z","updated_at":"2023-02-17T22:30:26.899Z","repository_link":"https://github.com/transitland/transitland-atlas/blob/main/.github/workflows/validate.yml","dependencies":[{"id":7747641037,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":7747641038,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":7747641039,"package_name":"actions/setup-node","ecosystem":"actions","requirements":"v2-beta","direct":true,"kind":"composite","optional":false}]}],"score":10.439542230347893,"created_at":"2023-09-11T14:52:10.266Z","updated_at":"2026-05-02T15:06:15.541Z","avatar_url":"https://github.com/transitland.png","language":"Python","category":"Consumption","sub_category":"Mobility and Transportation","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"\u003c!-- omit in toc --\u003e\n# Transitland Atlas\n\nAn open catalog of transit/mobility data feeds and operators.\n\nThis catalog is used to power the canonical [Transitland](https://transit.land) platform, is available for distributed used of the [transitland-lib](https://github.com/interline-io/transitland-lib) tooling, and is open to use as a \"crosswalk\" within other transportation data systems.\n\n\u003e [!NOTE]\n\u003e 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\n\n**Table of contents**:\n\n\u003c!-- TOC created and updated by VSCode Markdown All in One extension --\u003e\n- [Feeds](#feeds)\n- [How to Add a New Feed](#how-to-add-a-new-feed)\n- [Opinionated DMFR file format](#opinionated-dmfr-file-format)\n- [How to Update an Existing Feed](#how-to-update-an-existing-feed)\n- [Operators](#operators)\n- [Onestop IDs](#onestop-ids)\n- [Enriching Transitland Atlas with external reference data](#enriching-transitland-atlas-with-external-reference-data)\n- [License](#license)\n\n## Feeds\n\nPublic mobility/transit data feeds cataloged in the [Distributed Mobility Feed Registry](https://github.com/transitland/distributed-mobility-feed-registry) format.\n\nIncludes feeds in the following data specifications (specs):\n\n- [GTFS](https://gtfs.org/reference/static)\n- [GTFS Realtime](https://gtfs.org/reference/realtime/v2/)\n- [GBFS](https://github.com/MobilityData/gbfs) - automatically synchronized from https://github.com/MobilityData/gbfs/blob/master/systems.csv\n- [MDS](https://github.com/openmobilityfoundation/mobility-data-specification) - automatically synchronized from https://github.com/openmobilityfoundation/mobility-data-specification/blob/main/providers.csv\n\n## How to Add a New Feed\n\n1. Check if a `./feeds` file exists with the domain name for the feed URL. (ex. `http://bart.gov` -\u003e `bart.gov.dmfr.json`)\n    * If a file exists, use that file, otherwise create a new empty DMFR file.\n    * To create a new file, you can use `example.com.dmfr.json` as a starting point, which contains the basic schema and an example feed.\n    * Feeds exist as an array in the `feeds` property of a DMFR file.\n2. Propose a new Onestop ID for the feed (see [below](#onestop-ids))\n    * Feed Onestop ID's begins with `f-` and continues with a unique string, like the transit operator's name\n    * Use lowercase, alphanumeric unicode characters  in the name component\n    * Use `~` instead of spaces or other punctuation\n3. Add the appropriate URL to `static_current`\n4. Add license and/or authorization metadata if you are aware of it.\n5. Open a PR. Feel free to add any questions as a comment on the PR if you are uncertain about your DMFR file.\n6. GitHub Actions (continuous integration service) will run a basic validation check on your PR and report any errors.\n7. 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](mailto:hello@transit.land)\n\nIf you are using the Github web interface, you can click \"Add a file -\u003e 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.\n\nFor more information on what can go into a DMFR file, see the [DMFR documentation](https://github.com/transitland/distributed-mobility-feed-registry).\n\n## Opinionated DMFR file format\n\nThe Atlas repository enforces an opinionated DMFR format that extends the standard DMFR JSON schema. This format enforces:\n- Consistent JSON indentation\n- Consistent key ordering\n- A trailing line break at the end of the file (this is a change as of March 2025)\n\nThis 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](https://github.com/interline-io/transitland-lib) CLI tool and is checked by GitHub Actions on all PRs in this repo.\n\n## How to Update an Existing Feed\n\n1. Find the DMFR file containing the feed.\n2. Update the URLs and other properties for that feed\n    * For static feeds, use `static_current` for the present URL.\n    * Add the previous URL value to the `static_historic` array.\n3. Edit the file and open the PR as described above.\n\nOnestop 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.\n\n## Operators\n\n[Operators](https://transit.land/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.\n\nOperators 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.\n\nThe key properties for an operator are:\n* `onestop_id`: A Onestop ID value for this operator, starting with `o-`\n* `name`: A formal name for the operator, such as `Bay Area Rapid Transit`\n* `short_name`: A simpler, colloqial name for an operator, such as `BART`\n* `tags`: A set of key,value string pairs that provide additional metadata and references\n* `website`: A URL to find more information about this operator\n* `associated_feeds`: An array of feed association objects; for each entry, `feed_onestop_id` is required and `gtfs_agency_id` is optional\n\nValues for `onestop_id` and `name` are required; `associated_feeds` (either explicit or through nesting the operator in a feed) are highly recommended.\n\n## Onestop IDs\n\nEvery feed and operator record in the Atlas repository is identified by a unique [Onestop ID](https://transit.land/documentation/onestop-id-scheme/). Onestop IDs are meant to be globally unique (no duplicates in the world) and to be stable (no change over time).\n\nTo simplify the process of creating Onestop IDs, we now allow two different variants:\n\n- a three-part Onestop ID includes an entity prefix, a geohash, and a name. For example: `f-9q9-bart`\n- a two-part Onestop ID includes just the entity prefix and a name. For example: `f-banning~pass~transit`\n\nThe two-part Onestop ID is simpler to create if you are manually adding records to the Transitland Atlas repository.\n\nRules for Onestop IDs in this repository:\n\n- Feeds start with `f-` and operators start with `o-`\n- Geohash part is optional\n- Name can include any alphanumeric characters in UTF-8\n- The only separation or punctuation character allowed in the name component is a tilde (`~`)\n\n## Enriching Transitland Atlas with external reference data\n\nWe welcome help from the community to expand Transitland Atlas by reviewing external reference datasets, including:\n\n- [NTD GTFS Weblinks](./external-data-for-reference/ntd-gtfs-weblinks/readme.md)\n\n## License\n\nUnless otherwise indicated, data files and scripts in this repository are made available under the [Creative Commons Attribution 4.0 International Public License](LICENSE.txt). This license allows you to:\n\n1. use this data for commercial, educational, or research purposes and be able to trust that it's cleanly licensed\n2. duplicate data, as long as you mention (attribute) this source\n3. use this data to create analyses and derived data (such as geocoding), without needing to provide attribution\n\nWe welcome you to contribute your edits and improvements directly to this repository. Please open a pull request!\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["public-transport","transit-data","bike-share","transit-agencies","realtime-data","gtfs-validator","gtfs-utils","gtfs-libraries","gtfs-files","gtfs-feed"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/20160","html_url":"https://ost.ecosyste.ms/projects/20160"}