About this map
Live buses for Cincinnati Metro and TANK (Northern Kentucky), drawn over neighborhood, city
and township boundaries. Not an official app and not affiliated with or endorsed by SORTA/Metro, TANK,
or any government listed below. Positions and predictions can be wrong or late: don't rely on this for
trip planning.
Provided as-is. This sketch and its data come without warranty of any kind, express
or implied, including fitness for a particular purpose. The authors and data providers aren't liable for
anything arising from its use. The code is released under the MIT License.
How it was made
- Written with Claude Code
(Anthropic) as a p5.js sketch, the
JavaScript successor to Processing.js.
- Runs on Cloudflare Workers.
A build step turns the timetables and boundary data into static files. A Worker fetches the live
transit feeds (they can't be read from a browser directly) and decodes the GTFS-realtime protobufs
with a hand-written reader.
- Lateness is the predicted arrival at the next stop minus the scheduled time.
Metro's comes from its trip-update predictions against the timetable; TANK's from the delay its feed reports.
- Time lost is history this site records itself: every 30 s it notes how much each bus's
delay changed and where, keeps 24 hours, and sums it into ~220 m grid cells. Nearest stop names come
from the timetables, which also mark route ends (where layovers happen) and timepoints (where early
buses hold).
- On-time history (pin a route): each time a bus passes a stop, the site counts how late
it was there, and keeps daily totals indefinitely. "On time" means no more than 1 minute early or
5 minutes late, measured at timepoints. These are from live predictions, not the agencies' official
records, so they won't match published figures exactly.
- Bunching: two buses on the same route, heading the same way, within 500 m of each other.
Data sources
- Cincinnati Metro (SORTA): GTFS timetable and GTFS-realtime vehicle
positions, trip updates and alerts.
Developer data.
License: SORTA/Metro developer data license: non-exclusive, limited and revocable
rights to use, reproduce and redistribute. Provided "as is" without warranty. SORTA/Metro keeps
ownership, and its trademarks may not be used with the data without written approval.
- TANK (Transit Authority of Northern Kentucky): GTFS timetable and
GTFS-realtime feeds from its
InfoPoint rider
site (Avail Technologies). tankbus.org.
License: offered free to developers; no written license was found. Rights remain with TANK.
- Cincinnati neighborhoods: City of Cincinnati / CAGIS
(Cincinnati Area Geographic Information System),
neighborhoods layer.
Terms: the CAGIS data
disclaimer: provided "as is", with no warranty and no liability for defects.
- Covington neighborhoods: City of Covington,
neighborhoods layer
on ArcGIS Online (see also CovData).
License: none stated on the layer. Used from the public service with credit.
- Northern Kentucky city limits: Commonwealth of Kentucky,
KY city limits
via KyGeoNet. Created by the Kentucky
Transportation Cabinet and updated by the Division of Geographic Information. Boone, Kenton and Campbell County
boundaries come from the Northern Kentucky Area Planning Commission.
License: none stated on the layer. Used from the public service with credit.
- Ohio cities, villages and townships; Kentucky communities; counties; Ohio River:
U.S. Census Bureau TIGERweb
(places, county subdivisions, census-designated places, counties, hydrography).
License: public domain (a U.S. government work, 17 U.S.C. § 105).
Software
- p5.js 1.9.4, loaded from cdnjs.
License: LGPL-2.1.
- GTFS and GTFS-realtime
specifications. License: Apache 2.0.
- No runtime packages: the Worker uses only built-in web APIs, and the build script only
Node.js built-ins.
License for this sketch
The sketch's own code (the p5.js sketch, its Worker and its build script) is released under the MIT License.
That covers the code only: the transit and boundary data stay under their providers' terms above.
Full MIT License text
MIT License
Copyright (c) 2026 Cincy Transit Live contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
These license summaries were checked in October 2026 and aren't legal advice. Read each
provider's own terms before reusing their data.