TrainLCD is a mobile application that simulates Japanese railway company LCDs, providing real-time navigation and station information for train passengers.
This app recreates the authentic experience of Japanese train travel by displaying station information in the same style as actual train LCD screens. Whether you're a tourist visiting Japan, a daily commuter, or simply fascinated by Japanese railway systems, TrainLCD offers an immersive and practical navigation experience.
- Screenshots
- Features
- Getting Started
- Download
- Development
- Contributing
- Code of Conduct
- Architecture
- Support
- Join our Community
- Data Sources
- Contributors
- Related Projects
- License
Screenshots and demo videos coming soon...
- π Authentic LCD: Experience genuine Japanese train LCD interfaces with accurate styling from major railway companies
- π Real-time Location Tracking: Automatically detect your current position and display relevant station information
- π Smart Notifications: Get notified when approaching or arriving at your destination station
- π¨ Multiple Themes: Choose from various railway company themes including JR East, JR West, Tokyo Metro, and more
- π± Cross-platform: Available on both iOS and Android devices
- π Offline Support: Core functionality works without internet connection
- πΎ Comprehensive Coverage: Supports major railway lines across Japan
Before you begin, ensure you have met the following requirements:
- Node.js 20.x
- npm 10.x
- React Native development environment set up
- Expo CLI installed globally
- Firebase CLI (for Cloud Functions development)
- Android Studio (for Android development)
- Xcode (for iOS development, macOS only)
-
Clone the repository:
git clone https://github.com/TrainLCD/MobileApp.git cd MobileApp -
Install dependencies:
npm install
Note: Configure
GQL_API_URLbefore runningnpm run gql:codegento regenerate GraphQL types.
To start the development server:
npm run start- iOS:
npm run ios - Android:
npm run android - Web:
npm run web
If you like this project, join our Discord community!
NOTE: English is welcome, but in the community, we usually use Japanese for discussions, announcements, etc.
https://discord.gg/7sQhQhnvvw
src/
βββ components/ # Reusable UI components
βββ screens/ # Screen components
βββ hooks/ # Custom React hooks
βββ store/ # Zustand stores and selectors
βββ stacks/ # React Navigation stack definitions
βββ providers/ # Context providers and integration wrappers
βββ lib/ # API clients and shared integrations
βββ config/ # Static configuration helpers
βββ constants/ # Shared constants
βββ utils/ # Utility functions and test helpers
βββ test/ # Testing utilities and e2e harness
βββ __mocks__/ # Jest mocks
βββ __fixtures__/ # Test fixtures
βββ @types/ # Global TypeScript declarations
βββ models/ # Data models
βββ index.tsx # App entry point
βββ translation.ts # i18n resources
βββ lineSymbolImage.ts # Line symbol metadata
android/ # Native Android project
ios/ # Native iOS project
functions/ # Firebase Cloud Functions
docs/ # Architectural notes and runbooks
assets/ # Static media bundled with the app
utils/ # Tooling scripts and codegen helpers
npm run start- Start the Expo development servernpm run android/npm run ios- Build and launch native binariesnpm run web- Serve the Expo web buildnpm run lint- Run Biome linternpm run format- Format code with Biomenpm test- Run Jest testsnpm run typecheck- Run TypeScript type checkingnpm run watch:test- Run tests in watch modenpm run gql:codegen- Regenerate GraphQL types after schema or documents change (requiresGQL_API_URL)
This project uses Jest for testing. Run the test suite with:
npm testFor watch mode during development:
npm run watch:testThis project includes Firebase Cloud Functions located in the functions/ directory. To work with Cloud Functions:
-
Navigate to the functions directory:
cd functions -
Install function dependencies:
npm install
-
Build the functions:
npm run build
-
Run functions locally (requires Firebase CLI):
firebase emulators:start
We welcome contributions from the community! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and ensure they follow our coding standards
- Run tests:
npm test - Run linting:
npm run lint - Commit your changes:
git commit -m 'Add some amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow the existing code style and conventions
- Write clear, descriptive commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting
If you encounter any bugs or have feature requests:
- Check if the issue already exists in our Issues
- If not, create a new issue with:
- Clear description of the problem
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Device/platform information
- Screenshots if applicable
This project adheres to a code of conduct that we expect all contributors to follow. Please be respectful and professional in all interactions.
- Be welcoming and inclusive
- Respect differing viewpoints and experiences
- Give and gracefully accept constructive feedback
- Focus on what is best for the community
- Show empathy towards other community members
TrainLCD is built with:
- React Native with Expo - Cross-platform mobile development
- TypeScript - Type safety and better developer experience
- React Navigation - Navigation library
- Tanstack Query - Data fetching and caching
- Firebase - Backend services (Analytics, Auth, Firestore, Storage)
- Sentry - Error tracking and performance monitoring
- GraphQL with Code Generator - Typed queries and operations
- Join our Discord community for discussions and support
- Check out existing Issues and Discussions
For professional support or custom development, please contact the maintainers.
- Thanks to all contributors who have helped improve this project
- Special thanks to the Japanese railway companies for providing inspiration
- The open-source community for the excellent tools and libraries
- Bus-related data provided by Tokyo Metropolitan Bureau of Transportation (Toei), licensed under CC BY 4.0
- Station data provided by ι§ γγΌγΏ.jp
Thanks goes to these wonderful people (emoji key):
makotia π π π |
Kanta Demizu π£ π π |
SAIGUSA Tomotada π π£ |
yasuto masuda π |
Katabame Miaya π£ π π |
CodeRabbit π |
This project follows the all-contributors specification. Contributions of any kind welcome!
- StationAPI - Backend API for station data
This project is licensed under the MIT License - see the LICENSE file for details.

