> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tell.rs/llms.txt
> Use this file to discover all available pages before exploring further.

# TCP Source

> High-performance binary ingestion for SDKs — the default and fastest way to send data to Tell.

SDKs connect over TCP and stream binary batches. This is the fastest ingestion path — 64M events/sec — and the default for all native SDKs (Go, Swift, Flutter, C++).

```toml theme={null}
[[sources.tcp]]
port = 50000
```

That's it. The defaults handle most deployments. SDKs authenticate with an [API key](/running-tell/api-keys) embedded in each batch.

## Forwarding mode

You can run multiple TCP sources. A common pattern is one port for direct SDK traffic and another for Tell-to-Tell forwarding between regions:

```toml theme={null}
[[sources.tcp]]
port = 50000

[[sources.tcp]]
port = 8081
forwarding_mode = true
```

With `forwarding_mode = true`, the source trusts the original client IP embedded in forwarded batches instead of using the forwarder's connection IP.

## Backpressure

If the pipeline can't keep up, batches are dropped rather than blocking. This keeps all connections responsive — no single slow [sink](/pipeline/sinks/overview) stalls ingestion.

## Advanced

Full config reference with defaults:

```toml theme={null}
[[sources.tcp]]
port = 50000
address = "::"              # Bind address (default: dual-stack IPv4+IPv6)
forwarding_mode = false      # Trust source_ip from upstream forwarders
no_delay = true              # Disable Nagle's algorithm for lower latency
keepalive = true             # TCP keepalive probes
flush_interval = "100ms"     # Flush partial batches after this interval
batch_size = 500             # Messages per batch before flush
max_connections = 10000      # Reject new connections above this limit
buffer_size = 1048576        # Read buffer per connection (1 MB)
socket_buffer_size = 262144  # OS socket buffer (256 KB)
connection_timeout = "0s"    # Idle timeout (0 = no timeout)
```
