Skip to main content

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/JSONTagoTiPTagoTiP(s) (encrypted)Payload size~487 bytes~130 bytes~119 bytesvs. HTTP/JSON-3.7x smaller4.1x smallerTLS required?YesRecommendedNo - AEAD encryption built-inParse complexityJSON parserLinear scan, no backtrackingEnvelope + linear scan

Built for constrained devices

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 SuiteKeyTagEnvelope OverheadAES-128-CCM128-bit8 B29 bytesAES-128-GCM128-bit16 B37 bytesAES-256-CCM256-bit8 B29 bytesAES-256-GCM256-bit16 B37 bytesChaCha20-Poly1305256-bit16 B37 bytes

Learn more in the Encryption guide.

How it compares

TagoTiP vs. other IoT data formats

TagoTiPHTTP + JSONMQTT + JSONProtobufTypical payload~130 bytes~487 bytes~210 bytes~80 bytesHuman-readableYesPartiallyPartiallyNoSchema requiredNoNoNoYesDebug in a terminalYesVerboseBinary framingNoBuild with sprintfYesComplexNeeds MQTT libraryNeeds code generatorIoT type systemBuilt-in (number, string, bool, location)Application-definedApplication-definedSchema-definedMetadata, unit, group, timestampNative syntaxApplication-definedApplication-definedSchema-defined

TagoTiP(s) vs. other IoT security

TagoTiP(s)TLS 1.3DTLS 1.2HandshakeNone - 0 bytes~2-4 KB~2-5 KBRound trips before first data01-22-3Per-message overhead29-37 bytes~29 bytes + TCP~29 bytesSession stateStatelessPer-connectionPer-connectionCertificate managementNoneRequiredRequired or PSKWorks over raw UDPYesNoUDP onlyWorks without TCPYesNoUDP 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.

PackageLanguageInstall@tagoio/tagotipTypeScript / Node.jsnpm install @tagoio/tagotiptagotipGogo get github.com/tago-io/tagotip-sdk/tagotip-gotagotipPythonpip install tagotipTagoTiPC / ArduinoArduino Library Managertagotip-codecRustcargo 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.