Lee, verifica y escribe chips NFC TigerTag desde JavaScript.
El SDK del protocolo abierto TigerTag para filamento y resina de impresión 3D: convierte los bytes de un chip en material, color, ajustes de impresión y cantidad, comprueba su firma ECDSA-P256 sin conexión y construye nuevas etiquetas byte a byte.
Cada cambio devuelve un nuevo TigerTag; toBytes() da los bytes que hay que escribir. erase() da un chip en blanco.
// Immutable surgical update — returns a new TigerTag, original unchanged
const patched = tag.patch({ nozzleTempMin: 200, dryTemp: 55 });
// Erase a chip — write the returned 80 bytes to the NFC chip
const blankBytes = TigerTag.erase();
Un solo paquete para todo lo relacionado con un chip TigerTag: leer, comprobar, escribir y mantener sus datos al día.
Leer cualquier volcado
fromPages(), fromDump() y fromFile() aceptan un UID con 80 o 144 bytes, o un volcado completo de 180 bytes. pretty(), describe(), toDict() y toRawDict() devuelven texto, un párrafo en lenguaje natural u objetos listos para JSON.
Verificar la autenticidad sin conexión
verify() comprueba la firma ECDSA-P256 que vincula el UID del chip con sus datos de producto, con la clave pública incluida en el paquete. El resultado es valid, invalid, unsigned, no_key o no_uid.
Crear y modificar etiquetas
create(), asInit(), patch() y erase() construyen los bytes del chip. Un TigerTag es inmutable: patch() devuelve uno nuevo y no permite cambiar idTigertag, idProduct, uid ni la firma.
Construir desde el catálogo
TigerTag.fromCatalog(productId) construye un TigerTag+ completo a partir del catálogo oficial de productos, descargado en el primer uso y guardado en una carpeta de caché por usuario.
Sincronizar con el fabricante
Para los chips TigerTag+, rawApi(), diffApi() y patchFromApi() obtienen los datos actuales de la marca, muestran lo que difiere del chip y lo aplican.
Datos de referencia, primero sin conexión
Las tablas de material, marca, aspecto, tipo, diámetro y unidad vienen en el paquete. Una comprobación en segundo plano las actualiza como mucho una vez al día; offline: true o TIGERTAG_OFFLINE=1 significa cero llamadas de red.
Tres tipos de etiqueta
El SDK lee y escribe los tres tipos de etiqueta del protocolo TigerTag v2.2, en chips NTAG213, NTAG215 y NTAG216.
idProduct 0xFFFFFFFF
TigerTag (Maker)
Todos los campos en el chip, legibles completamente sin conexión.
idProduct 0x00000000
TigerTag Init
Una plantilla en blanco, lista para programar. TigerTag.asInit() crea una.
ECDSA-P256
TigerTag+
Todos los campos en el chip, más un ID de producto vinculado a la API en la nube para las actualizaciones del fabricante. Un chip firmado se comprueba con verify().
Desde la línea de comandos y dentro de Electron
El paquete instala un comando tigertag y funciona en el proceso principal de una aplicación Electron.
El comando tigertag
Interpreta un volcado como texto, JSON o campos en bruto, y actualiza las tablas de referencia cuando quieras.
# Parse a dump file
tigertag dump.bin
# JSON output
tigertag dump.bin --json
# Update the reference tables now (into the data dir)
tigertag update
Dentro de una aplicación Electron
Interpreta los chips en el proceso principal, sin subprocesos que distribuir.
// main.js — replace parseTigerTag() subprocess dependency
const { TigerTag, TigerTagDB } = require('tigertag');
function parseTigerTag(payload, uid) {
const tag = TigerTag.fromPages(Buffer.from(uid), Buffer.from(payload));
const db = new TigerTagDB();
return {
dict: tag.toDict(db),
raw: tag.toRawDict(),
sig: tag.verify(db).toDict(),
};
}
Pruébalo sin lector: el playground
Una página web local, servida por el propio SDK, que construye y decodifica chips TigerTag y muestra cada byte. No hace falta hardware NFC.
Entrada y salida del SDK lado a lado: la llamada create(), luego pretty(), describe(), verify() y toDict().
Con uno o varios lectores PC/SC como el ACR122U, los chips se leen en cuanto se colocan, y Burn escribe el contenido actual.
El playground nunca escribe una firma: solo un fabricante certificado puede emitirla.
npm run playground
# then open http://localhost:7432/tools/playground.html# Enable live reader support (one-time install)
npm install ws nfc-pcsc
Parte del ecosistema TigerTag
El SDK implementa la especificación abierta TigerTag, junto a las demás herramientas oficiales.
Especificación del protocolo TigerTag
La especificación abierta que implementa el SDK: estructura de memoria, tipos de etiqueta, esquema de firma y base de datos de referencia.
Ejecuta npm install tigertag, o pnpm add tigertag, yarn add tigertag o bun add tigertag. Necesita Node.js 18 o posterior y ningún otro paquete para leer y verificar.
¿Necesita conexión a internet?
No. Las tablas de referencia y la clave pública de firma vienen en el paquete, así que leer y verificar funcionan sin conexión. La red solo se usa para la comprobación diaria de tablas, el catálogo de productos y los métodos en la nube de TigerTag+; offline: true o TIGERTAG_OFFLINE=1 la desactiva.
¿Con qué chips y lectores NFC funciona?
TigerTag usa chips NTAG213, NTAG215 y NTAG216 (ISO 14443-3). El SDK recibe el UID y los bytes que lee tu biblioteca NFC, así que no depende de un lector concreto; el README muestra nfc-pcsc con un ACR122U.
¿Cómo comprueba que un chip es auténtico?
verify() comprueba la firma ECDSA-P256 del chip sobre su UID y sus identificadores de producto, con la clave pública incluida en el paquete. Devuelve valid, invalid, unsigned (una etiqueta Maker), no_key o no_uid, sin llamar a ningún servidor.
¿Puede escribir chips?
Construye los bytes: create(), patch(), asInit(), erase() y fromCatalog() dan un TigerTag cuyo toBytes() es el contenido que escribe tu biblioteca NFC. El botón Burn del playground lo escribe en los chips de los lectores conectados.
¿Hay una versión para Python?
Sí: TigerTag-SDK-Python es la versión en Python de la misma API, y ambos SDK sirven la misma página de playground.
¿Bajo qué licencia está el SDK?
Apache-2.0, que incluye una concesión expresa de patentes. Implementar el propio protocolo TigerTag no requiere ninguna licencia.
Un comando para empezar
npm install tigertag y después TigerTag.fromPages(uid, payload).