[workspace] members = [ "crates/*", "ncro" ] resolver = "3" [workspace.package] description = "Nix Cache Route Optimizer" edition = "2024" homepage = "https://github.com/notashelf/ncro" license = "EUPL-1.2" repository = "https://github.com/notashelf/ncro" version = "2.0.0" [workspace.dependencies] # Workspace components ncro-config = { path = "./crates/config", version = "2.0.0" } ncro-db = { path = "./crates/db", version = "2.0.0" } ncro-discovery = { path = "./crates/discovery", version = "2.0.0" } ncro-health = { path = "./crates/health", version = "2.0.0" } ncro-mesh = { path = "./crates/mesh", version = "2.0.0" } ncro-metrics = { path = "./crates/metrics", version = "2.0.0" } ncro-narinfo = { path = "./crates/narinfo", version = "2.0.0" } ncro-router = { path = "./crates/router", version = "2.0.0" } ncro-server = { path = "./crates/server", version = "2.0.0" } # Other deps anyhow = "1.0.102" axum = "0.8.9" base64 = "0.22.1" bytes = "1.11.1" chrono = "0.4.44" clap = "4.6.1" ed25519-dalek = "2.2.0" futures-util = "0.3.32" hex = "0.4.3" humantime-serde = "1.1.1" mdns-sd = "0.19.1" prometheus = "0.14.0" rand = "0.10.1" reqwest = { version = "0.13.3", default-features = false } rmp-serde = "1.3.1" serde = "1.0.228" serde_json = "1.0.149" sqlx = { version = "0.8.6", default-features = false } tempfile = "3.27.0" thiserror = "2.0.18" tokio = "1.52.3" toml = "1.1.2" tower = "0.5.3" tower-http = "0.6.10" tracing = "0.1.44" tracing-subscriber = "0.3.23" url = "2.5.8" # See: # [workspace.lints.clippy] cargo = { level = "warn", priority = -1 } complexity = { level = "warn", priority = -1 } nursery = { level = "warn", priority = -1 } pedantic = { level = "warn", priority = -1 } perf = { level = "warn", priority = -1 } style = { level = "warn", priority = -1 } # The lint groups above enable some less-than-desirable rules, we should manually # enable those to keep our sanity. absolute_paths = "allow" arbitrary_source_item_ordering = "allow" clone_on_ref_ptr = "warn" dbg_macro = "warn" empty_drop = "warn" empty_structs_with_brackets = "warn" exit = "warn" filetype_is_file = "warn" get_unwrap = "warn" implicit_return = "allow" infinite_loop = "warn" map_with_unused_argument_over_ranges = "warn" missing_docs_in_private_items = "allow" multiple_crate_versions = "allow" # :( non_ascii_literal = "allow" non_std_lazy_statics = "warn" pathbuf_init_then_push = "warn" pattern_type_mismatch = "allow" question_mark_used = "allow" rc_buffer = "warn" rc_mutex = "warn" rest_pat_in_fully_bound_structs = "warn" similar_names = "allow" single_call_fn = "allow" std_instead_of_core = "allow" too_long_first_doc_paragraph = "allow" too_many_lines = "allow" undocumented_unsafe_blocks = "warn" unnecessary_safety_comment = "warn" unused_result_ok = "warn" unused_trait_names = "allow" # False positive: # clippy's build script check doesn't recognize workspace-inherited metadata # which means in our current workspace layout, we get pranked by Clippy. cargo_common_metadata = "allow" # In the honor of a recent Cloudflare regression panic = "deny" unwrap_used = "deny" # Less dangerous, but we'd like to know # Those must be opt-in, and are fine ONLY in tests and examples. We *can* panic # in NDG (the binary crate), but it should be very deliberate expect_used = "warn" print_stderr = "warn" print_stdout = "warn" todo = "warn" unimplemented = "warn" unreachable = "warn" [profile.dev] debug = true opt-level = 0 [profile.release] codegen-units = 1 lto = true opt-level = "z" panic = "abort" strip = "symbols"