Your next Greek train, instantly.
Metro • Tram • Suburban • InterCity Railway
A rail companion for Greece. Athens (metro, tram, suburban), Thessaloniki (metro + suburban), the InterCity corridor between them, and Patras suburban. Pick a station or let GPS find the nearest one and get a live countdown to your next departure. Works offline, underground, with no signal.
Syrmos (συρμός) is the Greek word for the carriages that form a metro train.
|
|
| Home | Live Map |
- Offline-first. Every release bundles a full snapshot of the API; the app launches with correct data on airplane mode and syncs silently when online.
- Live train map with simulated metro/tram positions and real-time suburban tracking from the Hellenic Train SSE feed.
- Frequency-band projector computes next departures from operator rules, so schedules stay correct without a client release.
- Real OSM track geometry for every line: T7 Piraeus loop, M3 airport branch, A4 Megara curve render along actual rail.
- GPS nearest station, trilingual EN/EL/SQ (Albanian first-class), light/dark theme, full timetables, station details, line browser.
- Ariadne, an offline transit assistant: ask in plain English, Greek or Albanian and she answers departures, last trains, routes and fares from the bundled data. A tool-only intent router with an optional on-device LLM — she never invents a fact.
- Hot-patchable schedules via
api-syrmos.peterdsp.dev: fix a band on the Pi, every installed app sees it on next cold start.
Greek passenger rail, city by city. 32 lines, four regions.
| Region | Lines | Operator |
|---|---|---|
| Athens | Metro 1/2/3, Tram T6/T7, Suburban A1-A4 | STASY, Hellenic Train |
| Thessaloniki | Metro TM1 (live), TM2 (Kalamaria, opening) • Suburban Larisa, Florina, Sindos, Serres-Drama | Thessaloniki Metro, Hellenic Train |
| National | InterCity Athens–Thessaloniki, Athens–Leianokladi, Alexandroupoli–Orestiada–Ormenio (Evros) • Tourist rail: Katakolo–Pyrgos–Olympia, Pelion (Ano Lechonia–Milies), Diakopto–Kalavryta rack (suspended) • Rail-replacement buses: Paleofarsalos–Kalambaka, Volos–Larisa, Drama–Xanthi–Alexandroupoli, Kiato–Patra, Tithorea–Lamia–Stylida | Hellenic Train |
| Patras | Suburban Kaminia & Rio branches, Kato Achaia connecting bus, University campus shuttles | Hellenic Train |
Every timetable is transcribed from the official Hellenic Train / railway.gov.gr sources and stored as exact per-station times — never estimated. A line that is built but not yet open (Thessaloniki Line 2) renders greyed and carries no departures until it opens.
One Kotlin Multiplatform codebase. iOS uses SwiftUI + MapKit, Android uses Compose + osmdroid, web uses Compose for Wasm + Leaflet. Shared train simulation, schedule logic, data layer, and icons.
iosApp/ SwiftUI shell (Apple Maps)
androidApp/ Compose Activity shell (osmdroid)
composeApp/ KMP composition root, navigator, Koin wiring
feature/ home, lines, stations, schedule, map, settings
core/
domain/ use cases, projector, LiveArrivalsProvider
data/ repositories, DataSeeder, ScheduleSync
database/ SQLDelight + platform drivers
network/ Ktor services
designsystem/ theme, shared components
navigation/ Voyager tabs and routes
model/ domain data classes
common/ Result, datetime, geo
build-logic/ convention plugins for the 15+ modules
ops/ Pi-hosted FastAPI service + importers (syrmos-api, syrmos-web)
docs/ contribution workflow, case study, privacy, badges, screenshots
scripts/ importers, deployers, seed snapshotters
assets/ icon packs, line geometry, timetable PDFs
Backend lives on a Raspberry Pi behind Cloudflare Tunnel at api-syrmos.peterdsp.dev. It serves /api/lines, /api/schedules, /api/holidays, /api/fares, /api/announcements, /api/trains (SSE relay), and /line-geometry/{id}.geojson, all ETag-driven. Source of truth is SQLite, edited through a gated /admin UI.
Stack: Kotlin 2.1, Compose Multiplatform 1.8, SwiftUI, SQLDelight 2.1, Koin 4.1, Ktor 3.1, Voyager 1.1, osmdroid, Leaflet, kotlinx-datetime.
Prereqs: JDK 17+, Android Studio Ladybug+, Xcode 16+ (iOS).
# Android
./gradlew :androidApp:installDebug
# iOS: auto-detects project, picks latest simulator, builds, installs, streams logs
./scripts/simulator.sh
./scripts/simulator.sh --device "iPhone 16 Pro" --clean
./scripts/simulator.sh --release
./scripts/simulator.sh --list
# Web dev
./gradlew :composeApp:wasmJsBrowserRun
# Web release
./gradlew :composeApp:stageWebRelease
./scripts/deploy-web-to-pi.sh
# Tests
./gradlew allTestsSchedule data is encoded as operator rules (operating hours + frequency bands by daypart), not as pre-computed departure lists, so it stays accurate when the user's clock disagrees with the build clock.
- STASY: Metro 1/2/3 and Tram T6/T7
- Hellenic Train: Suburban A1/A2/A3/A4 (PDFs archived in assets/hellenic-train-timetables/)
- OASA 24mmm: Saturday 24-hour grid, scraped daily
A daily Pi timer hashes upstream PDFs; when anything changes, the admin UI surfaces the diff before the next snapshot ships. Reference data (coords, icon rules, holidays, M3 split, T7 loop) lives in ops/syrmos-api/pkg/.
Syrmos is not affiliated with STASY, Hellenic Train, or OASA. Suburban ticket purchases open Hellenic Train's official site under their own terms.
Shipping: iOS 2.0.0 (build 138), Android 2.0.0 (versionCode 223), Web (rolling). See CHANGELOG.md for what landed in each release. The next major release direction, 3.0 "Journeys", is defined in docs/plans/3.0-JOURNEYS.md. The changelog is the source of truth, kept in sync at every release.
- Contributing: PR-first workflow with a CI guard on
master. See contribution workflow and .github/CONTRIBUTING.md. - Privacy: no data collection, no analytics, no tracking; location stays on-device. Privacy Policy.
- License: code is BSD 3-Clause (LICENSE), docs and assets are CC BY-SA 4.0 (docs/LICENSE-docs.md) and may also be used under BSD 3-Clause. Security: .github/SECURITY.md. Conduct: .github/CODE_OF_CONDUCT.md.
Logo by Petros Dhespollari, inspired by designs of art conservator Amalia Boura. Map data © OpenStreetMap contributors (ODbL). Live positions via Hellenic Train at railway.gov.gr. Trademarks remain with their owners.


