Read your remaining balance, recent trips, and other information from contactless public transit cards using your NFC-enabled device.
FareBot runs on:
- Android β built-in NFC (6.0+)
- iOS β built-in NFC (iPhone 7+)
- macOS (experimental) β PC/SC smart card readers or PN533 USB NFC readers
- Web (experimental) β PN533 USB NFC readers (Chrome/Edge/Opera)
- Android: Coming soon on Google Play
- iOS: Coming soon on the App Store
- Web: farebot-web.vercel.app
- Build from source: See Building
Note
Huge thanks to the Metrodroid project, a fork of FareBot that added support for many additional transit systems. All features as of v3.1.0 (04a603ba) have been backported.
- Karl Koscher (ORCA)
- Sean Cross (CEPAS/EZ-Link)
- Anonymous Contributor (Clipper)
- nfc-felica and IC SFCard Fan projects (Suica)
- Wilbert Duijvenvoorde (MIFARE Classic/OV-chipkaart)
- tbonang (NETS FlashPay)
- Marcelo Liberato (Bilhete Unico)
- Lauri Andler (HSL)
- Michael Farrell (Opal, Manly Fast Ferry, Go card, Myki, Octopus)
- Rob O'Regan (Manly Fast Ferry card image)
- b33f (EasyCard)
- Bondan Sumbodo (Kartu Multi Trip, COMMET)
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Beijing Municipal Card | Beijing, China | ISO 7816 | β | β | β | β |
| City Union | China | ISO 7816 | β | β | β | β |
| Edy | Japan | FeliCa | β | β | β | β |
| EZ-Link | Singapore | CEPAS | β | β | β | β |
| Kartu Multi Trip | Jakarta, Indonesia | FeliCa | β | β | β | β |
| KomuterLink | Malaysia | Classic π | β ΒΉ | β | β | β |
| NETS FlashPay | Singapore | CEPAS | β | β | β | β |
| Octopus | Hong Kong | FeliCa | β | β | β | β |
| One Card All Pass | South Korea | ISO 7816 | β | β | β | β |
| Shanghai Public Transportation Card | Shanghai, China | ISO 7816 | β | β | β | β |
| Shenzhen Tong | Shenzhen, China | ISO 7816 | β | β | β | β |
| Suica / ICOCA / PASMO | Japan | FeliCa | β | β | β | β |
| T-money | South Korea | ISO 7816 | β | β | β | β |
| T-Union | China | ISO 7816 | β | β | β | β |
| Touch 'n Go | Malaysia | Classic π | β ΒΉ | β | β | β |
| Wuhan Tong | Wuhan, China | ISO 7816 | β | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Adelaide Metrocard | Adelaide, SA | DESFire | β | β | β | β |
| BUSIT | Waikato, NZ | Classic π | β ΒΉ | β | β | β |
| Manly Fast Ferry | Sydney, NSW | Classic π | β ΒΉ | β | β | β |
| Metrocard | Christchurch, NZ | Classic π | β ΒΉ | β | β | β |
| Myki | Melbourne, VIC | DESFire | β | β | β | β |
| Opal | Sydney, NSW | DESFire | β | β | β | β |
| Otago GoCard | Otago, NZ | Classic π | β ΒΉ | β | β | β |
| SeqGo | Queensland | Classic π | β ΒΉ | β | β | β |
| SmartRide | Rotorua, NZ | Classic π | β ΒΉ | β | β | β |
| SmartRider | Perth, WA | Classic π | β ΒΉ | β | β | β |
| Snapper | Wellington, NZ | ISO 7816 | β | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Bonobus | Cadiz, Spain | Classic π | β ΒΉ | β | β | β |
| Carta Mobile | Pisa, Italy | ISO 7816 (Calypso) | β | β | β | β |
| Envibus | Sophia Antipolis, France | ISO 7816 (Calypso) | β | β | β | β |
| HSL | Helsinki, Finland | DESFire | β | β | β | β |
| KorriGo | Brittany, France | ISO 7816 (Calypso) | β | β | β | β |
| Leap | Dublin, Ireland | DESFire | β | β | β | β |
| Lisboa Viva | Lisbon, Portugal | ISO 7816 (Calypso) | β | β | β | β |
| Mobib | Brussels, Belgium | ISO 7816 (Calypso) | β | β | β | β |
| Navigo | Paris, France | ISO 7816 (Calypso) | β | β | β | β |
| OuRA | Grenoble, France | ISO 7816 (Calypso) | β | β | β | β |
| OV-chipkaart | Netherlands | Classic π / Ultralight | β | β Β³ | β | β |
| Oyster | London, UK | Classic π | β ΒΉ | β | β | β |
| Pass Pass | Hauts-de-France, France | ISO 7816 (Calypso) | β | β | β | β |
| Pastel | Toulouse, France | ISO 7816 (Calypso) | β | β | β | β |
| Rejsekort | Denmark | Classic π | β ΒΉ | β | β | β |
| RicaricaMi | Milan, Italy | Classic π | β ΒΉ | β | β | β |
| SLaccess | Stockholm, Sweden | Classic π | β ΒΉ | β | β | β |
| TaM | Montpellier, France | ISO 7816 (Calypso) | β | β | β | β |
| Tampere | Tampere, Finland | DESFire | β | β | β | β |
| Tartu Bus | Tartu, Estonia | Classic π | β ΒΉ | β | β | β |
| TransGironde | Gironde, France | ISO 7816 (Calypso) | β | β | β | β |
| VΓ€sttrafik | Gothenburg, Sweden | Classic π | β ΒΉ | β | β | β |
| Venezia Unica | Venice, Italy | ISO 7816 (Calypso) | β | β | β | β |
| Waltti | Finland | DESFire | β | β | β | β |
| Warsaw | Warsaw, Poland | Classic π | β ΒΉ | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Gautrain | Gauteng, South Africa | Classic π | β ΒΉ | β | β | β |
| Hafilat | Abu Dhabi, UAE | DESFire | β | β | β | β |
| Metro Q | Qatar | Classic π | β ΒΉ | β | β | β |
| RavKav | Israel | ISO 7816 (Calypso) | β | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Charlie Card | Boston, MA | Classic π | β ΒΉ | β | β | β |
| Clipper | San Francisco, CA | DESFire / Ultralight | β | β | β | β |
| Compass | Vancouver, Canada | Ultralight | β | β | β | β |
| LAX TAP | Los Angeles, CA | Classic π | β ΒΉ | β | β | β |
| MSP GoTo | Minneapolis, MN | Classic π | β ΒΉ | β | β | β |
| Opus | Montreal, Canada | ISO 7816 (Calypso) | β | β | β | β |
| ORCA | Seattle, WA | DESFire | β | β | β | β |
| Ventra | Chicago, IL | Ultralight | β | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Crimea Trolleybus Card | Crimea | Classic π | β ΒΉ | β | β | β |
| Ekarta | Yekaterinburg, Russia | Classic π | β ΒΉ | β | β | β |
| Electronic Barnaul | Barnaul, Russia | Classic π | β ΒΉ | β | β | β |
| Kazan | Kazan, Russia | Classic π | β ΒΉ | β | β | β |
| Kirov transport card | Kirov, Russia | Classic π | β ΒΉ | β | β | β |
| Krasnodar ETK | Krasnodar, Russia | Classic π | β ΒΉ | β | β | β |
| Kyiv Digital | Kyiv, Ukraine | Classic π | β ΒΉ | β | β | β |
| Kyiv Metro | Kyiv, Ukraine | Classic π | β ΒΉ | β | β | β |
| MetroMoney | Tbilisi, Georgia | Classic π | β ΒΉ | β | β | β |
| OMKA | Omsk, Russia | Classic π | β ΒΉ | β | β | β |
| Orenburg EKG | Orenburg, Russia | Classic π | β ΒΉ | β | β | β |
| Parus school card | Crimea | Classic π | β ΒΉ | β | β | β |
| Penza transport card | Penza, Russia | Classic π | β ΒΉ | β | β | β |
| Podorozhnik | St. Petersburg, Russia | Classic π | β ΒΉ | β | β | β |
| Samara ETK | Samara, Russia | Classic π | β ΒΉ | β | β | β |
| SitiCard | Nizhniy Novgorod, Russia | Classic π | β ΒΉ | β | β | β |
| SitiCard (Vladimir) | Vladimir, Russia | Classic π | β ΒΉ | β | β | β |
| Strizh | Izhevsk, Russia | Classic π | β ΒΉ | β | β | β |
| Troika | Moscow, Russia | Classic π / Ultralight | β | β Β³ | β | β |
| YarGor | Yaroslavl, Russia | Classic π | β ΒΉ | β | β | β |
| Yaroslavl ETK | Yaroslavl, Russia | Classic π | β ΒΉ | β | β | β |
| Yoshkar-Ola transport card | Yoshkar-Ola, Russia | Classic π | β ΒΉ | β | β | β |
| Zolotaya Korona | Russia | Classic π | β ΒΉ | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| Bilhete Γnico | SΓ£o Paulo, Brazil | Classic π | β ΒΉ | β | β | β |
| Bip! | Santiago, Chile | Classic π | β ΒΉ | β | β | β |
| Card | Location | Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|
| EasyCard | Taipei | Classic π / DESFire | β | β β΄ | β | β |
These cards can be detected and identified, but their data is locked or not stored on-card:
| Card | Location | Protocol | Reason | Android | iOS | macOS | Web |
|---|---|---|---|---|---|---|---|
| AT HOP | Auckland, NZ | DESFire | Locked | β | β | β | β |
| Holo | Oahu, HI | DESFire | Not stored on card | β | β | β | β |
| Istanbul Kart | Istanbul, Turkey | DESFire | Locked | β | β | β | β |
| Nextfare DESFire | Various | DESFire | Locked | β | β | β | β |
| Nol | Dubai, UAE | DESFire | Locked | β | β | β | β |
| Nortic | Scandinavia | DESFire | Locked | β | β | β | β |
| Presto | Ontario, Canada | DESFire | Locked | β | β | β | β |
| Strelka | Moscow Region, Russia | Classic π | Locked | β ΒΉ | β | β | β |
| Sun Card | Orlando, FL | Classic π | Locked | β ΒΉ | β | β | β |
| TPF | Fribourg, Switzerland | DESFire | Locked | β | β | β | β |
| TriMet Hop | Portland, OR | DESFire | Not stored on card | β | β | β | β |
| Protocol | Android | iOS | macOS | Web |
|---|---|---|---|---|
| CEPAS | β | β | β | β |
| FeliCa | β | β | β | β |
| ISO 7816 | β | β | β | β |
| MIFARE Classic | β ΒΉ | β | β | β |
| MIFARE DESFire | β | β | β | β |
| MIFARE Ultralight | β | β | β | β |
| NFC-V / Vicinity | β | β | β Β² | β |
ΒΉ Requires NXP NFC chip β most Samsung and some other Android devices use non-NXP controllers and cannot read MIFARE Classic. Β² PC/SC readers only. PN533-based USB readers do not support NFC-V. Β³ Ultralight variant only. β΄ DESFire variant only. π Requires encryption keys β see Cards Requiring Keys.
Some MIFARE Classic cards require encryption keys to read. You can obtain keys using a Flipper Zero, Proxmark3, or MFOC. These include:
- Bilhete Γnico
- Charlie Card
- EasyCard (older MIFARE Classic variant)
- OV-chipkaart
- Oyster
- And most other MIFARE Classic-based cards
FareBot supports connecting to a Flipper Zero to browse and import NFC card dumps and MIFARE Classic key dictionaries.
| Platform | USB | Bluetooth |
|---|---|---|
| Android | Yes | Yes |
| iOS | β | Yes |
| macOS | Yes | β |
| Web | Yes | Yes |
From the home screen menu, tap Flipper Zero to connect via USB serial or Bluetooth Low Energy, browse the /ext/nfc file system, select card dump files (.nfc), and import them into your card history. You can also import the Flipper user key dictionary (mf_classic_dict_user.nfc) into the app's global key store, which is used as a fallback when reading MIFARE Classic cards.
$ git clone https://github.com/codebutler/farebot.git
$ cd farebot
$ make # show all targets
| Command | Description |
|---|---|
make android |
Build Android debug APK |
make android-install |
Build and install on connected Android device (via adb) |
make ios |
Build iOS app for physical device |
make ios-sim |
Build iOS app for simulator |
make ios-install |
Build and install on connected iOS device (auto-detects device) |
make desktop |
Run macOS desktop app (experimental) |
make web |
Build web app (experimental, WebAssembly) |
make web-run |
Run web app dev server with hot reload |
make test |
Run all tests |
make clean |
Clean all build artifacts |
A development container is available for sandboxed development with Claude Code.
- Kotlin 2.3.0 (Multiplatform)
- Compose Multiplatform (shared UI)
- Koin (dependency injection)
- kotlinx.serialization (serialization)
- kotlinx-datetime (date/time)
- SQLDelight (database)
base/β Core utilities, MDST reader, ByteArray extensionscard/β Shared card abstractionscard/*/β Card protocol implementations (classic, desfire, felica, etc.)transit/β Shared transit abstractions (Trip, Station, TransitInfo, etc.)transit/*/β Transit system implementations (one per system)flipper/β Flipper Zero integration (RPC client, transport abstractions, parsers)app/β KMP app framework (UI, ViewModels, DI, platform code)app/android/β Android app shell (Activities, manifest, resources)app/ios/β iOS app shell (Swift entry point, assets, config)app/desktop/β macOS desktop app (experimental, PC/SC + PN533 + RC-S956 USB NFC)app/web/β Web app (experimental, WebAssembly via Kotlin/Wasm)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.