Fast — and reproducible.
Identical workloads, one machine, faucet-stream vs Meltano (the common Singer runtime). The harness never fabricates a number — a tool that won't run is recorded as such. Run it yourself in one command.
The best case, in two pictures.
The gap shrinks as the work moves from parse-bound to sink-bound.
Quote the ~80× CSV figure as the upper bound, not the typical case. When the database write dominates, both tools hit the same wall and the gap narrows to ~10×.
| Scenario | Bottleneck | faucet (rows/s) | Meltano | Throughput gap | Peak RAM (faucet vs Meltano) | Memory gap |
|---|---|---|---|---|---|---|
| A — CSV → JSONL | parse / serialize (best case) | 700,574 | 8,698 | ~80× | 20.1 vs 818.8 MiB | ~40× |
| B — Postgres → JSONL | typed row decode | 191,124 | 7,931 | ~24× | 21.7 vs 621.0 MiB | ~29× |
| C — Postgres → Postgres | destination write (sink-bound) | 117,147 (copy) | 12,186 | ~10× | 33.8 vs 690.3 MiB | ~20× |
One independent confirmation beats a new connector.
The harness lives in benchmarks/. It generates a
seeded dataset (byte-identical for both tools), times with hyperfine
(1 warmup + 5 runs, median ± stddev), samples peak RSS, and enforces row-count
parity. Results land in benchmarks/results/.
- Scenario A needs no infra — just the CLI.
- B & C add Docker Postgres.
- Reported run: Apple M3 Pro, 12 cores, 18 GiB, macOS.
# build the release binary the harness uses
make bench-build
# Scenario A — 1,000,000 rows (no infra)
make bench
# Scenarios B & C — add Docker Postgres
make bench-postgres
# quick 100k smoke run
make bench-smoke
# → benchmarks/results/ — results.md, versions.txt, raw JSON Read before quoting. This measures single-machine batch throughput of specific
moves — not distributed throughput, connector breadth, or correctness. Sink- and
API-bound moves narrow the gap further. Found a case where faucet doesn't win?
Open an issue or PR with your benchmarks/results/.
Your first pipeline runs in five minutes.
Install the CLI, scaffold a config, and move real data — nothing external to stand up.
curl -LsSf https://github.com/faucet-hq/faucet-stream/releases/latest/download/faucet-cli-installer.sh | sh brew install faucet-hq/faucet-stream/faucet-cli