FareBot: Lector NFC de transporte público de código abierto para Android, iOS y web.
FareBot es una aplicación libre de multiplataforma Kotlin que te permite leer tarjetas inteligentes de sistemas de transporte público en todo el mundo utilizando tu teléfono con NFC, lector de tarjetas macOS o navegador web. Con soporte para docenas de tarjetas —desde Suica, Octopus y MTR hasta T‑Union y BTP— y una base de código totalmente documentada, FareBot es ideal para desarrolladores que desean aprender las prácticas modernas de Kotlin o colaboradores que busquen añadir nuevos sistemas. El proyecto incluye un Makefile sencillo, un contenedor de desarrollo para Claude Code e incluso soporte experimental de WebAssembly, convirtiéndolo en una vitrina única de cómo el código abierto puede impulsar soluciones NFC del mundo real.
¿Qué es FareBot?\n\nFareBot (github.com/codebutler/farebot) es una aplicación de código abierto multiplataforma Kotlin que te permite leer e inspeccionar datos almacenados en tarjetas inteligentes sin contacto de transporte público. Está escrita en puro Kotlin con Compose Multiplatform y funciona en\n\n* Android – API NFC nativa\n* iOS – CoreNFC\n* macOS – lectores PC/SC o PN533 USB (experimental)\n* Web – WebAssembly + WebUSB (experimental)\n\nLa aplicación admite una amplia gama de estándares de tarjetas (ISO 7816, CEPAS, FeliCa, DESFire, MIFARE Classic, MIFARE Ultralight, NFC‑V) y lee tarjetas de más de 80 sistemas de transporte en Asia, Europa, Norteamérica y más allá.\n\n## Por qué importa para los desarrolladores\n\n* Herramientas modernas – Utiliza Gradle KTS, Kotlin 2.3.0, Compose, DI con Koin, Kotlin x serialization, y más.\n* Documentación completa – El repositorio contiene un README vivo, comentarios de código y un contenedor de desarrollo impulsado por Claude Code para experimentación aislada.\n* Favorable a contribuciones – Todo el código es libre de licencias MIT/GPL, y el proceso de pull request es sencillo.\n\n## Características clave\n\n| Función | Descripción |\n|---------|-------------|\n| Descubrimiento de tarjetas | Escanea etiquetas NFC y lista tipos de tarjetas disponibles. |\n| Extracción completa de tarjetas | Lee todos los archivos EF y presenta datos en bruto, marcas de tiempo y saldo. |\n| UI multiplataforma | UI Compose compartida entre móvil, macOS y web. |\n| Registro de sistemas extensible | Añade nuevos sistemas de transporte en un solo archivo "registry". |\n| Demo WebAssembly | Construcción web experimental que lee tarjetas mediante lector PN533 USB en Chrome/Edge. |\n| Contenedor de desarrollo | Entorno basado en Docker pre-cargado con Java 21, Gradle y Claude Code. |\n\n## Tarjetas compatibles (ejemplos destacados)\n\n* Japón – Suica, Pasmo, Octopus, Edy\n* Singapur – EZ‑Link, NETS FlashPay, Octopus\n* Alemania – VDV‑Bus, VVS\n* Reino Unido – Oyster, tarjetas TfL (soporte limitado a MIFARE)\n* EEUU – Clipper, Ventra, ORCA (DESFire)\n\nLa lista completa está documentada en el README; el repositorio incluso gestiona peculiaridades específicas de la tarjeta, como las claves de cifrado de MIFARE Classic.\n\n## Inicio rápido\n\n1. Clonar el repositorio\n bash\n git clone https://github.com/codebutler/farebot.git\n cd farebot\n \n2. Construir y ejecutar (Android)\n bash\n make android-install # instala en un dispositivo conectado vía ADB\n \n3. Construir y ejecutar (iOS)\n bash\n make ios-install # instala en un iPhone físico\n \n4. Construir y servir la web\n bash\n make web-run\n \n5. Ejecutar pruebas\n bash\n make test\n \n\n> Tip: El dev‑container (.devcontainer/) te brinda un editor aislado donde puedes ejecutar Claude Code o experimentar con el repositorio sin riesgo.\n\n## Flujo de contribución\n\n1. Haz un fork del repositorio.\n2. Crea una rama de característica.\n3. Añade/modifica código; ejecuta make test.\n4. Envía una solicitud de pull request.\n\nTodos los colaboradores son reconocidos en la sección Contribuidores. El repositorio tiene más de 30 colaboradores y más de 1 k estrellas, demostrando una comunidad vibrante.\n\n## Licencia y comunidad\n\nFareBot se publica bajo la licencia GPL‑3.0 – libre de usar, modificar y redistribuir, siempre que las obras derivadas permanezcan bajo la misma licencia. El proyecto invita a contribuciones vía pull requests de GitHub, issues o añadiendo nuevos adaptadores de sistemas de transporte.\n---\n\nConclusión: Si estás construyendo una aplicación de transporte habilitada NFC, o simplemente quieres aprender cómo está estructurado un código base Kotlin Multiplatform de grado de producción, FareBot es una lectura obligatoria. Su combinación de soporte para tarjetas reales, capacidades web experimentales y un repositorio totalmente documentado lo convierte en un referente de código abierto ejemplar.