๐ŸŒณ torontotrees

About

Toronto is a city in a forest. These are its trees.

torontotrees is two things sharing one data pipeline:

Why it exists

Toronto is, famously, a city in a forest. The Street Tree Data set published by the City of Toronto lists 689,013 city-owned trees on road allowances โ€” each with a species, size (diameter at breast height), and precise location. That's a tree for every four Torontonians. But for all the "city in a forest" rhetoric, most residents can't tell you what species is in front of their own house.

So step one is: if you're curious, here's the answer. The front-page search goes from address to tree cards in a second.

Step two, once you notice the trees, is harder questions. Why does Cabbagetown have 45% canopy when Trinity-Bellwoods has 20%? Why is one in ten of Toronto's street trees a Norway maple โ€” a species the city no longer plants? Where did the ash forests go between 2008 and 2018? Which neighbourhoods gained canopy during the emerald ash borer decade, and how? The blog posts are my attempt to work through some of them.

What the data covers (and doesn't)

The street-tree inventory covers city-owned trees on road allowances โ€” the strip between the sidewalk and the road. It does not cover:

For "real canopy" including all those, the Forest and Land Cover study (used in some of the blog analyses) is the authoritative source. About 60% of Toronto's actual canopy lives on land this dataset doesn't touch.

How it was built

Data
Toronto Open Data (street trees, neighbourhoods, 2021 census, 2008 + 2018 land cover)
Pipeline
Python + uv, DuckDB (with spatial), pyogrio, matplotlib, shapely
Site
Static HTML/CSS/JS โ€” one HTML file per page, no framework, no build step beyond regenerating JSON from Parquet
Hosting
GitHub Pages (free tier), rebuilt via GitHub Actions weekly to catch city data refreshes
Species info
Wikipedia REST API, plus structured data scraped from Toronto's species-planted-on-streets page
Code
github.com/ttarabula/torontotrees โ€” full pipeline, reproducible

The entire project is the work of a single weekend's afternoon sessions of me tinkering with Claude Code. The code is public; the data is public; the writing is hand-edited. If you see something wrong in the data or the analysis, open an issue and I'll fix it.

Feedback

Have a request, correction, or idea? File a GitHub issue.