TagoTiP

The Open IoT Protocol. Any Transport. Any Server.

TagoTiP is a lightweight, human-readable telemetry protocol for UDP, TCP, HTTP, and MQTT. The spec is open under Apache 2.0: run it on your own backend, or send to TagoIO today.

ESP32

Wi-Fi + BLE

STM32

LoRa + Cellular

Arduino

Ethernet

TCP UDP MQTT HTTP
TagoTiP Protocol

TagoIO

Cloud Platform

TagoDeploy

Dedicated Instance

Your Cloud

Any Provider

Local Server

On-Premise

PUSH|token|serial|temperature:=23.5#C GET|token|serial|humidity:=68#% ACK|200|OK|1 record saved PUSH|token|serial|temperature:=23.5#C GET|token|serial|humidity:=68#% ACK|200|OK|1 record saved

Why TagoTiP

Built for constrained devices and real networks

Everything you need to send telemetry data reliably. Less overhead and more clarity.

Smaller Payloads

Compact pipe-delimited framing uses a fraction of the bandwidth of HTTP/JSON. 112 bytes vs 487 bytes for the same data. Critical for LTE-M, NB-IoT, LoRa, and satellite links.

Human-Readable

Read, write, and debug frames directly in your terminal or serial monitor. No binary parsers, no external tools. If you can read a pipe-delimited string, you can debug TagoTiP.

Transport-Agnostic

The same frame format works over UDP, TCP, MQTT, and HTTP. Switch transports without changing your device firmware or data pipeline.

Type-Safe by Design

Explicit assignment operators define numbers, strings, booleans, and GPS coordinates inline. No ambiguous JSON casting. The type is declared at the source.

Comparison

Less bytes. More signal.

See how TagoTiP compares with a standard HTTP/JSON request for IoT sensor readings.

HTTP / JSON 487 bytes
POST /data HTTP/1.1
Host: api.tago.io
Content-Type: application/json
Authorization: ate2bd31...c0d0
[{
  "variable": "temperature",
  "value": 32.5,
  "unit": "C"
}, {
  "variable": "humidity",
  "value": 65,
  "unit": "%"
}]
↔ 4.3x smaller
TagoTiP 112 bytes
PUSH|4deedd7bab8817ec|sensor-01|
[temperature:=32.5#C;humidity:=65#%]

Transports

One protocol. Every network.

TagoTiP's frame format is transport-agnostic. Send over any protocol your hardware or network supports.

UDP

Fire-and-forget telemetry. Minimal overhead for battery-powered, constrained hardware.

See Feature

TCP

Ordered, guaranteed delivery for environments where data integrity is critical.

See Feature

MQTT

Publish TagoTiP frames as MQTT payloads through the broker you already run.

See Feature

HTTP

Zero infra changes. Switch the payload format, keep your existing REST stack.

See Feature

Syntax

No ambiguity. No external schema.

Easy to use. Type operators are part of the frame itself.

:=

Numbers & Units

Integer or decimal. Attach any unit with #.

# variable := value #unit

temperature:=32.5#C

pressure:=1013.25#hPa

battery:=3.7#V

=

Strings

Any text value. Status labels, version strings, named locations.

# variable = "text value"

status="running"

firmware="v2.3.1"

location_name="warehouse-A"

?=

Booleans

Exact lowercase true or false. No other values accepted.

# variable ?= true | false

door_open?=true

alarm_active?=false

connected?=true

@=

GPS Coordinates

lat, lng, or lat, lng, alt. Altitude always in meters.

# variable @= lat,lng[,alt]

location@=-35.28,149.12,600

# combined with number in one frame

[location@=-35.28,149.12;speed:=72#kmh]

→ All 4 types in a single frame
PUSH|4deedd7bab8817ec|sensor-01|[temperature:=32.5#C;status="online";alarm?=false;pos@=-35.28,149.12,600]

Frequently Asked Questions

What is TagoTiP?
TagoTiP is an open, lightweight, human-readable IoT telemetry protocol. TagoIO wrote it and publishes the specification under the Apache 2.0 license. It uses compact pipe-delimited frames that work over UDP, TCP, MQTT, and HTTP, so devices send data with less bandwidth than HTTP/JSON.
Which transports does TagoTiP support?
The same frame format works over UDP, TCP, MQTT, and HTTP. You can switch transports without changing your device firmware or data pipeline.
How much smaller is TagoTiP than HTTP/JSON?
For the same sensor reading, a TagoTiP frame is about 112 bytes versus 487 bytes for HTTP/JSON, roughly 4.3 times smaller. That matters on LTE-M, NB-IoT, LoRa, and satellite links.
Is TagoTiP free and open?
Yes. The specification is public at github.com/tago-io/tagotip under the Apache 2.0 license. Anyone can implement it, client or server, for any purpose, including commercial use, with no fee and no TagoIO account.
Do I need an SDK to use TagoTiP?
No. Because the frames are plain text, you can build and send them directly from your firmware or any client. The protocol is human-readable by design.
Do I need TagoIO to use TagoTiP?
No. The spec defines both sides of the exchange, the device and the server, so any backend can accept TagoTiP frames. Open-source libraries for Rust, Node.js, Python, Go, and C/Arduino parse and build frames (github.com/tago-io/tagotip-sdk). TagoIO is one server that speaks TagoTiP natively on all four transports, so you can start there without running your own.

Get Started

Start sending data in minutes

The TagoTiP spec is free and open under Apache 2.0. No SDK required: form the frame and send it to TagoIO or to any server that implements the spec.