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.
Open-source SDK · TigerTag protocol v2.2
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.
$ 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 dictEverything the README documents, in one package that works offline.
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.
ECDSA-P256, fully offline, with the public key from the bundled id_version.json. Install tigertag[verify] to add the cryptography package.
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.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.
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.
from_pages(uid, payload) takes what Android, iOS, Flutter and nfcpy return. The README has a complete example for an ACR122U reader with nfcpy.
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).

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.

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.
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.
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.
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.
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.
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).
pip install tigertag, then TigerTag.from_pages(uid, payload).
tigertag on PyPI