KRAIL is a modern, Compose Multiplatform app providing a seamless trip-planning experience across Android and iOS. Built using Kotlin and Swift (for minor iOS-specific parts), the app offers real-time public transport information, personalised features like trip-saving and themes, and modular architecture for maintainability.
- Architecture
- Core Technologies
- App Features
- Getting Started
- Building & Running
- Contributing
- License
- Contact
KRAIL follows a modular, cleanly separated architecture to ensure clarity, scalability, and maintainability across platforms. Key modules include:
composeApp: Main entry point and UI code for Android and shared Compose UI components.iosApp: iOS-specific entry point and platform adaptations.core: Shared business logic (domain layer).feature/...: Feature-specific modules (e.g. trip planner, discover).gtfs-static: Handling GTFS (General Transit Feed Specification) assets or prebuilt data.taj: Design system (Compose-based theming—not Material Design, but inspired by it).sandook: Local Database for offline storage.core: Core utilities and extensions e.g. appInfo, coroutines-ext, date-time, log, network.
| Area | Technology |
|---|---|
| View Layer | Jetpack Compose + Compose Multiplatform |
| Dependency Injection | Koin |
| Networking | :core:network module using Ktor (async HTTP client) |
| Local Storage | sandook module SQLDelight (type-safe SQL) |
| Design System | taj module built using Compose foundation APIs inspired from Material Design |
| Platform Management | Gradle Kotlin DSL, multiplatform targets |
- Cross‑Platform UI: Shared Compose UI logic across Android and iOS.
- Real-Time Trip Planning: Fetch and plan transit routes in Sydney and NSW.
- Save Frequent Trips: Quickly access saved trips for one‑tap planning.
- Park & Ride Integration: Discover nearby parking availability and integrate with train/metro journeys. See :feature:park-ride.
- Custom Themes: Match app appearance to user preferences. See ThemeSelectionScreen.kt.
- "Discover Sydney" (v1.7.5 update): Explore local attractions, food spots, and events.
- JDK 17+
- Kotlin SDK 2.1+
- Android Studio (latest stable)
- Xcode (for iOS development)
- API Keys
NSW_TRIP_PLANNER_API_KEY— obtain via NSW Open Data developer platform.
- Firebase project (for analytics, crash reporting, etc.)
- Put google-services.json in
composeApp/src/debug/andcomposeApp/src/release/ - Put GoogleService-Info.plist in
iosApp/iosApp
- Put google-services.json in
-
Clone the repository:
git clone [email protected]:ksharma-xyz/Krail.git
-
Build:
./gradlew build
-
Run Tests:
./gradlew test -
Run App:
Use Android Studio or Xcode to deploy on simulators or real devices.
Welcoming contributions from the community. Please create a new issue or pick up an existing one. Please follow module structure and existing code patterns for consistency.
Copyright 2024-2025 Karan Sharma.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- 🌐 Website: krail.app
- 📧 Email: [email protected]
- 📘 Facebook: /krailapp
- 📸 Instagram: /krailapp
- 💼 LinkedIn: /krail
- 👾 Reddit: r/krailapp

