
On the web
The flat map stands up: OpenStreetMap rendered as a 3D world
Streets GL takes the planet's volunteer-drawn map data and extrudes it into a sunlit 3D city with reflections, terrain and live air traffic, in one browser tab.
I searched for Manhattan and the map got out of bed. Buildings rose out of the flat street grid with real heights and real roofs, the sun threw shadows down the avenues, and a plane crawled across the harbor, because Streets GL also draws live air traffic on top, apparently just to show off.
The part that got me is where the 3D comes from. Nobody modeled this city. Every wall, roof shape and tree is OpenStreetMap data, the same volunteer-drawn map you have been giving directions with for years, extruded into geometry on the fly while you pan. Drag the time-of-day slider and the whole scene relights: long morning shadows, hard noon, a dusk that turns the windows warm.
The build under the city
Streets GL is open source, MIT licensed, and written in TypeScript by one developer who goes by StrandedKitty. There is no Three.js underneath. The project wraps raw WebGL2 in its own low-level rendering library and manages each frame with a render graph, the architecture big game engines use to schedule rendering passes.
The repo's vital signs, checked this week: 1.1 thousand stars, 111 forks, 395 commits on the dev branch, 100 open issues, and a Discord community linked from the README. One person is fielding most of that.
The passes are not shy either: deferred shading with physically-based materials, temporal anti-aliasing, screen-space ambient occlusion, screen-space reflections, depth of field and bloom, plus a real atmosphere model that fades distant blocks into haze. That is a AAA-adjacent pipeline pointed at map data.
The render graph is the part I keep thinking about, so here is the thirty-second version. Each visual effect is a pass that reads some buffers and writes others, and the graph works out the ordering and the lifetimes automatically, so adding a new effect means declaring its inputs and outputs instead of hand-threading it through the frame. It is the discipline that lets one person maintain a renderer with this many moving parts without the frame collapsing into spaghetti.
The geometry side is its own trick. Building footprints follow OSM's Simple 3D Buildings tagging, so a mapper's height and roof-shape tags become gabled, domed and terraced volumes. Vector tiles are baked from the full Planet.osm dump with a modified Planetiler, coastline water comes from OpenStreetMap's shapefile service, terrain elevation streams from Esri's tiles with levels of detail, and search is plain Nominatim. One honest footnote from my session: the footer dated its last tile bake to September 2023, the kind of gap a one-person planet renderer is allowed.
Straight from the maker
When StrandedKitty announced the project on the OpenStreetMap forum in May 2023, the post was modest to the point of comedy. Years of work got summarized as putting up an open-source alternative to the existing 3D maps, and the closing line asked whether the thing was worth continuing to spend time on. The thread answering that question now runs to ten pages.
Two details from that first version show the distance traveled. Tiles originally came straight off public Overpass API instances, with caching for popular areas bolted on as what the author called a temporary solution, and the geometry was already being generated at runtime while you pan, the same architecture the current Planetiler-fed version keeps.
The two skylines that came before
The announcement names its rivals outright, and both are sightings in their own right. F4map has rendered OSM in 3D for years and piles on atmosphere by the armful: sun, rain and snow toggles, night through noon through evening, traffic for cars and even boats moving on the water. OSM Buildings draws the sober version, footprints and heights without the cinema, and now runs as a data platform. Streets GL's wager was that the cinema is the point: that the volunteer map deserves the same bloom and haze a AAA title gets.
For another case of a dataset rendered as the shape it secretly is, there is the whole planet drawn as columns of people.
Streets GL is honest about being early: some cities render as proud skylines, others as flat suburbs, because the 3D only exists where mappers tagged heights. That gap is the fun part. The renderer is a preview of how good the free map already is in the places people care for it, block by tagged block.
Fixing your own block is absurdly within reach, which is the
part I love. The tags the renderer reads are ordinary OSM
fields anyone can edit: building:levels, height,
roof:shape and their relatives from the Simple 3D Buildings
scheme. Add a roof shape to your house in the OSM editor today
and the next tile bake hands you the geometry back, standing
up.
Fair warning about the machine: all those passes cost real GPU, and my laptop's fans found a register I had not heard before. There is a settings panel to turn the pretty down.
It is the same conviction that put every live radio station on a spinning globe: when the data has a natural shape, render the shape. Maps are of buildings, so let the map be buildings.
If you want to see how this kind of engine is put together, the repo splits its renderer, render graph and math into reusable modules, and WebGL2 Fundamentals is the path from a blank canvas to your first lit triangle. Go find your own block. Then go add your roof height to the map.

Previously
Spin the planet, hear it sing