Pico Transit is a friendly little companion for getting around on public transit. Real schedules, real-time arrivals, live connections at any stop, and a live map that shows exactly where your ride actually is — no ads, no clutter, no infinite scroll. Just "where's my bus," answered nicely. 🚏✨
Right now Pico Transit knows its way around MBTA and RIPTA, with more agencies hopefully hopping aboard down the road. It's built on the Light SDK for the Light Phone III, so it stays just as calm and un-distracting as the rest of your Light experience.
- 🏠 Pick your agency — MBTA or RIPTA — and Pico Transit downloads their schedule right onto your phone.
- ⚙️ Settings — set a default agency once and Pico Transit skips the picker on every future launch, only re-downloading the schedule when the agency's feed has actually changed.
- 📅 Explore Schedules — browse by Subway 🚇, Commuter Rail 🚆, or Bus 🚌, pick a route, a direction, and a stop, and see every departure today.
- 🔗 Connections — tap any stop along a trip to see what else comes through there next. Great for planning a transfer on the fly.
- 📍 Leave Now — type where you are (or let Pico Transit take a quick IP-based guess 🛰️) and get the 20 closest stops, nearest first.
- ⏱️ Live ETAs — real-time predictions with On Time / Late / Early badges, whenever the agency's live feed is playing along nicely.
- 🗺️ Map — your stop, pinned on a live map, with nearby stops you can tap to reveal their names. Live vehicles show up right where they actually are, with an emoji for their mode (🚇 subway/light rail, 🚆 commuter rail, 🚌 bus) — flip on "Nearby Vehicles" to also see what's inbound to those other stops, not just yours.
Pico Transit lives inside the light-sdk monorepo — check the root README first for one-time setup (GitHub token, Android Studio, etc). Once that's done:
- Open the whole
light-sdkproject in Android Studio. - Run the
:toolmodule on an emulator, or better yet, the LightOS emulator — that's this app! 🎉 - Tap an agency, grab a coffee ☕ while it downloads the schedule, and you're off.
Light's official "build it, sign it, share it" pipeline for community tools isn't quite ready yet — vetting is expected around August/September 2026, with the full sharing platform following in October. So for now, sideloading via ADB is the way, and Light's own docs say that's totally fine for the adventurous! 🤠
- In
lighttool.toml, pointserverPackageat the real LightOS package instead of the emulator:serverPackage = "com.lightos"
- Build a debug APK:
./gradlew :tool:assembleDebug
- Turn on Developer Options + USB debugging on your Light Phone III (same as any Android device), plug it in, then:
adb install -r tool/build/outputs/apk/debug/tool-debug.apk
- On the phone, allow "Any tools" in LightOS's tool settings — it'll warn you this one isn't Light-vetted yet, which is expected for a homemade build like this. 🚧
That's it — happy transit-ing! 🚏🚌🚆
- RIPTA's live feeds are HTTP-only (no HTTPS), which Android blocks by default. There's a small, clearly-labeled
:netconfigmodule that grants just that one narrow exception — see its ownbuild.gradle.ktsfor exactly what it does and how to remove it if you'd rather stay HTTPS-only everywhere. - No device GPS is used anywhere — the SDK doesn't expose it to tools yet. Nearby-stop and location search are powered by Nominatim (OpenStreetMap) and IP-based geolocation instead. Be kind to their free APIs! 🙏
- Stations are deduplicated using GTFS's
parent_station— a big station with several platforms (subway entrances, commuter rail tracks, etc.) shows up as one marker/entry, not one per platform, while still resolving to the right platform'sstop_idunder the hood for schedule lookups.
The tool/ directory (Pico Transit itself) is licensed separately from the rest of the monorepo — see LICENSE-TRANSIT (MIT, © Christian Ferreira / CJFData). The rest of light-sdk remains under its own LICENSE (MIT, © The Light Phone).