camel-cli 0.38.0

Command-line interface for Apache Camel in Rust
[package]
name = "camel-cli"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "Command-line interface for Apache Camel in Rust"
repository.workspace = true
homepage.workspace = true
documentation = "https://docs.rs/camel-cli"
readme = "README.md"
keywords = ["camel", "cli", "integration", "messaging"]
categories = ["command-line-utilities", "development-tools"]

[lib]
name = "camel_cli"
path = "src/lib.rs"

[[bin]]
name = "camel"
path = "src/main.rs"

[dependencies]
async-trait.workspace = true
chrono.workspace = true
clap = { workspace = true, features = ["derive", "env"] }
config.workspace = true
glob.workspace = true
humantime.workspace = true
include_dir = "0.7"
noyalib.workspace = true
percent-encoding.workspace = true
regex.workspace = true
serde.workspace = true
serde_json.workspace = true
tokio-util.workspace = true
tokio.workspace = true
toml.workspace = true
tracing-subscriber.workspace = true
tracing.workspace = true
tower = { workspace = true, features = ["util"] }
camel-api.workspace = true
camel-bean.workspace = true
camel-dsl.workspace = true
camel-core = { workspace = true, features = ["lang-js", "lang-rhai", "lang-jsonpath", "lang-xpath", "lang-minijinja"] }
camel-config = { workspace = true, features = ["otel", "kubernetes"] }
camel-component-api.workspace = true
camel-component-container.workspace = true
camel-component-controlbus.workspace = true
camel-component-direct.workspace = true
camel-component-seda.workspace = true
camel-component-file.workspace = true
camel-component-http.workspace = true
camel-component-jms.workspace = true
camel-component-kafka = { workspace = true, optional = true }
camel-component-mqtt = { workspace = true, optional = true }
camel-component-grpc = { workspace = true, optional = true }
camel-component-log.workspace = true
camel-component-mock.workspace = true
camel-component-opensearch = { workspace = true }
camel-master = { workspace = true }
camel-component-redis.workspace = true
camel-component-sql.workspace = true
camel-component-cron.workspace = true
camel-component-timer.workspace = true
camel-component-validator.workspace = true
camel-component-ws.workspace = true
camel-dataformat-protobuf = { workspace = true, optional = true }
camel-proto-compiler = { workspace = true, optional = true }
camel-xslt = { workspace = true }
camel-xj = { workspace = true }
camel-template = { workspace = true }
camel-component-wasm = { workspace = true, optional = true }
camel-component-llm = { workspace = true, optional = true }
camel-component-mcp = { workspace = true, optional = true }
camel-component-cxf = { workspace = true }
camel-function = { workspace = true }
camel-wit.workspace = true
camel-auth.workspace = true
camel-component-keycloak.workspace = true
camel-lint.workspace = true
camel-lsp.workspace = true
tower-lsp.workspace = true
ariadne.workspace = true
rustls.workspace = true
camel-component-surrealdb = { workspace = true, optional = true }
camel-component-exec = { workspace = true, optional = true }
# Global allocator backends (binary-only; library crates must never set one).
# tikv-jemalloc-sys builds jemalloc from source, so keep default features off
# (no background_threads_runtime_support) for the leanest musl-friendly build.
# Version floor 0.7 (= jemalloc 5.3.1): its configure script derives LG_PAGE
# from the TARGET triple (aarch64-linux gets 64K; x86_64 detects 4K natively).
# 0.6 baked the build-host page size when cross-compiling, which produces a
# binary that aborts at startup on 64K-page aarch64 kernels (RHEL 9 family).
# "stats" re-enables jemalloc's own default statistics (--enable-stats) so
# the release verify gate can dump allocator config via MALLOC_CONF=
# stats_print:true; negligible cost, and rc-vnm8 soak observability wants it.
tikv-jemallocator = { version = "0.7", optional = true, default-features = false, features = ["stats"] }
# must stay in lockstep with tikv-jemallocator 0.7
tikv-jemalloc-ctl = { version = "0.7", optional = true, default-features = false, features = ["use_std", "stats"] }
mimalloc = { version = "0.1", optional = true }

[dev-dependencies]
tempfile = { workspace = true }
serde_json.workspace = true
ron = { workspace = true }
jsonwebtoken.workspace = true

[features]
default = ["otel", "grpc", "wasm", "http-static", "llm", "surrealdb", "exec", "mqtt", "mcp"]
otel = ["camel-component-http/otel", "camel-component-ws/otel"]
# kafka activates the kafka component code only — linking strategy is orthogonal.
# Use `kafka` alone (rdkafka will build from source via cmake by default),
# `kafka,dynamic-linking` to link against a system librdkafka, or
# `kafka-static` to force a cmake source build explicitly.
kafka = ["dep:camel-component-kafka"]
grpc = [
  "dep:camel-component-grpc",
  "dep:camel-dataformat-protobuf",
  "dep:camel-proto-compiler",
  "camel-dsl/protobuf",
]
wasm = ["dep:camel-component-wasm"]
# LLM component. Default enables mock plus all real providers (openai,
# ollama) so the release binary works with real models out of the box.
llm = ["dep:camel-component-llm", "camel-component-llm/all-providers"]
# MCP component (Model Context Protocol, scheme `mcp:`): Consumer (server)
# tool/resource routes + Producer (client) call/read dispatch.
mcp = ["dep:camel-component-mcp"]
http-static = []
cmake-build = ["camel-component-kafka/cmake-build"]
dynamic-linking = ["camel-component-kafka/dynamic-linking"]
kafka-static = ["dep:camel-component-kafka", "cmake-build"]
# mqtt activates the MQTT component (rumqttc, no TLS by default).
# Use mqtt-tls to enable TLS support (mqtts:// URIs).
mqtt = ["dep:camel-component-mqtt"]
mqtt-tls = ["mqtt", "camel-component-mqtt/tls"]
surrealdb = ["dep:camel-component-surrealdb"]
# exec activates the fail-closed system command execution component.
exec = ["dep:camel-component-exec"]
# Global allocator overrides for the `camel` release binary. Additive and
# independent; if both are enabled, jemalloc wins. Soak/migration plan: bd rc-vnm8.
jemalloc = ["dep:tikv-jemallocator", "dep:tikv-jemalloc-ctl"]
mimalloc = ["dep:mimalloc"]

[lints]
workspace = true