Loading streetcar data…
Delay vs. clean run, seconds per 100 m
08153060+
Stop Signal Signal with transit priority Turn ban (zoom in)

Routes compared

This is an observation, not a cost: no trip avoids every delay, and time saved could just as well become more frequent service.

Signals ranked

Where streetcars are most often held 90 s or more (about a typical signal cycle), counting busier signals for more. Follows the route chips. Tap a signal to see it on the map.

Transit priority, but streetcars still held

No transit priority, streetcars held most

This shows where streetcars wait, not why: a red light, a queue spilling back from the next signal, or traffic. It can't see what kind of priority a signal has or whether it fired.

Cars in service

: streetcars carrying passengers through an average day, against the TTC's schedule. Pick routes in the panel to narrow it down.

Day by day: scheduled streetcar hours that ran

Counted from the live feed every 30 seconds: every streetcar signed on to a trip on these routes, wherever it is (including standing at the end of the line). Cars heading to or from the yard aren't in the feed. Scheduled: the TTC's published vehicle schedules, each car counted from its first trip until its last, unless it goes back to the yard in between. A day marked * was only partly logged; both numbers then cover the logged hours only. Buses on streetcar routes are shown separately; scheduled replacement buses aren't counted as streetcars.

What's a "clean run"?

A clean run is how a streetcar moves along a segment of track when things go well: the car stops at its passenger stops, but isn't held up by red lights, traffic, turning cars or crowds.

How it's measured. Each route is split into segments, each centred on one stop and measured in 25 m slices. For every segment we take the fastest 10% of real daytime trips (06:00 to midnight). So it's not a theoretical top speed; it's what real cars actually manage there when nothing holds them up, stop included.

Delay is how much longer the typical (average) trip takes than that clean run, shown as seconds lost per 100 m. Tall peaks are where the extra time goes: usually traffic signals, busy stops and turns.

Smoothing. Positions arrive only every ~30 seconds, so a waiting car's time lands in whichever 25 m slice it happened to be reported in. The ridge and the tooltip both average over about 125 m (five slices) so the picture isn't just noise.

Peak height grows with the square root of the delay, so a handful of very bad spots don't drown out everything else and small delays still show. A spot with four times the delay stands twice as tall; the colour and the tooltip give the actual value.

Whole routes. Adding up every segment's clean run gives a route's clean-run total: a trip no single car actually makes, a bit like adding up the best time on every segment of a ride, a run nobody really did. So route cards don't present it as a trip time; they show how much a typical trip loses against it. Typical time divided by clean-run total is what traffic engineers call the travel time index (1.00 = no delay). Operating speed in the routes chart is route length over typical trip time, stops and delays included, the speed transit agencies usually report.

Stops, signals and everything else

The clean run includes a quick stop, so extra boarding time at a busy stop counts as delay. That's a different problem from red lights or traffic, so every spot is labelled using the City of Toronto's traffic signal list:

The tooltip also says whether a signal has transit priority.

Turn bans. Zoom in and a small icon marks signals where the City's traffic by-law bans turns; hover for which turns, which directions and when, and whether streetcars are exempt. "No turn on red" rules are left out.

Transit signal priority

The panel compares the time a typical streetcar loses approaching signals with and without transit signal priority: the median across signal approaches (the ~100 m before each signal, each direction separately, with at least 20 passes). It follows the route, direction and time-of-day filters. Read it with care:

Clean-run speed view

The delay view compares each spot with its own clean run, so slowness that every car shares is invisible there. The clean-run speed view shows that instead: how fast a clean run moves through each part of the track (the fastest 10% of daytime passes), leaving out time stopped at stops. Slow spots away from stops point to curves, switches and special trackwork, or slow orders on worn track. Near stops cars are braking and pulling away, so those parts are faded.

Waits at stops

Delay is about the car; riders also feel spacing. Two cars arriving together and then a long gap leave far more people waiting than evenly spaced cars, even if every car runs on time between stops. The Waits view measures that the way London and North American transit agencies do:

Only frequent service counts: hours scheduled every 12 minutes or better. On infrequent service people time their trips to the schedule, so on-time performance matters more there. The schedule is the TTC's published one in effect that day. A stop where fewer than a third of scheduled cars showed up that day is treated as not served (a diversion, or buses off the track) and left out; its tooltip says on how many days. Departure times come from positions about every 30 seconds, so each headway is good to within about 10 to 20 seconds; a car the feed lost track of shows up as a longer gap.

Signals view

For every signal on the streetcar network, and each direction separately, this times how long streetcars take through the last 100 m before it (to just past the stop line), and compares that with a clean approach: the quickest 10% of daytime passes. A streetcar that takes more than 90 seconds longer than that has most likely missed the first green it could have made: 90 s is about a typical Toronto signal cycle. Each signal's real cycle isn't published in usable form, and it varies by intersection and time of day (some adjust it constantly), so 90 s is a stand-in, not that signal's cycle. The tooltip also gives the share held over 1 minute and over 2 minutes, so a finding doesn't hang on the exact number.

The held 90 s+ rate is the share of streetcars that were held that long. On most approaches it's around 1%; a few stand out. Two ranked lists pick those out: signals with transit priority where streetcars are still often held (priority may not be suited, may fire too late, or queues may block it), and signals without priority where it might be worth having. Busier signals count for more.

Faded track

Track where no streetcar has run for a few days is drawn faded: a diversion, a closure, or buses running instead. Its numbers are real but from before then, and the tooltip says when a streetcar was last seen there, with any recent TTC alert for the route. If a stretch is closed for two weeks or more and then reopens, only what's measured after the reopening counts, so rebuilt track isn't averaged with how it was before.

What this doesn't show

Worth knowing