Introduction
ingestr is a command line tool for copying data from one system to another in a single command. It is simple to pick up and useful for one-off moves. Orchestration, scheduling, and monitoring are left to whatever you run around it. Filament is an open-source replication engine with a CLI for one-off transfers and a service for everything else, with scheduling, checkpoints, and verified writes built in.
HIGHLIGHTS
5.3× faster
ROWS PER SECOND
Filament
2,597,498 ROWS
ingestr
488,233 ROWS
NYC Taxi, Postgres -> Postgres
5.3× faster
ROWS PER SECOND
Filament
2,597,498 ROWS
ingestr
488,233 ROWS
NYC Taxi, Postgres -> Postgres
4.6X FASTER
WALL TIME
Filament
3.79 SEC
ingestr
17.49 SEC
TPC-H, Postgres -> Postgres
4.6X FASTER
WALL TIME
Filament
3.79 SEC
ingestr
17.49 SEC
TPC-H, Postgres -> Postgres
1.6X LESS
PEAK MEMORY
Filament
2.97 GIB
ingestr
4.83 GIB
NYC Taxi, Postgres -> Postgres
1.6X LESS
PEAK MEMORY
Filament
2.97 GIB
ingestr
4.83 GIB
NYC Taxi, Postgres -> Postgres
2.4X MORE
CPU SECONDS
Filament
377.4 SEC
ingestr
157.4 SEC
NYC Taxi, Postgres -> Postgres
2.4X MORE
CPU SECONDS
Filament
377.4 SEC
ingestr
157.4 SEC
NYC Taxi, Postgres -> Postgres

