- Interactive map with 18,000+ railway stations across Italy, Switzerland, Germany, Finland, Belgium, Denmark, the Netherlands, Norway, Sweden, Poland, the United Kingdom, and Ireland
- Real-time arrivals and departures from official data sources (RFI, SBB, DB, Digitraffic, iRail, Rejseplanen, NS, Entur, Trafiklab, PLK, LDBWS, Irish Rail)
- Station search with fuzzy matching
- Operator directory with network metadata and static coverage maps
- Trending stations ranked by unique visitors, with both unique and total visit counts available
- Shareable URLs with map state, saved stations, and recent stations
- User geolocation support
- Responsive mobile-friendly design
| Directory | Description |
|---|---|
| apps/api | Cloudflare Workers API for train data |
| apps/static | Cloudflare Worker for shared media assets |
| apps/studio | Admin tool for station data management |
| apps/web | Next.js frontend with interactive map |
| packages/data | Shared station data and TypeScript types |
| packages/ui | Shared React component library |
# Install dependencies
pnpm install
# Run all development apps
pnpm dev
# Run specific app
pnpm --filter=web dev # Frontend at localhost:3000
pnpm --filter=api dev # API server
pnpm --filter=static dev # Shared media Worker at localhost:8788
pnpm --filter=studio dev # Admin tool at localhost:3001| Command | Description |
|---|---|
pnpm dev |
Start all development servers |
pnpm --filter=static dev |
Start the shared media Worker at localhost:8788 |
pnpm --filter=studio dev |
Start the admin tool at localhost:3001 |
pnpm build |
Build all packages |
pnpm lint --force |
Lint all packages |
pnpm format |
Format code with oxfmt |
pnpm check-types --force |
Run TypeScript type checking |
pnpm --filter=api cf-typegen |
Generate API Worker types |
pnpm --filter=static cf-typegen |
Generate static Worker types |
Shared media is served by apps/static from static.railradar24.com. Small, repo-owned assets such as flags, operator logos, screenshots, and other reusable images are deployed through Cloudflare Workers Static Assets. Larger, growing collections such as future station photos are planned for a dedicated R2 bucket behind the same media app rather than being bundled into the web deployment.
Rail Radar is free to use and independently maintained. If it's useful to you, you can help cover the API calls, hosting, and map tiles that keep it running.
Donate via Polar — one-time, monthly, or yearly support. Also reachable from the in-app /donate page or the "Sponsor" button at the top of this repository.
See CONTRIBUTING.md for setup, development workflow, quality checks, and pull request guidelines.
Station data contributions are supported through Rail Radar Studio. For the full workflow, see CONTRIBUTING.md and apps/studio/README.md.
This project is licensed under the MIT License - see the LICENSE file.
- 🇮🇹 Italian train data from RFI (Rete Ferroviaria Italiana)
- 🇨🇭 Swiss train data from transport.opendata.ch
- 🇫🇮 Finnish train data from Digitraffic
- 🇧🇪 Belgian train data from iRail (NMBS/SNCB)
- 🇳🇱 Dutch train data from NS (Nederlandse Spoorwegen)
- 🇬🇧 UK train data from LDBWS (National Rail)
- 🇮🇪 Irish train data from Irish Rail (Iarnród Éireann)
- 🇳🇴 Norwegian train data from Entur
- 🇸🇪 Swedish train data from Trafiklab
- 🇵🇱 Polish train data from PKP Polskie Linie Kolejowe (PLK)
- 🇩🇰 Danish train data from Rejseplanen
- 🇩🇪 German train data from Deutsche Bahn (DB)
- Map rendering by Mapbox
