[package]
edition = "2024"
rust-version = "1.89.0"
name = "librebar"
version = "0.1.0"
build = false
exclude = [
"/.claude/",
"/.github/",
"/.handoffs/",
"/.config",
"/.justfile",
"/bench-reports/",
"/scripts/",
"/docs/",
"/scratch/",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Opinionated application foundation for Rust CLIs and services"
homepage = "https://github.com/claylo/librebar"
documentation = "https://docs.rs/librebar"
readme = "README.md"
keywords = [
"cli",
"config",
"logging",
"tracing",
"mcp",
]
categories = [
"command-line-interface",
"config",
"development-tools",
]
license = "Apache-2.0 OR MIT"
repository = "https://github.com/claylo/librebar"
[features]
bench = ["dep:divan"]
bench-gungraun = ["dep:gungraun"]
cache = [
"dep:serde_json",
"dep:directories",
"dep:base64",
]
cli = [
"dep:clap",
"dep:owo-colors",
]
config = [
"dep:toml",
"dep:serde-saphyr",
"dep:serde_json",
"dep:camino",
"dep:directories",
]
crash = []
diagnostics = [
"config",
"logging",
"dep:flate2",
"dep:tar",
]
dispatch = [
"cli",
"dep:which",
]
http = [
"dep:hyper",
"dep:hyper-util",
"dep:http-body-util",
"dep:hyper-rustls",
"dep:rustls",
"dep:tokio",
"dep:serde_json",
]
lockfile = []
logging = [
"dep:tracing-subscriber",
"dep:tracing-appender",
"dep:serde_json",
"dep:directories",
]
mcp = [
"dep:rmcp",
"dep:tokio",
]
otel = [
"logging",
"dep:opentelemetry",
"dep:opentelemetry_sdk",
"dep:opentelemetry-otlp",
"dep:tracing-opentelemetry",
"dep:tokio",
]
otel-grpc = [
"otel",
"opentelemetry-otlp/grpc-tonic",
]
shutdown = ["dep:tokio"]
update = [
"http",
"cache",
"dep:serde_json",
]
[lib]
name = "librebar"
path = "src/lib.rs"
[[example]]
name = "doctor-bundle"
path = "examples/doctor-bundle.rs"
required-features = [
"cli",
"config",
"logging",
"diagnostics",
]
[[example]]
name = "mcp-server"
path = "examples/mcp-server.rs"
required-features = [
"cli",
"config",
"logging",
"mcp",
]
[[example]]
name = "minimal"
path = "examples/minimal.rs"
required-features = [
"cli",
"config",
"logging",
]
[[example]]
name = "plugin-cli"
path = "examples/plugin-cli/main.rs"
required-features = [
"cli",
"config",
"logging",
"dispatch",
]
[[example]]
name = "plugin-cli-hello-greet"
path = "examples/plugin-cli/hello-greet/main.rs"
required-features = ["cli"]
[[example]]
name = "service"
path = "examples/service.rs"
required-features = [
"cli",
"config",
"logging",
"shutdown",
"crash",
"otel",
]
[[example]]
name = "updater"
path = "examples/updater.rs"
required-features = [
"cli",
"config",
"logging",
"http",
"cache",
"update",
]
[[test]]
name = "bench_gungraun_test"
path = "tests/bench_gungraun_test.rs"
[[test]]
name = "bench_test"
path = "tests/bench_test.rs"
[[test]]
name = "builder_test"
path = "tests/builder_test.rs"
[[test]]
name = "cache_test"
path = "tests/cache_test.rs"
[[test]]
name = "cli_test"
path = "tests/cli_test.rs"
[[test]]
name = "config_test"
path = "tests/config_test.rs"
[[test]]
name = "crash_test"
path = "tests/crash_test.rs"
[[test]]
name = "diagnostics_test"
path = "tests/diagnostics_test.rs"
[[test]]
name = "dispatch_test"
path = "tests/dispatch_test.rs"
[[test]]
name = "http_test"
path = "tests/http_test.rs"
[[test]]
name = "lockfile_test"
path = "tests/lockfile_test.rs"
[[test]]
name = "logging_test"
path = "tests/logging_test.rs"
[[test]]
name = "mcp_test"
path = "tests/mcp_test.rs"
[[test]]
name = "otel_test"
path = "tests/otel_test.rs"
[[test]]
name = "shutdown_test"
path = "tests/shutdown_test.rs"
[[test]]
name = "update_test"
path = "tests/update_test.rs"
[dependencies.base64]
version = "0.22"
optional = true
[dependencies.camino]
version = "1.2"
features = ["serde1"]
optional = true
[dependencies.clap]
version = "4.6"
features = ["derive"]
optional = true
[dependencies.directories]
version = "6.0"
optional = true
[dependencies.divan]
version = "0.1"
optional = true
[dependencies.flate2]
version = "1.1"
optional = true
[dependencies.gungraun]
version = "0.19"
optional = true
[dependencies.http-body-util]
version = "0.1"
optional = true
[dependencies.hyper]
version = "1.9"
features = [
"client",
"http1",
"http2",
]
optional = true
[dependencies.hyper-rustls]
version = "0.27"
features = [
"http1",
"http2",
"ring",
"webpki-tokio",
]
optional = true
default-features = false
[dependencies.hyper-util]
version = "0.1"
features = [
"client-legacy",
"http1",
"http2",
"tokio",
]
optional = true
[dependencies.opentelemetry]
version = "0.32"
features = ["trace"]
optional = true
[dependencies.opentelemetry-otlp]
version = "0.32"
features = [
"http-proto",
"hyper-client",
"trace",
]
optional = true
default-features = false
[dependencies.opentelemetry_sdk]
version = "0.32"
features = [
"trace",
"rt-tokio",
]
optional = true
[dependencies.owo-colors]
version = "4.3"
features = ["supports-colors"]
optional = true
[dependencies.rmcp]
version = "1.7"
features = [
"server",
"transport-io",
]
optional = true
[dependencies.rustls]
version = "0.23.40"
optional = true
default-features = false
[dependencies.serde]
version = "1.0"
features = ["derive"]
[dependencies.serde-saphyr]
version = "0.0.27"
optional = true
[dependencies.serde_json]
version = "1.0"
optional = true
[dependencies.tar]
version = "0.4"
optional = true
[dependencies.thiserror]
version = "2.0"
[dependencies.tokio]
version = "1.52"
features = [
"rt",
"macros",
"signal",
"sync",
]
optional = true
[dependencies.toml]
version = "1.1"
optional = true
[dependencies.tracing]
version = "0.1"
[dependencies.tracing-appender]
version = "0.2.5"
optional = true
[dependencies.tracing-opentelemetry]
version = "0.33"
optional = true
[dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
optional = true
[dependencies.which]
version = "8.0"
optional = true
[dev-dependencies.anyhow]
version = "1.0"
[dev-dependencies.serde_json]
version = "1.0"
[dev-dependencies.tempfile]
version = "3.27"
[dev-dependencies.tokio]
version = "1.52"
features = [
"rt",
"macros",
"time",
]
[lints.clippy]
all = "warn"
nursery = "warn"
[lints.rust]
missing_docs = "warn"
unsafe_code = "deny"
[profile.bench]
lto = "thin"
debug = "line-tables-only"
inherits = "release"
[profile.dev]
opt-level = 1
codegen-units = 256
debug = "line-tables-only"
split-debuginfo = "packed"
[profile.dev.package."*"]
opt-level = 1
debug = 0
[profile.dev.build-override]
opt-level = 1
debug = 0
[profile.mystery]
opt-level = 1
debug = 2
inherits = "release"
strip = false
[profile.release]
debug = "line-tables-only"
[profile.test]
codegen-units = 256
debug = 2
inherits = "dev"