An interactive map showing all registered charging stations in Germany, built with Elm and Leaflet.

The data comes from the Ladesäulenregister project, which converts the official CSV from the Bundesnetzagentur into a gzip-compressed JSON file. Stromfinder loads this data in the browser, decompresses it with pako, and visualizes ~70,000 charging stations on an OpenStreetMap map. The data is updated weekly automatically.

Features

  • Marker clustering – ~70,000 stations rendered efficiently on OpenStreetMap
  • Detail view – address, charging points, plug types, power ratings, opening hours
  • Color coding – fast chargers (orange) vs. normal chargers (green)
  • Responsive – works on desktop and mobile
  • Progressive Web App – installable on phone and desktop, works offline after first load

Tech stack

The UI is written in Elm. Map integration (Leaflet) and data loading/decompression (pako) are handled via Elm Ports in JavaScript.

Component Library
UI / State Elm 0.19
Map Leaflet 1.9
Tiles OpenStreetMap
Clustering Leaflet.markercluster
Decompression pako (gzip in the browser)

How it works

The Elm application manages the UI state and JSON decoding. Communication with the Leaflet map and the pako decompression library happens through Elm Ports – a clean boundary between the pure Elm world and JavaScript side effects. A Service Worker provides offline caching so the app works without a network connection after the first load.

Building

The project includes a build.sh script that compiles Elm to optimized JavaScript. For local development, a Docker setup is provided that builds everything (Elm compilation + pandoc rendering) in a container – no local Elm installation required:

cd docker
docker compose up --build

On every push to main, a GitHub Action compiles Elm, renders the about page with pandoc, generates a version file, and deploys the public/ directory to GitHub Pages.

Data note

The raw data (~80 MB uncompressed, ~5–10 MB gzip) is loaded from ratopi.github.io/ladesaeule/. The first load may take a few seconds depending on connection speed.

Try it out: ratopi.github.io/stromfinder

Source code on GitHub. Licensed under Apache License 2.0.