Outputs
The same source can write to any output — chosen at run time with --output,
not baked into the source.
--output value | Result |
|---|---|
singer (default) | Singer SCHEMA / RECORD / STATE messages on stdout |
jsonl:DIR · csv:DIR · tsv:DIR · parquet:DIR | One file per export plus state.json, written atomically |
duckdb:PATH[:SCHEMA] · ducklake:CATALOG[:SCHEMA] | Load into DuckDB or DuckLake |
dlt:DESTINATION[:DATASET] | Load into any dlt destination |
File outputs
streamwright run my_source --output parquet:out --file-name "{{ export }}/{{ today }}.parquet"
--file-name templates the path from {{ export }}, {{ source }}, {{ today }},
{{ timestamp }} and {{ config.NAME }}.
| Format | Each export's file |
|---|---|
jsonl | One JSON object per line |
csv / tsv | A header row, then one row per record |
parquet | One row per record, with the export step's column types, zstd-compressed |
Warehouses
- DuckDB / DuckLake — load directly into a local or lakehouse catalog.
- dlt — reuse dlt's destinations (BigQuery, Snowflake, Postgres, …) and its schema evolution.
Because output is a run-time choice, the same pipeline can emit Singer messages in one environment and load a warehouse in another — no source change.