Skip to main content
This guide runs Filament on your machine with nothing but the filament CLI. You move generated rows from the Sample source to the stdout sink, which prints every record as JSON. Then you save the same route as a pipeline, run it again with history, define it in YAML, and open it in the web app. The local CLI keeps its state in SQLite and runs an in-process event bus, so it needs no Postgres, NATS, Docker, or cloud account.

1. Install the CLI

On macOS you can use Homebrew instead:
Check the install and the active context:

2. Move data with one command

An inline run moves data without saving anything:
What you are looking at:
  • One JSON line per record. The Sample source emits three rows per resource by default.
  • _filament_run_id and _filament_run_started_at. Filament adds these to every row it writes, in every sink, so you can trace a row back to its run.
  • The # receipt line. The sink reports what it wrote for each resource, with record and byte counts.
stdout supports only replace and append writes. Without --write-mode replace, the run uses the default upsert and fails with sink "stdout" does not support write policy "upsert".

3. Save a source, a sink, and a pipeline

Saved connections and pipelines keep run history, checkpoints, and settings in local state.
See what the source offers:
Create a pipeline. --source-rows is a pipeline-level setting, so you can run the same source with different settings in different pipelines:

4. Run it and check history

5. Define pipelines in YAML

The local context also reads pipelines from ~/.config/filament/filament.yaml (filament config path prints the exact path). Settings that belong to the pipeline, like rows, go on the pipeline’s source node:
The CLI applies the file when it changes. Removing an entry from the file does not delete it from local state.

6. Open the web app

Open http://127.0.0.1:8080 to see your pipelines on the canvas, run them, add a schedule, and inspect each run. Stop it with filament down.

Next steps

Swap the Sample source and stdout sink for real systems. The commands stay the same; only the connector and its fields change.

PostgreSQL to ClickHouse

Runs on the local CLI. Snapshot, then incremental upserts.

PostgreSQL to Snowflake

Change data capture with merged inserts, updates, and deletes.

Replication modes

How full, incremental, and CDC reads pair with write policies.

CLI reference

Every command, flag, context, and output option.

FAQ

Do I need Docker or a database to try Filament?

No. The local context runs Filament in process with SQLite and an in-process event bus. You need a datastore and an event bus only when you deploy Filament as a shared service.

Can I run change data capture on the local CLI?

No. CDC pipelines need the PostgreSQL datastore, so they run on a deployed Filament server. Full and incremental pipelines run locally.

Is Filament free?

Yes. Filament is open source under the Apache 2.0 license. The engine and every connector are on GitHub.

Where does the local CLI keep its state?

In filament.db next to filament.yaml. filament status prints both paths.