Show HN: Cartopolis – OpenStreetMap rendered like it's 1999

beefburger1 pts0 comments

Cartopolis

Nicolas Seriot

Drawing > Cartopolis

July 2026

Cartopolis: Rendering Maps Like It's 1999

In the late 1990s, online cartography services such as MapQuest or Yahoo! Maps provided maps as small, static GIF files. You clicked an arrow, waited, and a new pane appeared: jagged roads, plain colors, bitmap labels, and fixed zoom steps.

Cartopolis brings that visual language to present-day OpenStreetMap data, without emulating MapQuest or any other original software. It is a modern static website that draws today's maps as they could have been served to Netscape Navigator. Even the name is period dressing: Cartopolis could have been an actual mapping service of the era, somewhere between eAtlas and CyberMaps. The result can be exported as a GIF89a using the classic 216-color web-safe palette.

Live: seriot.ch/cartopolis — the whole of Switzerland as static files.

The Late-1990s Map Look

The easy way to fake this look is a beige palette and a pixelation filter. Cartopolis does neither. The style is not applied afterwards. Instead, it emerges from the pipeline the way grain emerges from film. The renderer enforces a handful of deliberately chosen rules, and the look follows on its own:

integer pixel rounding, no antialiasing anywhere

216-color web-safe palette, no dithering (flat fills, hard color banding)

aggressive geometry simplification (Douglas–Peucker, tolerance of roughly one on-screen pixel at every zoom level)

dark road casings painted before bright fills

bitmap labels stamped in white around the glyph, then once in black

fixed discrete zoom levels

Plus a few period props: hand-drawn 17 px shields, a red star marker, and a 1 px border.

Today's OpenStreetMap contains far more detail than a late-1990s web map could display, so the geometry is cut until curves become short, jagged polylines. Nothing glides and nothing blends: diagonal roads staircase, flat tints meet in hard bands, and zoom steps between fixed scales. The result is crisp and high-contrast — pure black casings, saturated fills, no blur anywhere — a look that feels almost novel now that design tendencies point the opposite way, toward soft gradients, translucency, and muted low-contrast palettes. The jagged edges and crowded labels are not defects, they are the medium.

Side by Side with 1999

Stefan Marti saved MapQuest maps of his hometown in 1999 and still hosts them today. Below is his map of Trimbach, Solothurn, side by side with Cartopolis centered on the same location and rendered at the same horizontal scale, about 4 meters per pixel. The red star marks the same spot in both panes. Click either map for full resolution.

Trimbach on MapQuest, 1999. Archived by Stefan Marti.

Trimbach on Cartopolis, 2026. Similar constraints, not the same software.

This is not a pixel-perfect reproduction. The differences are as instructive as the similarities.

MapQuest, 1999<br>Cartopolis, 2026

Street labels<br>rotated along roads<br>horizontal

Scale bar<br>top-right<br>bottom-left

Palette<br>20 colors in this pane; 3 are web-safe<br>216-color web-safe

Pixel scale<br>north–south scale ≈16% larger than east–west<br>square-pixel Web Mercator

Scale indication<br>horizontal only<br>both axes

MapQuest rendered on a non-square pixel grid. Fitting its street network against today's OpenStreetMap geometry puts one 1999 pixel at about 4.2 m east–west but 4.9 m north–south: the map is squeezed vertically by roughly 16%. Raw unprojected latitude/longitude would squeeze it by 48% at this latitude; the measured squeeze instead points to an equirectangular grid true at about 38°N — the middle of the continental United States, an ocean away from Trimbach. When overlaying the two maps at the red star, this aspect-ratio mismatch makes features drift apart vertically the further you move from the center.

Cartopolis is stricter than this MapQuest example in some respects: it limits every color to the web-safe palette and reports both horizontal and vertical scale. It is cruder in others: horizontal labels, more aggressively simplified geometry, and auto-generalized coastlines where 1999 cartographers worked by hand. What survives across 27 years is the visual language: flat fills, jagged road casings, haloed labels, numbered route shields, and a red star.

Explore and Export

Cartopolis supports panning, zooming, and offline place and street search, all from static files. A view can be shared through its URL or saved as a GIF — a genuine indexed GIF89a produced by the project's own LZW encoder, not a canvas screenshot.

Poster mode renders canvases up to 4000×4000 pixels and exports them at 2× scale: an 8000×8000 web-safe GIF poster. An optional Aerial Photo view shows current swisstopo imagery for comparison.

Architecture

An offline compiler turns an OpenStreetMap extract into compact binary vector packs. The page fetches only the pieces it needs — HTTP Range requests pull individual byte ranges out of the packs — rasterizes the pane in JavaScript, and LZW-encodes the...

cartopolis pixel mapquest scale maps labels

Related Articles