finds.dev← search

// the find

dimartarmizi/map-to-poster

★ 938 · JavaScript · MIT · updated Jun 2026

MapToPoster JS is a client-side web app that turns any location into a high-resolution, customizable map poster with various themes, layouts, and export options.

A client-side tool that generates printable map posters from any location, using Leaflet for raster tiles and MapLibre GL for vector art styles. Aimed at developers or designers who want to self-host a "city poster" generator rather than pay Mapbox or similar SaaS. Entirely browser-side, so there's nothing to deploy beyond static files.

The dual-engine approach (Leaflet + MapLibre GL with synchronized viewports) is a genuine architectural choice, not just slapping two libraries together — bidirectional sync is actually tricky to get right. The export pipeline using html2canvas with onclone for high-res capture is the correct approach and supporting up to 50k px output is useful for print. Docker setup is clean: multi-stage build, Nginx Alpine runtime, config included. The observer-pattern state store keeping both engines and localStorage in sync without a framework is a solid vanilla JS design.

html2canvas is the weak link in the whole pipeline — it has well-documented failure modes with cross-origin tiles, WebGL content (MapLibre), and CSS transforms, so the 'high-fidelity export' claim needs to be stress-tested against the artistic themes which render via WebGL. There are no tests at all, which matters a lot for a tool where the export path is the entire product. Nominatim usage at scale will hit the public instance's rate limits immediately — the README doesn't mention this or suggest self-hosting. The theme system is a plain JS object with no validation, so a bad hex code in a custom theme silently corrupts the MapLibre style with no error boundary.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →