[workspace]
resolver = "3"
members = ["bobbin/crates/*", "crates/*", "shuttle", "knot2/crates/*", "knotmirror/crates/*"]
default-members = ["bobbin/crates/*", "crates/*", "knot2/crates/*", "knotmirror/crates/*"]
exclude = ["sites"]
[workspace.package]
version = "0.0.1"
edition = "2024"
rust-version = "1.96"
license = "MIT"
authors = [
"Lewis <lewis@tangled.org>",
"Seongmin Lee <git@boltless.me>",
"oppiliappan <me@oppi.li>",
"Anirudh Oppiliappan <anirudh@tangled.org>",
"eti <eti@eti.tf>",
"dawn <dawn@tangled.org>",
]
[workspace.lints.rust]
unsafe_code = "forbid"
unused_must_use = "deny"
[workspace.lints.clippy]
dbg_macro = "warn"
disallowed_methods = "deny"
todo = "warn"
print_stdout = "deny"
print_stderr = "warn"
[workspace.dependencies]
knot-capability = { path = "crates/knot-capability" }
lexicons = { path = "crates/lexicons" }
tangled-axum = { path = "crates/tangled-axum" }
trusted-proxies = { path = "crates/trusted-proxies" }
gix-rebase = { path = "crates/gix-rebase" }
gix-receive-pack = { path = "crates/gix-receive-pack" }
bobbin-types = { path = "bobbin/crates/types" }
bobbin-codesearch = { path = "bobbin/crates/codesearch" }
bobbin-edge-index = { path = "bobbin/crates/edge-index" }
bobbin-ingest = { path = "bobbin/crates/ingest" }
bobbin-resolver = { path = "bobbin/crates/resolver" }
bobbin-slingshot-client = { path = "bobbin/crates/slingshot-client" }
bobbin-record-lru = { path = "bobbin/crates/record-lru" }
bobbin-knot-proxy = { path = "bobbin/crates/knot-proxy" }
bobbin-languages = { path = "bobbin/crates/languages" }
bobbin-runtime = { path = "bobbin/crates/runtime" }
bobbin-search = { path = "bobbin/crates/search" }
bobbin-query = { path = "bobbin/crates/query" }
bobbin-sim = { path = "bobbin/crates/bobbin-sim" }
bobbin-xrpc = { path = "bobbin/crates/xrpc" }
knot-fixtures = { path = "knot2/crates/knot-fixtures" }
knot-lexicons = { path = "knot2/crates/knot-lexicons" }
knot-types = { path = "knot2/crates/knot-types" }
knot-storage = { path = "knot2/crates/knot-storage" }
knot-resource = { path = "knot2/crates/knot-resource" }
knot-config = { path = "knot2/crates/knot-config" }
knot-runtime = { path = "knot2/crates/knot-runtime" }
knot-git = { path = "knot2/crates/knot-git" }
knot-langs = { path = "knot2/crates/knot-langs" }
knot-lfs = { path = "knot2/crates/knot-lfs" }
knot-workflow = { path = "knot2/crates/knot-workflow" }
knot-pack = { path = "knot2/crates/knot-pack" }
knot-cob = { path = "knot2/crates/knot-cob" }
knot-cobs = { path = "knot2/crates/knot-cobs" }
knot-index = { path = "knot2/crates/knot-index" }
knot-keyfill = { path = "knot2/crates/knot-keyfill" }
knot-cache = { path = "knot2/crates/knot-cache" }
knot-acl = { path = "knot2/crates/knot-acl" }
knot-atproto = { path = "knot2/crates/knot-atproto" }
knot-record = { path = "knot2/crates/knot-record" }
knot-messages = { path = "knot2/crates/knot-messages" }
knot-postreceive = { path = "knot2/crates/knot-postreceive" }
knot-receive = { path = "knot2/crates/knot-receive" }
knot-ssh = { path = "knot2/crates/knot-ssh" }
knot-secrets = { path = "knot2/crates/knot-secrets" }
knot-events = { path = "knot2/crates/knot-events" }
knot-xrpc = { path = "knot2/crates/knot-xrpc" }
knot-bench = { path = "knot2/crates/knot-bench" }
knot-maintenance = { path = "knot2/crates/knot-maintenance" }
knot-sim = { path = "knot2/crates/knot-sim" }
knot-edge = { path = "knot2/crates/knot-edge" }
knotmirror-db = { path = "knotmirror/crates/knotmirror-db" }
knotmirror-git = { path = "knotmirror/crates/knotmirror-git" }
knotmirror-index = { path = "knotmirror/crates/knotmirror-index" }
knotmirror-ingest = { path = "knotmirror/crates/knotmirror-ingest" }
knotmirror-maintenance = { path = "knotmirror/crates/knotmirror-maintenance" }
knotmirror-sync = { path = "knotmirror/crates/knotmirror-sync" }
knotmirror-types = { path = "knotmirror/crates/knotmirror-types" }
knotmirror-xrpc = { path = "knotmirror/crates/knotmirror-xrpc" }
sqlx = { version = "0.9", default-features = false, features = ["runtime-tokio", "tls-rustls-aws-lc-rs", "postgres", "chrono", "macros", "migrate"] }
jacquard-api = "0.12.1"
jacquard-axum = "0.12.1"
jacquard-common = "0.12.1"
jacquard-derive = "0.12.1"
jacquard-lexicon = { version = "0.12.1", default-features = false }
jacquard-identity = { version = "0.12.1", features = ["cache"] }
jacquard-repo = "0.12.1"
gix = { version = "0.84", features = ["parallel", "revision", "blob-diff", "blame", "merge", "worktree-archive", "tree-editor", "sha1", "sha256"] }
gix-pack = { version = "0.71", default-features = false, features = ["generate", "streaming-input", "sha1", "sha256"] }
gix-odb = "0.81"
gix-packetline = { version = "0.21", features = ["blocking-io"] }
gix-transport = { version = "0.57", default-features = false }
gix-protocol = { version = "0.62", default-features = false, features = ["blocking-client"] }
gix-archive = "0.33"
gix-hash = { version = "0.25", features = ["sha1", "sha256"] }
gix-actor = "0.41"
gix-diff = "0.64"
gix-features = "0.48"
gix-merge = "0.17"
gix-negotiate = "0.32"
gix-object = "0.61"
gix-ref = "0.64"
# `AsyncWriteExt` for the raw writer `gix-transport` hands back from `RequestWriter::into_parts()`.
futures-lite = "2"
flate2 = "1"
memmap2 = "0.9"
anyhow = "1"
miette = "7"
walkdir = "2"
tokio = { version = "1.52", features = ["macros", "rt-multi-thread", "time", "signal", "io-util", "net", "sync"] }
tokio-util = { version = "0.7", features = ["rt"] }
backon = { version = "1.6", default-features = false, features = ["std", "tokio-sleep"] }
tokio-stream = "0.1"
tokio-tungstenite = { version = "0.29", features = ["rustls-tls-native-roots"] }
futures = "0.3"
either = "1"
async-trait = "0.1"
itertools = "0.14"
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1", features = ["raw_value"] }
serde_ipld_dagcbor = "0.6"
ipld-core = { version = "0.4", features = ["serde"] }
serde_bytes = "0.11"
tar = "0.4"
object_store = { version = "0.12", features = ["aws"] }
serde_norway = "0.9"
chrono = { version = "0.4", features = ["serde"] }
cid = "0.11"
url = { version = "2", features = ["serde"] }
uuid = { version = "1", features = ["v5"] }
bytes = "1"
iroh-car = "0.5"
scc = "3"
roaring = "0.11"
lasso = { version = "0.7", features = ["multi-threaded"] }
quick_cache = "0.6"
moka = { version = "0.12", features = ["sync", "future"] }
getrandom = "0.4"
ahash = { version = "0.8", default-features = false, features = ["std"] }
arc-swap = "1"
reqwest = { version = "0.13", default-features = false, features = ["rustls", "http2", "json", "gzip", "stream"] }
axum = { version = "0.8", features = ["macros"] }
hyper = { version = "1", features = ["server", "http1", "http2"] }
hyper-util = { version = "0.1", features = ["server", "server-auto", "tokio", "service"] }
tower = { version = "0.5", features = ["util", "limit", "load-shed"] }
tower-http = { version = "0.7", default-features = false }
tower_governor = { version = "0.8", default-features = false, features = ["axum"] }
governor = "0.10"
http = "1"
http-body = "1"
httpdate = "1"
ipnet = "2.10"
rustls = { version = "0.23", features = ["aws_lc_rs", "prefer-post-quantum"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["aws_lc_rs", "tls12", "logging"] }
rustls-pemfile = "2"
rustls-native-certs = "0.8"
rustls-acme = { version = "0.15.3", default-features = false, features = ["aws-lc-rs", "tls12", "webpki-roots"] }
x509-parser = "0.18"
quinn = { version = "0.11.9", default-features = false, features = ["runtime-tokio", "rustls-aws-lc-rs", "log"] }
h3 = "0.0.8"
h3-quinn = "0.0.10"
rcgen = { version = "0.14", default-features = false, features = ["aws_lc_rs", "pem"] }
hickory-resolver = "0.24"
k256 = { version = "0.13", features = ["ecdsa"] }
aes-gcm = "0.11.0-rc.4"
hkdf = "0.13"
sha2 = "0.11"
zstd = "0.13"
dasl-star = { git = "https://tangled.org/ptr.pet/hydrant", rev = "f27b93e1f55b8af5e8a3363ede19f35bd34c7510" }
base32 = "0.5"
base64 = "0.22"
bs58 = "0.5"
zeroize = { version = "1", features = ["derive"] }
subtle = "2.6"
deadpool-redis = "0.23"
wiremock = "0.6"
tempfile = "3"
proptest = "1"
divan = "0.1.21"
tantivy = "0.26"
tantivy-fst = "0.5"
levenshtein_automata = "0.2"
nom = "7"
parking_lot = "0.12"
gengo-language = "0.14"
regex = "1"
globset = "0.4"
rustix = { version = "1.1", features = ["process"] }
tikv-jemallocator = "0.7"
tikv-jemalloc-ctl = "0.7"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] }
metrics = "0.24"
metrics-exporter-prometheus = { version = "0.18", default-features = false }
opentelemetry = { version = "0.33", default-features = false, features = ["logs", "metrics"] }
opentelemetry_sdk = { version = "0.33", default-features = false, features = ["logs", "metrics"] }
opentelemetry-otlp = { version = "0.33", default-features = false, features = ["http-proto", "reqwest-blocking-client", "logs", "metrics"] }
opentelemetry-appender-tracing = { version = "0.33", default-features = false, features = ["experimental_span_attributes"] }
thiserror = "2"
unicode-segmentation = "1"
confique = { version = "0.4", default-features = false, features = ["toml"] }
clap = { version = "4", features = ["derive", "env"] }
toml = { version = "0.9", default-features = false, features = ["parse"] }
[patch.crates-io]
gix-chunk = { path = "crates/gix-chunk" }
gix-commitgraph = { path = "crates/gix-commitgraph" }
gix-imara-diff = { path = "knot2/third_party/gix-imara-diff" }
gix-pack = { path = "knot2/third_party/gix-pack" }
jacquard = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-api = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-axum = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-common = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-derive = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-identity = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-lexicon = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
jacquard-oauth = { git = "https://tangled.org/oppi.li/jacquard", rev = "bb32de36f1cc2727954fba6377e0433c391d34f3" }
[profile.dev]
opt-level = 1
[profile.release]
lto = "fat"
strip = true
codegen-units = 1
[profile.bench]
debug = 1
strip = false
[profile.profiling]
inherits = "release"
debug = 1
strip = false
lto = "thin"
# dev deploys: quicker to build, not tuned like release
[profile.dev-deploy]
inherits = "release"
opt-level = 1
lto = "thin"
codegen-units = 16
# search is the hot path, so tantivy keeps real optimisation
[profile.dev-deploy.package.ownedbytes]
opt-level = 2
[profile.dev-deploy.package.tantivy]
opt-level = 2
[profile.dev-deploy.package.tantivy-bitpacker]
opt-level = 2
[profile.dev-deploy.package.tantivy-columnar]
opt-level = 2
[profile.dev-deploy.package.tantivy-common]
opt-level = 2
[profile.dev-deploy.package.tantivy-fst]
opt-level = 2
[profile.dev-deploy.package.tantivy-query-grammar]
opt-level = 2
[profile.dev-deploy.package.tantivy-sstable]
opt-level = 2
[profile.dev-deploy.package.tantivy-stacker]
opt-level = 2
[profile.dev-deploy.package.tantivy-tokenizer-api]
opt-level = 2