Starting today, TagoIO supports a new open-source protocol called TagoTiP (Transport IoT Protocol) for sending device data with less overhead, a native IoT type system, and more transport options. Alongside the protocol, we’re launching public UDP and TCP servers and dedicated MQTT and HTTP endpoints built specifically for TagoTiP.
What’s new
Two new transports. TagoIO now accepts device data over UDP and TCP through newly released endpoints. UDP gives you fire-and-forget delivery where every byte and millisecond counts. TCP gives you persistent connections with real-time command delivery, no polling required.
Dedicated TagoTiP endpoints for MQTT and HTTP. You could already send data to TagoIO over MQTT and HTTP. Now there are also specific endpoints for both transports that speak TagoTiP natively, giving you the same lighter format and built-in type system across all four options.
All infrastructure is live in US-East and EU-West.
See endpoints and setup guides for each transport →
The protocol: why TagoTiP?
TagoTiP is an application-layer protocol designed specifically for IoT data. A valid frame looks like this:
// METHOD|AUTH-HASH|SERIAL|DATA
PUSH|4deedd7bab8817ec|sensor-01|[temperature:=32.5#C;humidity:=65#%]
About 130 bytes. The equivalent HTTP/JSON request runs close to 487 bytes.
We built it around three problems we kept running into across real projects:
Size matters on constrained links. Every byte costs money on cellular, and every bit costs airtime on LoRa. TagoTiP achieves roughly 4x compression over JSON without sacrificing readability.
IoT data has structure that JSON ignores. Numbers (:=), strings (=), booleans (?=), locations (@=), units, timestamps, groups, and metadata are all first-class in the syntax. No more inventing conventions inside generic JSON objects.
Microcontrollers shouldn’t need a JSON parser. TagoTiP frames can be composed with sprintf and parsed linearly. No backtracking, no dynamic memory allocation.
| TagoTiP | HTTP + JSON | MQTT + JSON | Protobuf | |
|---|---|---|---|---|
| Typical payload | ~130 bytes | ~487 bytes | ~210 bytes | ~80 bytes |
| Human-readable | Yes | Partially | Partially | No |
| Schema required | No | No | No | Yes |
Build with sprintf |
Yes | Complex | Needs library | Needs codegen |
| IoT type system | Built-in | App-defined | App-defined | Schema-defined |
Read the full TagoTiP specification →
Encryption without TLS
For links where TLS isn’t practical (raw UDP, LoRa, NB-IoT), TagoTiP/S adds application-layer encryption with zero handshake, zero round trips, and only 29-37 bytes of overhead. Stateless, no certificates, built-in replay protection.
Available across all four transports.
Learn about TagoTiP/S encryption →
SDKs
All SDKs share a single Rust core (tagotip-codec, no_std), so parsing and frame building behave identically across platforms.
| Package | Language |
|---|---|
@tagoio/tagotip |
TypeScript / Node.js |
tagotip |
Go |
tagotip |
Python |
TagoTiP |
C / Arduino |
tagotip-codec |
Rust |
Open source
TagoTiP is published under the Apache License 2.0 with an express patent grant. You can build clients, servers, libraries, or gateways for any purpose, including commercial, without needing permission from TagoIO.
Questions, feedback, or ideas – drop them in this thread. We’d love to hear what you build with it.