Open-source SDK · TigerTag protocol v2.2

Read, verify and write TigerTag chips from Python.

The tigertag package turns the 144 bytes of a TigerTag chip into material, colours, temperatures and quantity, checks its ECDSA-P256 signature and builds new tags. The reference data ships inside the package, so it works offline right after pip install.

PyPI ↗GitHub ↗

$ pip install tigertag

from tigertag import TigerTag

tag = TigerTag.from_pages(uid, payload)  # from your NFC SDK
print(tag.pretty())  # human-readable summary
print(tag.verify())  # VALID / NOT SIGNED / INVALID
print(tag.to_dict())  # JSON-ready dict
Python 3.8 and later
3.8+Python 3.8 and later
Runtime dependencies for the core: standard library only
0Runtime dependencies for the core: standard library only
Bytes read per chip: pages 0x04 to 0x27, data and signature
144Bytes read per chip: pages 0x04 to 0x27, data and signature
TigerTag+ catalogue bundled in the package, with the reference tables, for offline use
~1 MBTigerTag+ catalogue bundled in the package, with the reference tables, for offline use

What the SDK does

Everything the README documents, in one package that works offline.

Offline first

The reference tables and the TigerTag+ catalogue (about 1 MB) ship inside the package. offline=True or TIGERTAG_OFFLINE=1 turns off every network call.

Signature verification

ECDSA-P256, fully offline, with the public key from the bundled id_version.json. Install tigertag[verify] to add the cryptography package.

Create, patch, erase

TigerTag.create() builds a tag from scratch, patch() returns a new tag with fields changed, erase() returns the 80 zero bytes that wipe a chip.

TigerTag+ catalogue

TigerTag.from_catalog() turns a TigerTag+ product ID into a complete tag ready to write, from the official catalogue. catalog_entry() gives its title, brand, SKU and photo.

Reference data updates

The first TigerTagDB of a process checks for new data at most once a day and never raises: on any failure the local data is used.

Any NFC SDK

from_pages(uid, payload) takes what Android, iOS, Flutter and nfcpy return. The README has a complete example for an ACR122U reader with nfcpy.

Signatures, checked without a server

A signed TigerTag carries an ECDSA-P256 signature that binds the chip UID to the product data. The SDK checks it with no server call. tag.verify() returns a SignatureResult: ok is True only for a valid signature, and status says why otherwise (no signature, cryptography not installed, no public key, no UID).

A TigerTag chip

What the SDK reads

from_pages() takes 144 bytes (pages 0x04 to 0x27, data and signature) or 80 bytes (data only). from_dump() also accepts a 180-byte full dump and takes the UID from it.

TigerTag

Command line and single file

The tigertag command parses a chip dump, prints it as text, JSON or raw fields, and updates the reference data. parse_tigertag.py is a complete standalone copy of the SDK for projects that cannot add a dependency: drop the file in and import TigerTag from it.

Questions

What is the TigerTag Python SDK?

A Python package, tigertag on PyPI, that reads, verifies, creates and patches TigerTag NFC chips for 3D-printing filament and resin. It is open source under the Apache License 2.0 and implements TigerTag protocol v2.2.

How do I install it?

Run pip install tigertag on Python 3.8 or later. Add tigertag[verify] for signature checks, tigertag[full] for every optional dependency, or tigertag[nfc] for PC/SC readers in the playground.

Does it need an internet connection?

No. The reference data ships inside the package, so reading and verifying work offline. Since version 1.3.0 the SDK checks for new reference data at most once a day; offline=True, TIGERTAG_OFFLINE=1 or auto_update=False turns that off.

Which chips does it read?

NTAG213, NTAG215 and NTAG216, and any ISO 14443-3 compatible chip. It reads TigerTag and TigerTag+ chips, and blank chips ready to program, the same way.

How does it check that a chip is genuine?

tag.verify() checks the chip's ECDSA-P256 signature, which binds the chip UID to the product data, with the public key bundled in the package and no server call. It needs the UID, so read the chip with from_pages(uid, payload).

Read your first TigerTag in Python

pip install tigertag, then TigerTag.from_pages(uid, payload).

tigertag on PyPI