License and control
License
Apache 2.0, open source.
Functional Source License 1.1, source-available. Competing use prohibited. Each version becomes Apache 2.0 two years after release. MIT until June 2026.
License
Apache 2.0, open source.
Functional Source License 1.1, source-available. Competing use prohibited. Each version becomes Apache 2.0 two years after release. MIT until June 2026.
Self-hosted in full
Yes. One repository, no paid tier, nothing gated.
Yes for the CLI. Orchestration comes from the open-source Bruin CLI or your own scheduler. Lineage, audit logs, and cost insights are Bruin Cloud.
Self-hosted in full
Yes. One repository, no paid tier, nothing gated.
Yes for the CLI. Orchestration comes from the open-source Bruin CLI or your own scheduler. Lineage, audit logs, and cost insights are Bruin Cloud.
Adding a new source
A YAML manifest for REST APIs, loaded at runtime with no rebuild. A Go driver for databases and other driver-based sources.
Go, contributed to the repository and compiled in. No plugin or manifest mechanism.
Adding a new source
A YAML manifest for REST APIs, loaded at runtime with no rebuild. A Go driver for databases and other driver-based sources.
Go, contributed to the repository and compiled in. No plugin or manifest mechanism.
Connector maintenance
Every connector lives in the engine repository with a published maturity level (alpha, beta, stable).
All maintained by Bruin. 117 sources and 32 destinations in the README table.
Connector maintenance
Every connector lives in the engine repository with a published maturity level (alpha, beta, stable).
All maintained by Bruin. 117 sources and 32 destinations in the README table.
Services to operate
Server and control plane, with Postgres and NATS. Each run is its own Kubernetes Job. One binary for evaluation.
None. One process per run.
Services to operate
Server and control plane, with Postgres and NATS. Each run is its own Kubernetes Job. One binary for evaluation.
None. One process per run.
Runtime
Static Go binaries on distroless images. One runner code path wherever a run executes.
Go binary using Arrow and ADBC. The pip package downloads the binary.
Runtime
Static Go binaries on distroless images. One runner code path wherever a run executes.
Go binary using Arrow and ADBC. The pip package downloads the binary.
Scheduling
Built-in cron per pipeline. Safe to run multiple control planes.
None. Cron, an orchestrator, or Bruin.
Scheduling
Built-in cron per pipeline. Safe to run multiple control planes.
None. Cron, an orchestrator, or Bruin.
SaaS source execution
Manifests interpreted inside the engine, in the same process as the run. No per-connector containers.
Hand-written Go per source, compiled into the binary.
SaaS source execution
Manifests interpreted inside the engine, in the same process as the run. No per-connector containers.
Hand-written Go per source, compiled into the binary.
Embeddable
Yes. Go library (app.Run) with swappable event bus, state store, and secrets.
Python SDK that shells out to the binary.
Embeddable
Yes. Go library (app.Run) with swappable event bus, state store, and secrets.
Python SDK that shells out to the binary.
Interfaces
Web UI, ConnectRPC API, CLI.
CLI, a local unauthenticated web UI, Python SDK.
Interfaces
Web UI, ConnectRPC API, CLI.
CLI, a local unauthenticated web UI, Python SDK.
Correctness
Resume after failure
Mid-table, from per-shard checkpoints, for upsert, incremental, and CDC runs. A failed run lands in a partial state and continues on re-request.
Batch loads restart from scratch. No high-watermark state is kept between batch runs, so your scheduler passes the interval. CDC runs resume from the log position.
Resume after failure
Mid-table, from per-shard checkpoints, for upsert, incremental, and CDC runs. A failed run lands in a partial state and continues on re-request.
Batch loads restart from scratch. No high-watermark state is kept between batch runs, so your scheduler passes the interval. CDC runs resume from the log position.
Per-batch integrity check
CRC32-C computed independently on the read side and the write side of every batch. A mismatch fails the run.
None. Row counts reported at the end of the run.
Per-batch integrity check
CRC32-C computed independently on the read side and the write side of every batch. A mismatch fails the run.
None. Row counts reported at the end of the run.
Change data capture
Native. Postgres logical replication (pgoutput) with a consistent snapshot bootstrap. MySQL binlog with GTID cursors.
Yes. Postgres WAL, MySQL binlog, SQL Server, MongoDB, Vitess, PlanetScale. Deletes are soft-deleted rows.
Change data capture
Native. Postgres logical replication (pgoutput) with a consistent snapshot bootstrap. MySQL binlog with GTID cursors.
Yes. Postgres WAL, MySQL binlog, SQL Server, MongoDB, Vitess, PlanetScale. Deletes are soft-deleted rows.
Schema drift
New columns added to the destination automatically. Add-only, nothing dropped, nothing rewritten.
Schema contract modes (evolve, freeze, discard). New columns added as nullable. Type changes depend on the destination.
Schema drift
New columns added to the destination automatically. Add-only, nothing dropped, nothing rewritten.
Schema contract modes (evolve, freeze, discard). New columns added as nullable. Type changes depend on the destination.
Parallel reads within a table
Yes. Large tables split into up to 64 shards (keyset, bitmap, or ctid) read concurrently.
Opt-in. Requires a partition column, a partition interval, and an explicit interval window. One stream per table by default.
Parallel reads within a table
Yes. Large tables split into up to 64 shards (keyset, bitmap, or ctid) read concurrently.
Opt-in. Requires a partition column, a partition interval, and an explicit interval window. One stream per table by default.
Row lineage
Every replicated row carries the run id and start time. CDC rows also carry operation, source position, and sequence.
_cdc_lsn, _cdc_deleted, _cdc_synced_at on CDC loads. None documented for batch loads.
Row lineage
Every replicated row carries the run id and start time. CDC rows also carry operation, source position, and sequence.
_cdc_lsn, _cdc_deleted, _cdc_synced_at on CDC loads. None documented for batch loads.
Cost
What drives billing
Nothing. Compute you already run.
Nothing for the CLI. Bruin Cloud has no public price list.
What drives billing
Nothing. Compute you already run.
Nothing for the CLI. Bruin Cloud has no public price list.
Paid tiers
None.
Bruin Cloud for managed orchestration, lineage, audit logs, and SSO on enterprise plans.
Paid tiers
None.
Bruin Cloud for managed orchestration, lineage, audit logs, and SSO on enterprise plans.
Comparison
Benchmarks
Benchmarks
benchmark
Wall time, seconds for a full load
Wall time, seconds for a full load
Wall time, seconds for a full load
Filament
ingestr
NYC Taxi, PG → PG (298.3M rows)
114.8 s
610.9 s
TPC-H, PG → PG (8.7M rows)
3.79 s
17.49 s
Rows per second
Rows per second
Rows per second
Filament
Filament
ingestr
ingestr
Better
NYC Taxi, PG → PG
NYC Taxi, PG → PG
2,597,498
2,597,498
2,597,498
488,233
488,233
488,233
Filament 5.32×
TPC-H, PG → PG
TPC-H, PG → PG
2,288,144
2,288,144
2,288,144
495,233
495,233
495,233
Filament 4.62×
CPU seconds, summed across the mover's containers
CPU seconds, summed across the mover's containers
CPU seconds, summed across the mover's containers
Filament
Filament
ingestr
ingestr
Better
NYC Taxi, PG → PG
377.4
377.4
377.4
157.4
157.4
157.4
ingestr 0.42×
TPC-H, PG → PG
17.9
17.9
17.9
11.3
11.3
11.3
ingestr 0.63×
Peak memory, largest container
Peak memory, largest container
Peak memory, largest container
Filament
ingestr
NYC Taxi, PG → PG
2.97 GiB
4.83 GiB
TPC-H, PG → PG
1.83 GiB
1.62 GiB
Last updated on August 31, 2026
Full Filament vs. ingestr benchmark report
Full Filament vs. ingestr benchmark report
Full Filament vs. ingestr benchmark report
See how Filament compares
filament benchmarks
Migrate to
Migrate to
Company
Talk to the team
Copyright © 2026 Galaxy. All rights reserved.