About
Toronto is a city in a forest. These are its trees.
torontotrees is two things sharing one data pipeline:
- A search tool โ type any Toronto address (or just a street), get every city-owned street tree in front with its species, size, neighbourhood, bloom time, fall colour, a Wikipedia photo, and a Street View link so you can see the actual tree.
- A blog โ essays and visualizations drawn from the same data: equity gaps, species portraits, the 2008โ2018 canopy change, the west-end cherry-blossom belt, the city's seven one-of-one rare trees, and more.
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:
- Trees on private property (front yards, backyards, institutional grounds)
- Trees in parks, ravines, and natural areas (those have separate inventories)
- Trees inside High Park (most of that canopy is park interior, not road allowance)
- Backyard ash survivors, backyard cherry blossoms, your neighbour's beloved magnolia
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.