A native mobile remake of the classic iOS puzzle game Trainyard by Matt Rix, based on the open-source OpenTrainyard Rust/Bevy reimplementation by Mike Tasca.
A love letter to Trainyard.
This project exists because Trainyard is one of the most brilliant puzzle games ever made, and it deserves to live on. The original app disappeared from stores years ago, and its creator has moved on. This remake is built by people who love this game as much as you do — not for profit, not for clout, just so that anyone can pick it up and play it again.
If you enjoy this, go find Matt Rix on Twitter (@MattRix) and tell him his game is still amazing.
| Platform | Status | Location |
|---|---|---|
| Android | ✅ Playable MVP | Android/ |
| iOS | ✅ Playable MVP | iOS/ |
Both Android and iOS versions include:
- All 152 original puzzle levels
- Railroad-style track sprites matching the original game
- Touch-based track drawing with curve detection
- Dual-track switch tiles with visual flip on train passage
- Color mixing, splitting, painting mechanics
- Speed control slider
- Persistent progress (solved puzzles) and speed settings
- Auto-advance to next level on completion
OpenTrainyardRemake/
├── Android/ — Native Android app (Kotlin)
│ ├── app/src/main/kotlin/
│ │ └── com/opentrainyard/game/
│ │ ├── engine/ — Pure game logic
│ │ │ ├── Types.kt — GameState, Tile, Train, Track, etc.
│ │ │ └── Simulator.kt — Tick pipeline, collision, parsing
│ │ ├── data/ — Persistence & levels
│ │ │ ├── GamePrefs.kt — SharedPreferences (speed, progress)
│ │ │ └── Puzzles.kt — 152 level definitions
│ │ └── ui/ — Android UI
│ │ ├── MainActivity.kt — Level selection
│ │ ├── GameActivity.kt — Game screen
│ │ ├── GameView.kt — Touch + tick loop
│ │ └── GameRenderer.kt — Canvas sprite rendering
│ └── ...
├── iOS/ — Native iOS app (SwiftUI)
│ └── OpenTrainyard/
│ └── OpenTrainyard/
│ ├── Engine/ — Pure game logic
│ │ ├── Types.swift — GameState, Tile, Train, Track, etc.
│ │ └── Simulator.swift — Tick pipeline, collision, parsing
│ ├── Data/ — Persistence & levels
│ │ ├── GamePrefs.swift — UserDefaults (speed, progress)
│ │ └── Puzzles.swift — 152 level definitions
│ ├── UI/ — SwiftUI views
│ │ ├── LevelSelectView.swift — Level selection
│ │ ├── GamePlayView.swift — Game screen
│ │ └── GameBoardView.swift — Canvas rendering & touch
│ ├── Assets.xcassets — App icons & colors
│ ├── sprites/ — Game sprite assets
│ └── Info.plist
├── LICENSE
└── README.md
- Android Studio Meerkat (2024.3+) or later
- JDK 21 (bundled with Android Studio or install separately)
- Android SDK 35 (API level 35)
- Kotlin 2.1.0
- Gradle 8.13 (wrapper included)
- Open Android Studio
- File → Open → select the
Android/directory - Wait for Gradle sync to complete
- Connect an Android device via USB (enable USB Debugging)
- Click Run or press
Shift+F10
# Set environment (adjust paths for your system)
export JAVA_HOME="/path/to/jdk-21"
export ANDROID_SDK_ROOT="/path/to/Android/Sdk"
# Build
cd Android
./gradlew assembleDebug
# Install on connected device
adb install -r -t app/build/intermediates/apk/debug/app-debug.apk- Xcode 16.4+ (or latest version)
- macOS 15.0+ (for latest Xcode)
- iOS 16.0+ target device or simulator
- Swift 5.0+
- Open Xcode
- File → Open → select the
iOS/OpenTrainyard/OpenTrainyard.xcodeprojfile - Wait for indexing to complete
- Select a target device or simulator from the scheme menu
- Important: Configure code signing:
- Select the project in the navigator
- Select the "OpenTrainyard" target
- Go to Signing & Capabilities tab
- Check Automatically manage signing
- Select your Team from the dropdown
- Click Run or press
⌘R
cd iOS/OpenTrainyard
# Build for simulator
xcodebuild -project OpenTrainyard.xcodeproj \
-scheme OpenTrainyard \
-destination 'platform=iOS Simulator,name=iPhone 16' \
build
# Or use xcodebuild to run on connected device
# (requires proper provisioning profile setup)- Matt Rix (@MattRix) — Original Trainyard game creator. All game design rights belong to him.
- Mike Tasca (@micoloth) — Open-source Bevy/Rust reimplementation of the game logic.
- Gleb Karpushkin — Android/iOS native mobile remake.
Original sprite assets were extracted from the Trainyard Android app (version 1.1, circa 2012) published by Noodlecake Studios. These assets are used here solely for non-commercial fan recreation purposes. All rights to the original artwork belong to Matt Rix.
See LICENSE for full terms. The mobile source code is strictly non-commercial.
This is a fan-made project created out of love for the original Trainyard game. It is not affiliated with, endorsed by, or connected to Matt Rix or Noodlecake Studios in any way. No original game assets are included. If the original creator has any objections, this project will be taken down immediately — just open an issue or reach out.