A self-hosted TDS for organic & SEO traffic

Route organic traffic through campaigns, flows, and offers with geo · device · bot filtering. Open-source, single Docker image, your server, your data.

Demo login: admin / demo — resets every 4 hours.

Slim 4 · FrankenPHP · PostgreSQL 18 · AGPL-3.0

Statistics dashboard

What it is

slimTDS is an open-source (AGPL-3.0), self-hosted traffic distribution system — a modern rewrite of zTDS. Single-tenant: one operator or team, on your own infrastructure. Built for affiliate / arbitrage and SEO operators who own their traffic and their data.

What it does

Inside the admin

Campaign workspace
Campaign workspace
Flow diagram
Flow diagram
Session replays
Session replays
Click log
Click log

How a click is handled

  1. Resolve the visitor (cookie → fingerprint → pixel ID).
  2. Geo, device, and bot detection.
  3. Match the first flow whose filters pass.
  4. Pick a weighted offer.
  5. Deliver via the flow’s response schema.

Full pipeline in the docs →

Self-host it

PHP 8.4 on FrankenPHP (worker mode) + PostgreSQL 18, shipped as one Docker image with a built-in admin panel.

git clone https://github.com/izzipizzy/slimtds slimtds && cd slimtds
make env && make up && make migrate

Getting started →

What’s modern about it

Database PostgreSQL 18, monthly RANGE partitions + BRIN
Runtime FrankenPHP worker mode (in-memory), not PHP-FPM
Admin Modern Alpine + Tailwind UI, dense and fast
Postbacks Decoupled outbox with backoff retry
Identity FingerprintJS CE pixel + server fingerprint
Migration Familiar to Keitaro users — streams → flows, offers, S2S postbacks

FAQ

Is it really self-hosted?

Yes. It runs on your own server as a single Docker image. Nothing phones home.

Single-tenant?

Yes — one operator or team per install. No multi-tenant SaaS layer.

Who owns the data?

You do. All clicks, conversions, and events live in your own PostgreSQL.

License?

AGPL-3.0. Self-host freely; if you offer it as a hosted service to others, you must share your modifications.