Skip to content
Public release: Q4 2026

TagPiperThe lightweight, open‑source server‑side tagging alternative

TagPiper replicates Google sGTM's sandboxed template API, on a 4 MB image you host yourself, with a built-in debugger.

TagPiper

Why I built TagPiper

Four reasons, from learning how server-side tagging really works to owning every line of it.

🎓 To learn

Rebuilding the Google sGTM model from scratch is the best way to understand exactly how server-side tagging works.

💸 To cut running costs

Less CPU and memory per hit means fewer, smaller servers. TagPiper is a 4 MB image that idles at about 7 MiB.

🧱 To build features natively

Anything can go straight into the server, in Rust, without waiting for a vendor. Examples: send queues, retries and SSRF protection.

🔎 To be fully auditable

Every line that handles your visitors' data can be read, and every outgoing request can be seen and counted.

Lightweight by design

Measured on the published image, with Docker limited to one CPU and 256 MB.

4 MBcompressed image
7 MiBmemory at idle
285k/healthz requests per second
0.4 msp99 latency

Real-usage benchmarks are coming. The numbers above measure the HTTP layer only. Benchmarks with real GA4 traffic through clients and tags, and a side-by-side comparison with Google sGTM, will follow. See the benchmarks.

A UI to manage it all In development

A self-hosted web app, built with Nuxt 4, Tailwind and PostgreSQL. It keeps your configuration, so the servers that handle your traffic stay lightweight.

📦 Containers, clients and tags

Create containers, add clients and tags, and configure their fields. Import your Google sGTM templates.

🎯 Firing rules and variables

Decide which tags fire for which events, with reusable variables and lookups.

📈 Stats and monitoring

Follow hits and tag results over time, and watch every server's health: CPU, memory, queue and delivery.

🕒 Versions and debugging

Publish container versions, see what changed, and inspect any single hit from end to end.

How it works

If you've used Google sGTM, you already know the model. TagPiper runs the same model on a lightweight server you control.

A request comes in

A browser or app sends a hit, such as a GA4 /g/collect request, to your TagPiper endpoint on your own domain.

A client claims it

Each client template gets a turn with the request. The one that claims it builds the event data and calls runContainer.

Tags fire

Tags get each event and send it on. The browser gets its response right away, and the sends are delivered and retried in the background.

Up and running in a minute

Pull the image, start it with the playground on, and open it in your browser.

sh
docker run --rm -p 8080:8080 --cpus=1 --memory=256m \
  -e PORT=8080 -e PLAYGROUND=1 -e OUTGOING_DRY_RUN=1 \
  ghcr.io/tagpiperlabs/sst-server:latest

# then open http://localhost:8080/

Help us build the docs

This site is plain Markdown on GitHub. Every page has an “Edit this page” link.

TagPiper Labs on GitHub