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/>.