Events in.
Nothing lost.

The relay with storage between. Events from any source land in durable storage, get forwarded to every destination, and stay replayable. Backfill new services, absorb traffic spikes, and never lose data when things break.

Conduit Intelligence — AI-powered, no external APIs

Watch it work

A JSON payload hits the endpoint. Schema detected. Stored durably. Three destinations get exactly what they need: transformed, filtered, or passed through.

POST /v1/00000000/iot_sensors
↓ Incoming event
{
  "device_id": "sensor-047",
  "temperature": 22.7,
  "humidity": 61.3,
  "battery": 0.84,
  "floor": "2nd",
  "ts": "2026-03-01T07:42:00Z"
}
◇ Schema detected
device_id String LowCard
temperature Float32 Gorilla
humidity Float32 Gorilla
battery Float32 Gorilla
floor String LowCard
ts DateTime64 DoubleDelta
→ Forwarded
HTTPS analytics-api.internal
{ device_id, temperature, humidity, ts }
schema: pinned v1 — 4 fields only
MQTT floor/2nd/readings
{ temp: 22.7, hum: 61.3, bat: 0.84 }
schema: mapped — field names renamed
WebSocket dashboard live feed
{ device_id, temperature, humidity, battery, floor, ts }
schema: pass-through — all fields
Waiting...

Any protocol in. Any protocol out.

Many-to-one ingestion. One-to-many forwarding. Conduit translates between protocols so your services don't have to.

Sources
HTTPREST APIs · Webhooks
MQTTIoT devices · Sensors
WSReal-time streams
conduit
Schema · Store · Route
Destinations
HTTPWebhooks · APIs
MQTTBrokers · Devices
WSDashboards · UIs
MQTT sensor → HTTP webhook. WebSocket stream → MQTT broker.
One unified endpoint. Zero protocol translation code.

Built for agents, not just dashboards

Connect any MCP-compatible agent. It can create streams, query data, and manage pipelines. No dashboard needed.

npx -y @useconduit/mcp npm ↗ github ↗
MCP Agent
# AI agent connected via MCP ▸ conduit_list_events(stream: "sensors", limit: 1000) 1,000 events · 18.4 MB raw1.1 MB stored (94% compressed) DoubleDelta on timestamps · Gorilla on floats · LowCardinality on strings ▸ conduit_add_forward(stream: "sensors", type: "http", url: "https://analytics.acme.io/ingest") Destination added · backfill available for 1,000 historical events ▸ conduit_stream_stats(stream: "sensors") p50: 8ms · p99: 1.4ms · 12,847 events/day · 30d retention 🤖 I see live sensor data flowing in. I'll pipe it to our datawarehouse and add hot storage. ▸ conduit_add_forward(stream: "sensors", type: "http", url: "https://dwh.acme.io/ingest") Destination added · forwarding to datawarehouse ▸ conduit_add_forward(stream: "sensors", type: "mqtt", broker: "mqtt://redis.acme.io", topic: "hot/sensors") Destination added · forwarding to hot storage · 3 destinations active ▸ conduit_backfill(stream: "sensors", destination: "dwh.acme.io", range: "7d") Backfilling 89,929 events from last 7 days · ETA 12s

Built for the moments that matter

Conduit sits between the services that generate events and the ones that consume them. Here's what that means in practice.

🔁
You add a new service 8 months in

It needs historical data to be useful. Without Conduit: beg every upstream source to replay, or accept a permanent gap. With Conduit: replay any time window to the new destination. Minutes, not weeks.

📦
You switch analytics providers

New provider needs historical data. Replay any time window directly. No coordination with upstream teams, no re-ingestion from source, no gap in your data.

1,000 IoT sensors spike simultaneously

Your analytics pipeline can't keep up. Conduit absorbs the burst, stores every reading, and delivers in order when your service is ready. Nothing dropped, no backpressure to the sensors.

🔀
One event source, four consumers

CI, Slack, analytics, and your deploy system all need the same GitHub push event, each with a different payload shape. Each destination gets its own schema, transform, and delivery guarantee. No fan-out code to write.

Your schema evolves. So does Conduit.

Not rigid pipelines. Adaptive streams. Ingestion and forwarding schemas are decoupled by design.

↓ Ingestion
Store everything

New fields appear? Columns added automatically. Types change? Overflow to JSON, promote when stable. No migrations, no downtime.

Auto-detect fields on first event
Add columns without downtime
Type-safe overflow for mismatches
Auto-promote after threshold
■ Storage
Persist and replay

Every event is stored in a columnar engine built for time-series at scale. Query, backfill, or replay. Your data is always there.

Columnar storage with smart compression
Backfill to new destinations
Time-range queries via API
Configurable retention per plan
→ Forwarding
Send what they need

Each destination controls its own schema. Pass raw events through, pin to a schema version, or map fields per destination.

Pass-through: forward as-is
Pinned: lock to a schema version
Mapped: custom field transforms
Transform payloads with JavaScript before forwarding
Never break a downstream consumer
"We've spent decades building data systems that optimize for predictability. But the consumers are changing. Agents handle ambiguity, models interpret structure. The infrastructure should reflect that."
Free during beta

Free while we build

Conduit is in beta. Sign up and use it: 100K events/month, 5 streams, 100 MB storage, all features included. No credit card.

Start for free →
🇪🇺
European infrastructure
Data never leaves the EU. GDPR-compliant by design.
12,000+ req/s
Sub-2ms p99 latency. Buffered writes, batch ingestion.
🔌
Any protocol
HTTP, WebSocket, MQTT/S. Kafka & gRPC coming soon.
🤖
AI-native MCP server
Let any MCP-compatible agent manage pipelines and query data directly.