On this page
TagoTiP - Transport IoT Protocol
Send IoT data to TagoIO in 130 bytes instead of 487. No JSON, no HTTP headers - just a single human-readable line your microcontroller can build with sprintf.
PUSH|4deedd7bab8817ec|sensor-01|[temperature:=32.5#C;humidity:=65#%]
Why TagoTiP?
HTTP/JSON TagoTiP TagoTiP(s) (encrypted)Payload size ~487 bytes ~130 bytes ~119 bytesvs. HTTP/JSON - 3.7x smaller 4.1x smallerTLS required? Yes Recommended No - AEAD encryption built-inParse complexity JSON parser Linear scan, no backtracking Envelope + linear scan
Built for constrained devices
Human-readable - debug frames in a terminal, compose them by hand
Type-safe - explicit operators for numbers (:=), strings (=), booleans (?=), and locations (@=)
C-friendly - predictable buffer sizes, no dynamic allocation, linear parsing
Compact - variable, value, unit, timestamp, group, location, and metadata in a single frame
Transport-agnostic - works over UDP, TCP, HTTP(S), MQTT, or any byte-capable channel
Encryption without TLS
Need security on raw UDP or constrained links where TLS is too expensive? TagoTiP(s) wraps frames in an AEAD authenticated encryption envelope - as little as 29 bytes of overhead, with built-in replay protection and integrity verification.
Cipher Suite Key Tag Envelope OverheadAES-128-CCM 128-bit 8 B 29 bytesAES-128-GCM 128-bit 16 B 37 bytesAES-256-CCM 256-bit 8 B 29 bytesAES-256-GCM 256-bit 16 B 37 bytesChaCha20-Poly1305 256-bit 16 B 37 bytes
Learn more in the Encryption guide.
How it compares
TagoTiP HTTP + JSON MQTT + JSON ProtobufTypical payload ~130 bytes ~487 bytes ~210 bytes ~80 bytesHuman-readable Yes Partially Partially NoSchema required No No No YesDebug in a terminal Yes Verbose Binary framing NoBuild with sprintf Yes Complex Needs MQTT library Needs code generatorIoT type system Built-in (number, string, bool, location) Application-defined Application-defined Schema-definedMetadata, unit, group, timestamp Native syntax Application-defined Application-defined Schema-defined
TagoTiP(s) vs. other IoT security
TagoTiP(s) TLS 1.3 DTLS 1.2Handshake None - 0 bytes ~2-4 KB ~2-5 KBRound trips before first data 0 1-2 2-3Per-message overhead 29-37 bytes ~29 bytes + TCP ~29 bytesSession state Stateless Per-connection Per-connectionCertificate management None Required Required or PSKWorks over raw UDP Yes No UDP onlyWorks without TCP Yes No UDP only
Quick example
Push a temperature reading with unit, timestamp, and metadata - all in one frame:
PUSH|4deedd7bab8817ec|sensor-01|@=39.74,-104.99@1694567890000^batch_42{firmware=2.1}[temperature:=32.5#C]
Pull the last value back:
PULL|4deedd7bab8817ec|sensor-01|[temperature]
<- ACK|OK|[temperature:=32.5#C@1694567890000]
Tutorials
Follow our tutorials to start building your IoT project using UDP, TCP, HTTP, or MQTT:
:::tip Get started with TagoTiP
SDKs
All language SDKs share a single Rust core (tagotip-codec, no_std), so parsing and frame building behave identically everywhere.
Package Language Install@tagoio/tagotipTypeScript / Node.js npm install @tagoio/tagotiptagotipGo go get github.com/tago-io/tagotip-sdk/tagotip-gotagotipPython pip install tagotipTagoTiPC / Arduino Arduino Library Managertagotip-codecRust cargo add tagotip-codec
Browse the full SDK source at github.com/tago-io/tagotip-sdk .
Open source
TagoTiP is open source under the Apache License 2.0 . Implement clients, servers, libraries, or gateways - for any purpose, including commercial use.
Send feedback