[package]
name = "faucet-cli"
version = "1.12.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage = "https://faucet-hq.github.io/faucet-stream/"
description = "Config-driven CLI runner for faucet-stream pipelines (YAML / JSON, Meltano-style)"
readme = "README.md"
keywords = ["pipeline", "etl", "cli", "meltano", "faucet"]
categories = ["command-line-utilities"]
[[bin]]
name = "faucet"
path = "src/main.rs"
[features]
default = ["observability", "source", "sink", "state", "transforms", "compression", "quality", "contract", "masking", "cli-progress"]
full = ["default", "otel", "schedule", "serve", "serve-ui", "serve-history-postgres", "serve-history-sqlite", "catalog", "lineage", "lineage-kafka", "notify", "transform-sql", "transform-wasm", "triggers", "triggers-object-store", "triggers-redis", "triggers-kafka", "templates", "cli-dev", "encryption", "cli-tui", "mcp", "delta-s3", "delta-azure", "delta-gcs", "mtls", "oauth1", "sink-clickhouse-staging", "sink-mssql-staging", "source-rest-excel", "source-xml-excel"]
catalog = ["serve", "lineage"]
quality = ["faucet-core/quality"]
quality-jsonschema = ["quality", "faucet-core/quality-jsonschema"]
contract = ["faucet-core/contract"]
masking = ["faucet-core/masking"]
encryption = ["faucet-core/encryption", "faucet-sink-jsonl?/encryption", "dep:base64"]
source = [
"source-rest",
"source-graphql",
"source-xml",
"source-grpc",
"source-postgres",
"source-postgres-cdc",
"source-mysql",
"source-mssql",
"source-sqlite",
"source-duckdb",
"source-sqs",
"source-nats",
"source-sftp",
"source-s3",
"source-mongodb",
"source-mongodb-cdc",
"source-mysql-cdc",
"source-mssql-cdc",
"source-redshift",
"source-pubsub",
"source-clickhouse",
"source-azure-blob",
"source-redis",
"source-webhook",
"source-websocket",
"source-csv",
"source-elasticsearch",
"source-kafka",
"source-kinesis",
"source-parquet",
"source-delta",
"source-databricks",
"source-gcs",
"source-bigquery",
"source-snowflake",
"source-spanner",
"source-singer",
]
sink = [
"sink-bigquery",
"sink-postgres",
"sink-jsonl",
"sink-snowflake",
"sink-mysql",
"sink-mssql",
"sink-sqlite",
"sink-duckdb",
"sink-sqs",
"sink-nats",
"sink-sftp",
"sink-s3",
"sink-mongodb",
"sink-redis",
"sink-csv",
"sink-elasticsearch",
"sink-http",
"sink-stdout",
"sink-kafka",
"sink-kinesis",
"sink-parquet",
"sink-delta",
"sink-gcs",
"sink-iceberg",
"sink-spanner",
"sink-redshift",
"sink-pubsub",
"sink-clickhouse",
"sink-azure-blob",
]
state = ["state-redis", "state-postgres"]
source-rest = ["dep:faucet-source-rest"]
source-rest-excel = ["source-rest", "faucet-source-rest/excel"]
source-xml-excel = ["source-xml", "faucet-source-xml/excel"]
source-graphql = ["dep:faucet-source-graphql"]
source-xml = ["dep:faucet-source-xml"]
source-grpc = ["dep:faucet-source-grpc"]
source-postgres = ["dep:faucet-source-postgres"]
source-postgres-cdc = ["dep:faucet-source-postgres-cdc"]
source-mysql = ["dep:faucet-source-mysql"]
source-mssql = ["dep:faucet-source-mssql"]
source-sqlite = ["dep:faucet-source-sqlite"]
source-duckdb = ["dep:faucet-source-duckdb"]
source-sqs = ["dep:faucet-source-sqs", "dep:faucet-common-sqs"]
source-nats = ["dep:faucet-source-nats", "dep:faucet-common-nats"]
source-sftp = ["dep:faucet-source-sftp", "dep:faucet-common-sftp"]
source-s3 = ["dep:faucet-source-s3"]
source-mongodb = ["dep:faucet-source-mongodb"]
source-mongodb-cdc = ["dep:faucet-source-mongodb-cdc"]
source-mysql-cdc = ["dep:faucet-source-mysql-cdc"]
source-mssql-cdc = ["dep:faucet-source-mssql-cdc"]
source-redshift = ["dep:faucet-source-redshift"]
source-pubsub = ["dep:faucet-source-pubsub"]
source-clickhouse = ["dep:faucet-source-clickhouse"]
source-azure-blob = ["dep:faucet-source-azure-blob"]
source-redis = ["dep:faucet-source-redis"]
source-webhook = ["dep:faucet-source-webhook"]
source-websocket = ["dep:faucet-source-websocket"]
source-csv = ["dep:faucet-source-csv"]
source-elasticsearch = ["dep:faucet-source-elasticsearch"]
source-kafka = ["dep:faucet-source-kafka"]
source-kinesis = ["dep:faucet-source-kinesis"]
source-parquet = ["dep:faucet-source-parquet"]
source-delta = ["dep:faucet-source-delta"]
source-databricks = ["dep:faucet-source-databricks"]
source-gcs = ["dep:faucet-source-gcs"]
source-bigquery = ["dep:faucet-source-bigquery"]
source-snowflake = ["dep:faucet-source-snowflake"]
source-spanner = ["dep:faucet-source-spanner"]
source-singer = ["dep:faucet-source-singer"]
sink-bigquery = ["dep:faucet-sink-bigquery"]
sink-iceberg = ["dep:faucet-sink-iceberg"]
sink-postgres = ["dep:faucet-sink-postgres"]
sink-jsonl = ["dep:faucet-sink-jsonl"]
sink-snowflake = ["dep:faucet-sink-snowflake"]
sink-mysql = ["dep:faucet-sink-mysql"]
sink-mssql = ["dep:faucet-sink-mssql"]
sink-mssql-staging = ["sink-mssql", "faucet-sink-mssql/staging"]
sink-sqlite = ["dep:faucet-sink-sqlite"]
sink-duckdb = ["dep:faucet-sink-duckdb"]
sink-sqs = ["dep:faucet-sink-sqs", "dep:faucet-common-sqs"]
sink-nats = ["dep:faucet-sink-nats", "dep:faucet-common-nats"]
sink-sftp = ["dep:faucet-sink-sftp", "dep:faucet-common-sftp"]
sink-s3 = ["dep:faucet-sink-s3"]
sink-mongodb = ["dep:faucet-sink-mongodb"]
sink-redis = ["dep:faucet-sink-redis"]
sink-csv = ["dep:faucet-sink-csv"]
sink-elasticsearch = ["dep:faucet-sink-elasticsearch"]
sink-http = ["dep:faucet-sink-http"]
sink-stdout = ["dep:faucet-sink-stdout"]
sink-kafka = ["dep:faucet-sink-kafka"]
sink-kinesis = ["dep:faucet-sink-kinesis"]
sink-spanner = ["dep:faucet-sink-spanner"]
sink-parquet = ["dep:faucet-sink-parquet"]
sink-delta = ["dep:faucet-sink-delta"]
sink-gcs = ["dep:faucet-sink-gcs"]
sink-redshift = ["dep:faucet-sink-redshift"]
sink-pubsub = ["dep:faucet-sink-pubsub"]
sink-clickhouse = ["dep:faucet-sink-clickhouse"]
sink-clickhouse-staging = ["sink-clickhouse", "faucet-sink-clickhouse/staging"]
sink-azure-blob = ["dep:faucet-sink-azure-blob"]
delta-s3 = ["faucet-source-delta?/s3", "faucet-sink-delta?/s3"]
delta-azure = ["faucet-source-delta?/azure", "faucet-sink-delta?/azure"]
delta-gcs = ["faucet-source-delta?/gcs", "faucet-sink-delta?/gcs"]
kafka-schema-registry = [
"faucet-source-kafka?/schema-registry",
"faucet-sink-kafka?/schema-registry",
]
compression = [
"faucet-source-csv?/compression",
"faucet-source-s3?/compression",
"faucet-source-gcs?/compression",
"faucet-sink-jsonl?/compression",
"faucet-sink-csv?/compression",
"faucet-sink-s3?/compression",
"faucet-sink-gcs?/compression",
"faucet-source-azure-blob?/compression",
"faucet-sink-azure-blob?/compression",
]
mtls = [
"faucet-source-rest?/mtls",
"faucet-source-xml?/mtls",
"faucet-source-graphql?/mtls",
]
oauth1 = ["faucet-auth/oauth1"]
arrow = [
"faucet-core/arrow",
"faucet-source-parquet?/arrow",
"faucet-sink-parquet?/arrow",
"faucet-source-delta?/arrow",
"faucet-sink-delta?/arrow",
"faucet-source-s3?/arrow",
"faucet-sink-s3?/arrow",
"faucet-source-gcs?/arrow",
"faucet-sink-gcs?/arrow",
"faucet-source-databricks?/arrow",
"faucet-source-bigquery?/arrow",
"faucet-sink-bigquery?/arrow",
"faucet-sink-snowflake?/arrow",
]
secrets = ["secrets-vault", "secrets-aws-sm", "secrets-gcp-sm", "secrets-azure-kv"]
secrets-vault = ["dep:reqwest"]
secrets-aws-sm = ["dep:aws-sdk-secretsmanager", "dep:aws-config"]
secrets-gcp-sm = ["dep:reqwest", "dep:google-cloud-auth", "dep:base64"]
secrets-azure-kv = ["dep:azure_security_keyvault_secrets", "dep:azure_identity", "dep:azure_core"]
state-redis = ["dep:faucet-state-redis"]
state-postgres = ["dep:faucet-state-postgres"]
lineage = ["dep:faucet-lineage", "dep:reqwest"]
lineage-kafka = ["lineage", "faucet-lineage/transport-kafka"]
notify = ["dep:reqwest", "dep:hmac", "dep:sha2"]
cli-interactive = ["dep:inquire"]
cli-dev = ["dep:notify-fs"]
cli-tui = ["observability", "dep:ratatui"]
cli-progress = ["observability", "dep:indicatif"]
transforms = [
"faucet-core/transforms",
"faucet-source-rest?/transforms",
"transform-filter",
"transform-explode",
"transform-zip-columns",
"transform-cdc-unwrap",
]
transform-filter = ["faucet-core/transform-filter"]
transform-explode = ["faucet-core/transform-explode"]
transform-zip-columns = ["faucet-core/transform-zip-columns"]
transform-cdc-unwrap = ["faucet-core/transform-cdc-unwrap"]
transform-sql = ["dep:faucet-transform-sql"]
transform-wasm = ["dep:faucet-transform-wasm"]
observability = [
"faucet-core/observability-install",
"dep:metrics-exporter-prometheus",
"dep:tracing-subscriber",
]
otel = ["observability", "faucet-core/otel"]
schedule = ["dep:croner"]
serve = ["observability", "tokio/net", "tokio/time", "dep:axum", "dep:tower-http", "dep:subtle", "dep:dashmap", "dep:sha2", "dep:async-stream", "dep:reqwest"]
serve-history-postgres = ["serve", "dep:sqlx"]
serve-history-sqlite = ["serve", "dep:sqlx"]
serve-ui = ["serve", "dep:rust-embed"]
mcp = ["serve", "tokio/io-std", "tokio/io-util"]
triggers = ["serve"]
triggers-object-store = ["triggers", "dep:object_store"]
triggers-redis = ["triggers", "dep:redis"]
triggers-kafka = ["triggers", "dep:rdkafka"]
templates = ["serve"]
[dependencies]
faucet-core.workspace = true
faucet-auth.workspace = true
faucet-source-rest = { workspace = true, optional = true }
faucet-source-graphql = { workspace = true, optional = true }
faucet-source-xml = { workspace = true, optional = true }
faucet-source-grpc = { workspace = true, optional = true }
faucet-source-postgres = { workspace = true, optional = true }
faucet-source-postgres-cdc = { workspace = true, optional = true }
faucet-source-mysql = { workspace = true, optional = true }
faucet-source-mssql = { workspace = true, optional = true }
faucet-source-sqlite = { workspace = true, optional = true }
faucet-source-duckdb = { workspace = true, optional = true }
faucet-source-sqs = { workspace = true, optional = true }
faucet-common-sqs = { workspace = true, optional = true }
faucet-source-nats = { workspace = true, optional = true }
faucet-common-nats = { workspace = true, optional = true }
faucet-source-sftp = { workspace = true, optional = true }
faucet-common-sftp = { workspace = true, optional = true }
faucet-source-s3 = { workspace = true, optional = true }
faucet-source-mongodb = { workspace = true, optional = true }
faucet-source-mongodb-cdc = { workspace = true, optional = true }
faucet-source-mysql-cdc = { workspace = true, optional = true }
faucet-source-mssql-cdc = { workspace = true, optional = true }
faucet-source-redshift = { workspace = true, optional = true }
faucet-source-pubsub = { workspace = true, optional = true }
faucet-source-clickhouse = { workspace = true, optional = true }
faucet-source-azure-blob = { workspace = true, optional = true }
faucet-source-redis = { workspace = true, optional = true }
faucet-source-webhook = { workspace = true, optional = true }
faucet-source-websocket = { workspace = true, optional = true }
faucet-source-csv = { workspace = true, optional = true }
faucet-source-elasticsearch = { workspace = true, optional = true }
faucet-source-kafka = { workspace = true, optional = true }
faucet-source-kinesis = { workspace = true, optional = true }
faucet-source-parquet = { workspace = true, optional = true }
faucet-source-delta = { workspace = true, optional = true }
faucet-source-databricks = { workspace = true, optional = true }
faucet-source-gcs = { workspace = true, optional = true }
faucet-source-bigquery = { workspace = true, optional = true }
faucet-source-snowflake = { workspace = true, optional = true }
faucet-source-spanner = { workspace = true, optional = true }
faucet-source-singer = { workspace = true, optional = true }
faucet-sink-bigquery = { workspace = true, optional = true }
faucet-sink-iceberg = { workspace = true, optional = true }
faucet-sink-postgres = { workspace = true, optional = true }
faucet-sink-jsonl = { workspace = true, optional = true }
faucet-sink-snowflake = { workspace = true, optional = true }
faucet-sink-mysql = { workspace = true, optional = true }
faucet-sink-mssql = { workspace = true, optional = true }
faucet-sink-sqlite = { workspace = true, optional = true }
faucet-sink-duckdb = { workspace = true, optional = true }
faucet-sink-sqs = { workspace = true, optional = true }
faucet-sink-nats = { workspace = true, optional = true }
faucet-sink-sftp = { workspace = true, optional = true }
faucet-sink-s3 = { workspace = true, optional = true }
faucet-sink-mongodb = { workspace = true, optional = true }
faucet-sink-redis = { workspace = true, optional = true }
faucet-sink-csv = { workspace = true, optional = true }
faucet-sink-elasticsearch = { workspace = true, optional = true }
faucet-sink-http = { workspace = true, optional = true }
faucet-sink-kafka = { workspace = true, optional = true }
faucet-sink-kinesis = { workspace = true, optional = true }
faucet-sink-spanner = { workspace = true, optional = true }
faucet-sink-stdout = { workspace = true, optional = true }
faucet-sink-parquet = { workspace = true, optional = true }
faucet-sink-delta = { workspace = true, optional = true }
faucet-sink-gcs = { workspace = true, optional = true }
faucet-sink-redshift = { workspace = true, optional = true }
faucet-sink-pubsub = { workspace = true, optional = true }
faucet-sink-clickhouse = { workspace = true, optional = true }
faucet-sink-azure-blob = { workspace = true, optional = true }
faucet-state-redis = { workspace = true, optional = true }
faucet-state-postgres = { workspace = true, optional = true }
faucet-lineage = { workspace = true, optional = true }
faucet-transform-sql = { workspace = true, optional = true }
faucet-transform-wasm = { workspace = true, optional = true }
clap = { version = "4", features = ["derive", "env"] }
clap_complete = { version = "4", features = ["unstable-dynamic"] }
dotenvy = "0.15"
schemars.workspace = true
serde.workspace = true
serde_json.workspace = true
serde_yaml = "0.9"
thiserror.workspace = true
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "signal", "fs", "sync", "time"] }
tracing.workspace = true
tracing-subscriber = { workspace = true, optional = true }
async-trait.workspace = true
metrics.workspace = true
metrics-exporter-prometheus = { workspace = true, optional = true }
uuid.workspace = true
inquire = { version = "0.9", optional = true, default-features = false, features = ["crossterm"] }
notify-fs = { package = "notify", version = "8", optional = true }
ratatui = { workspace = true, optional = true }
indicatif = { workspace = true, optional = true }
futures = { workspace = true }
glob = { workspace = true }
reqwest = { workspace = true, optional = true }
aws-config = { workspace = true, optional = true }
aws-sdk-secretsmanager = { workspace = true, optional = true }
google-cloud-auth = { workspace = true, optional = true }
base64 = { workspace = true, optional = true }
azure_security_keyvault_secrets = { workspace = true, optional = true }
azure_identity = { workspace = true, optional = true }
azure_core = { workspace = true, optional = true }
chrono = { workspace = true }
chrono-tz = { workspace = true }
croner = { workspace = true, optional = true }
axum = { workspace = true, optional = true }
tower-http = { workspace = true, optional = true }
tokio-util = { workspace = true }
subtle = { workspace = true, optional = true }
dashmap = { workspace = true, optional = true }
sha2 = { workspace = true, optional = true }
hmac = { workspace = true, optional = true }
async-stream = { workspace = true, optional = true }
sqlx = { workspace = true, optional = true }
rust-embed = { version = "8", optional = true, features = ["mime-guess"] }
object_store = { workspace = true, optional = true, features = ["aws", "gcp"] }
redis = { workspace = true, optional = true }
rdkafka = { workspace = true, optional = true }
[dev-dependencies]
tokio = { workspace = true, features = ["test-util"] }
tempfile = "3"
jsonschema = { workspace = true }
assert_cmd = "2"
predicates = "3"
wiremock = "0.6"
serial_test = "3"
metrics-util.workspace = true
serde_yaml = "0.9"
async-stream.workspace = true
futures-core.workspace = true
reqwest = { workspace = true, features = ["json"] }
tower = { version = "0.5", features = ["util"] }
testcontainers = "0.27"
testcontainers-modules = { version = "0.15", features = ["postgres"] }
sqlx = { workspace = true, features = ["runtime-tokio", "sqlite"] }
tokio-postgres = "0.7"
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]