Skip to content

peterdsp/Syrmos

Repository files navigation

Syrmos

Syrmos

Your next Athens train, instantly.
Metro • Tram • Suburban Railway

Kotlin Compose SwiftUI Platform License

Download on the App Store   Get it on Google Play   Open Web App


Syrmos is a transit companion for the Athens metro, tram and suburban railway. 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 (συρmos) is the Greek word for the carriages that form a metro train.

Home Lines Map Settings
Home Lines Live Map Settings

Features

  • Instant departures at any station, any line, any direction
  • GPS nearest station detection sorted by walking distance
  • Live train map with simulated metro/tram positions and real-time suburban tracking
  • Realistic movement with station dwell, acceleration and deceleration curves
  • Custom station and vehicle icons shared across all three platforms
  • Line browser grouped by Metro, Tram, and Suburban with station counts
  • Station detail with connecting lines, interchange info, and next departures
  • Full timetable viewer with weekday, Friday, Saturday, and Sunday schedules
  • Bilingual interface in English and Greek
  • Light and dark theme with Metro Blue branding
  • Fully offline with all schedule data embedded in the app

Transit coverage

Mode Lines Stations Operator
Metro Line 1 (Green), Line 2 (Red), Line 3 (Blue) 71 STASY
Tram T6 (Syntagma-Pikrodafni), T7 (Akti Poseidonos-Voula) 56 STASY
Suburban A1, A2 (Airport), A3 (Chalcis), A4 (Kiato) 68 Hellenic Train

Platforms

All three platforms run from a single Kotlin Multiplatform codebase and share the same train simulation engine, schedule logic, data layer, and icon assets.

Platform UI Map
iOS SwiftUI + MapKit Apple Maps with polylines and train annotations
Android Compose + osmdroid OpenStreetMap with PNG vehicle/station markers
Web Compose for Web (Wasm) + Leaflet OpenStreetMap with SVG directional train icons

Getting started

Prerequisites

  • JDK 17+
  • Android Studio Ladybug or later
  • Xcode 16+ (for iOS)

Android

./gradlew :androidApp:installDebug

iOS

./simulator.sh

The script auto-detects the Xcode project, picks the latest simulator, builds, installs, and streams logs.

./simulator.sh --device "iPhone 16 Pro" --clean    # specific device
./simulator.sh --release                            # release build
./simulator.sh --list                               # show devices

Web

./gradlew :composeApp:wasmJsBrowserRun

Production deploy:

./gradlew :composeApp:stageWebRelease
# Output: composeApp/build/web-release/

# Or deploy directly to syrmos.peterdsp.dev:
./scripts/deploy-web-to-pi.sh

Tests

./gradlew allTests

Architecture

Multi-module MVI with unidirectional data flow. 15+ Gradle modules managed by convention plugins in build-logic/.

iosApp (SwiftUI, MapKit, native iOS experience)
androidApp (Compose Activity shell)
    |
composeApp (KMP composition root, tab navigator, Koin wiring)
    |
feature/ -- home, lines, stations, schedule, map, settings
    |        each: Screen + ViewModel + UiState
    |
core/ -- domain    (use cases)
      -- data      (repositories, seed data, DataSeeder)
      -- database  (SQLDelight, platform drivers)
      -- network   (Ktor, live train feeds)
      -- designsystem (theme, shared components)
      -- navigation (Voyager tabs and routes)
      -- model     (domain data classes)
      -- common    (Result type, datetime, geo distance)

Tech stack

Dependency Role
Kotlin 2.1 Language (Android, iOS, Web)
Compose Multiplatform 1.8 Shared UI
SwiftUI + MapKit Native iOS app
SQLDelight 2.1 Local database (all platforms)
Koin 4.1 Dependency injection
Ktor 3.1 HTTP client (live train feed)
Voyager 1.1 Multiplatform navigation
osmdroid Android map tiles
Leaflet.js Web map tiles
kotlinx-datetime Athens timezone calculations

Data sources

Schedule data is extracted from official PDF timetables published by:

Live train positions from the Hellenic Train API.

Syrmos is not affiliated with STASY, Hellenic Train, or OASA.

Roadmap

Planned for upcoming releases:

  • Plan your trip -- route planning with transfers, walking directions, and estimated arrival times across metro, tram, and suburban lines
  • AI chat helper -- ask questions about the Athens transit network, get route suggestions, and receive real-time travel advice
  • Accessibility features -- VoiceOver and TalkBack support, dynamic type, high contrast mode
  • National rail coverage -- intercity trains (Athens-Thessaloniki, Athens-Patras) with live tracking
  • Suburban rail in other cities -- Thessaloniki and Patras suburban networks
  • Push notifications -- alerts for service disruptions on your saved lines
  • Widget support -- home screen widgets for next departure at your favorite station

Privacy

Syrmos does not collect, store, or transmit personal data. Location is processed on-device only. No analytics, no ads, no tracking. See Privacy Policy.

License

BSD 3-Clause. See LICENSE.

Schedule data is derived from publicly available timetables by STASY and Hellenic Train. Live positions from the Hellenic Train API. Syrmos is not affiliated with any Greek transport authority.

About

Syrmos: Athens Transit - Live rail times, all in one place. A Kotlin Multiplatform app for Athens metro, tram and suburban railway.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors