[workspace] members = [ "xtask", "xtask-release", "crates/axon-error", "crates/axon-api", "crates/axon-authz", "crates/axon-core", "crates/axon-observe", "crates/axon-route", "crates/axon-extract", "crates/axon-adapters", "crates/axon-ledger", "crates/axon-parse", "crates/axon-graph", "crates/axon-memory", "crates/axon-document", "crates/axon-embedding", "crates/axon-vectors", "crates/axon-retrieval", "crates/axon-codex", "crates/axon-llm", "crates/axon-prune", "crates/axon-jobs", "crates/axon-services", "crates/axon-mcp", "crates/axon-web", "crates/axon-cli", ] # apps/palette-tauri/src-tauri declares its own `[workspace]`, so it builds as a # standalone workspace and is not a member here. resolver = "2" # Product version, inherited by every crate via `version.workspace = true`. The # `axon` package keeps an explicit `version` too (the release checker reads it as # a string); `cargo xtask bump-version patch --component cli` moves both in lockstep. [workspace.package] version = "7.5.1" edition = "2024" rust-version = "1.97.1" keywords = ["rag", "mcp", "qdrant", "embeddings", "crawler"] categories = ["command-line-utilities", "text-processing", "database", "web-programming", "development-tools"] repository = "https://github.com/dinglebear-ai/axon" homepage = "https://axon.dinglebear.ai" authors = ["dinglebear.ai "] description = "Self-hosted RAG engine in Rust: crawl, scrape, ingest, embed, and query any source, with hybrid retrieval and cited LLM synthesis over MCP, CLI, and REST." readme = "README.md" license = "AGPL-3.0-only" # ── workspace lints ────────────────────────────────────────────────────────── # Single source of truth for the lint policy every crate previously repeated # verbatim in its own `[lints.rust]` / `[lints.clippy]` tables. Members inherit # with `[lints] workspace = true` — Cargo makes that all-or-nothing, so a member # cannot mix `workspace = true` with local lint entries. [workspace.lints.rust] unsafe_code = "deny" missing_crate_level_docs = "deny" unsafe_op_in_unsafe_fn = "deny" unused_import_braces = "warn" unused_qualifications = "warn" [workspace.lints.clippy] all = { level = "warn", priority = -1 } missing_safety_doc = "deny" module_inception = "allow" # permitted where a domain module intentionally owns a same-named implementation submodule mod_module_files = "deny" # forbid mod.rs — enforce foo.rs sibling to foo/ style [workspace.lints.rustdoc] broken_intra_doc_links = "deny" invalid_codeblock_attributes = "deny" invalid_html_tags = "deny" bare_urls = "warn" private_intra_doc_links = "warn" redundant_explicit_links = "warn" unescaped_backticks = "warn" # Override lab-auth from the git source with a local vendored copy that uses # rusqlite 0.32 (libsqlite3-sys 0.30) instead of rusqlite 0.39 (libsqlite3-sys # 0.37). Both libsqlite3-sys versions declare `links = "sqlite3"`, which Cargo # forbids when two different versions of a links-crate coexist in the same # build graph. sqlx-sqlite 0.8 pins libsqlite3-sys = "0.30.1", so using # rusqlite 0.32 here resolves to the same libsqlite3-sys version and eliminates # the conflict. [patch."https://github.com/dinglebear-ai/labby.git"] lab-auth = { path = "vendor/lab-auth" } [package] name = "axon" version = "7.5.1" edition.workspace = true rust-version.workspace = true authors.workspace = true description.workspace = true readme.workspace = true homepage.workspace = true repository.workspace = true license.workspace = true keywords.workspace = true categories.workspace = true publish = false default-run = "axon" exclude = ["/.github", "/docs", "/apps", "/tests/fixtures"] build = "build.rs" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] targets = ["x86_64-unknown-linux-gnu"] [[bin]] name = "axon" [dependencies] axon-core = { path = "crates/axon-core" } axon-services = { path = "crates/axon-services" } axon-mcp = { path = "crates/axon-mcp" } axon-web = { path = "crates/axon-web" } axon-cli = { path = "crates/axon-cli" } async-trait = "0.1" chrono = { version = "0.4", features = ["serde"] } reqwest = { version = "0.13", features = ["json", "rustls", "stream", "form"] } rustls = { version = "0.23", features = ["aws-lc-rs"], default-features = false } serde = { version = "1", features = ["derive"] } serde_json = "1" tempfile = "3" tokio = { version = "1", features = [ "macros", "rt-multi-thread", "fs", "io-util", "net", "process", "signal", "sync", "time", ] } uuid = { version = "1", features = ["v4", "v5", "serde"] } dotenvy = "0.15" [features] # Feature gates for optional heavy dependencies from the webclaw port. # All default OFF — enabling them is a build-time choice. # See docs/reference/cargo-features.md for full rationale and CI impact. default = [] test-helpers = [] live-qdrant = [] # QuickJS sandbox for window.__* JS blob extraction. Requires rquickjs. # Process-isolation wrapper required. See axon_rust-b6xi. quickjs = [] # Instagram/LinkedIn social verticals. Requires cloud antibot bypass. # Gate with AXON_ENABLE_SOCIAL_VERTICALS=1 env var at runtime. See axon_rust-2mrr. social-verticals = [] [profile.release] opt-level = 3 lto = "thin" codegen-units = 1 strip = true [profile.release-fast] inherits = "release" lto = false codegen-units = 16 # Deployment builds for the Bookworm Incus service. This keeps the binary # optimized enough for a runtime smoke/deploy artifact while minimizing cold # builder time: no LTO, shallow optimization, and maximal codegen parallelism. [profile.container-fast] inherits = "release" opt-level = 1 lto = false codegen-units = 256 strip = true [profile.dev] # CI recompiles from scratch on every job (CARGO_INCREMENTAL=0 is required # under the kache rustc-wrapper), and full DWARF is a large share of that # time — which the build then discards anyway via -C strip=debuginfo. # "line-tables-only" keeps file/line in panics and backtraces, which is what # CI logs are read for. Override with CARGO_PROFILE_DEV_DEBUG=full for a # debugger session. Matches labby, cortex, yarr and soma. # The per-package spider override below is unaffected: opt-level and debug are # independent knobs. debug = "line-tables-only" [profile.dev.package.spider] opt-level = 2 [dev-dependencies] axon-api = { path = "crates/axon-api" } axon-core = { path = "crates/axon-core", features = ["test-util"] } axon-llm = { path = "crates/axon-llm" } tokio = { version = "1", features = [ "macros", "rt-multi-thread", "fs", "io-util", "net", "process", "signal", "sync", "time", ] } # httpmock enables mock HTTP servers in unit tests, unlocking coverage for # tei_embed 413-retry logic, ensure_collection idempotency, and API clients # without requiring live services. httpmock = "0.8" serial_test = "3" proptest = "1" criterion = { version = "0.5", features = ["html_reports"] } [lints] workspace = true