pipeflow 0.0.1

A lightweight, configuration-driven data pipeline framework
Documentation
# pipeflow

A lightweight, configuration-driven data pipeline framework for Rust.

```
Source → Transform → Sink
```

## Features

- **Configuration-driven**: Define pipelines in YAML, no code required
- **Lightweight**: ~10MB binary, minimal resource footprint
- **Built-in DLQ**: Dead Letter Queue for error handling out of the box
- **Backpressure**: Bounded channels with configurable strategies (block/drop)
- **Disk Buffer**: JSONL-based persistence for reliable delivery
- **Fan-out**: One source/transform can feed multiple downstream nodes

## Quick Example

```yaml
# pipeline.yaml
name: "api-to-db"

sources:
  - id: api_poller
    type: http_client
    config:
      url: "https://api.example.com/data"
      interval_secs: 60

transforms:
  - id: field_mapper
    type: remap
    input: api_poller
    config:
      mappings:
        price: "$.data.price"
        symbol: "$.data.symbol"

sinks:
  - id: db_writer
    type: database
    input: field_mapper
    config:
      connection: "${DATABASE_URL}"
      table: metrics
```

## Architecture

### Sources

| Type | Description |
|------|-------------|
| `http_client` | HTTP polling with configurable interval |
| `http_server` | HTTP push/webhook receiver |
| `websocket` | WebSocket streaming |
| `database` | Database polling/CDC |
| `file` | File watching (tail mode) |
| `internal` | Receive events from internal sinks |

### Transforms

| Type | Description | I/O |
|------|-------------|-----|
| `remap` | Field mapping (JSONPath-like) | 1:1 |
| `filter` | Conditional filtering | 1:0/1 |
| `aggregate` | Window-based aggregation | n:m |

### Sinks

| Type | Description | Disk Buffer |
|------|-------------|-------------|
| `console` | Print to stdout | No |
| `file` | Write to file | No |
| `database` | Database insert | Yes |
| `redis` | Redis SET/PUBLISH | Yes |
| `http_api` | HTTP POST/PUT | Yes |
| `notify` | Email/Telegram/Webhook | Yes |
| `internal` | Send to internal source | No |
| `blackhole` | Discard | No |

## Dead Letter Queue (DLQ)

All errors are automatically captured and written to `dead_letters.jsonl`:

```yaml
dead_letter:
  enabled: true
  default_sink:
    type: file
    path: "./dead_letters.jsonl"
```

## Comparison with Vector

| Feature | Vector | pipeflow |
|---------|--------|----------|
| Sources/Sinks | 100+ | ~10 |
| Transform DSL | VRL (full language) | JSONPath (simple) |
| Built-in DLQ | No | **Yes** |
| Binary size | ~50MB | ~10MB |
| Learning curve | Steep | **Easy** |

**pipeflow is NOT a Vector replacement.** Use pipeflow for:
- Simple HTTP API data collection
- Lightweight alerting pipelines
- Resource-constrained environments

## License

MIT OR Apache-2.0