content: [workspace]
  resolver = "2"
  members = [
  	"apps/app",
  	"apps/app-playground",
  	"apps/daedalus_client",
  	"apps/labrinth",
  	"packages/app-lib",
  	"packages/ariadne",
  	"packages/daedalus",
  	"packages/path-util",
  ]
  
  [workspace.package]
  edition = "2024"
  
  [workspace.dependencies]
  actix-cors = "0.7.1"
  actix-files = "0.6.6"
  actix-http = "3.11.0"
  actix-multipart = "0.7.2"
  actix-rt = "2.10.0"
  actix-web = "4.11.0"
  actix-web-prom = "0.10.0"
  actix-ws = "0.3.0"
  argon2 = { version = "0.5.3", features = ["std"] }
  ariadne = { path = "packages/ariadne" }
  async_zip = "0.0.17"
  async-compression = { version = "0.4.27", default-features = false }
  async-recursion = "1.1.1"
  async-stripe = { version = "0.41.0", default-features = false, features = [
  	"runtime-tokio-hyper-rustls",
  ] }
  async-trait = "0.1.88"
  async-tungstenite = { version = "0.30.0", default-features = false, features = ["futures-03-sink"] }
  async-walkdir = "2.1.0"
  base64 = "0.22.1"
  bitflags = "2.9.1"
  bytemuck = "1.23.1"
  bytes = "1.10.1"
  typed-path = "0.11.0"
  censor = "0.3.0"
  chardetng = "0.1.17"
  chrono = "0.4.41"
  cidre = { version = "0.11.2", default-features = false, features = ["macos_15_0"] }
  clap = "4.5.43"
  clickhouse = "0.13.3"
  color-thief = "0.2.2"
  console-subscriber = "0.4.1"
  daedalus = { path = "packages/daedalus" }
  path-util = { path = "packages/path-util" }
  dashmap = "6.1.0"
  data-url = "0.3.1"
  deadpool-redis = "0.22.0"
  derive_more = "2.0.1"
  dirs = "6.0.0"
  discord-rich-presence = "0.2.5"
  dotenv-build = "0.1.1"
  dotenvy = "0.15.7"
  dunce = "1.0.5"
  either = "1.15.0"
  encoding_rs = "0.8.35"
  enumset = "1.1.7"
  flate2 = "1.1.2"
  fs4 = { version = "0.13.1", default-features = false }
  futures = { version = "0.3.31", default-features = false }
  futures-util = "0.3.31"
  heck = "0.5.0"
  hex = "0.4.3"
  hickory-resolver = "0.25.2"
  hmac = "0.12.1"
  hyper = "1.6.0"
  tracing-ecs = "0.5.0"
  hyper-rustls = { version = "0.27.7", default-features = false, features = [
  	"http1",
  	"native-tokio",
  	"ring",
  	"tls12",
  ] }
  hyper-util = "0.1.16"
  iana-time-zone = "0.1.63"
  image = { version = "0.25.6", default-features = false, features = ["rayon"] }
  indexmap = "2.10.0"
  indicatif = "0.18.0"
  itertools = "0.14.0"
  jemalloc_pprof = "0.8.1"
  json-patch = { version = "4.0.0", default-features = false }
  lettre = { version = "0.11.18", default-features = false, features = [
  	"builder",
  	"hostname",
  	"pool",
  	"ring",
  	"rustls",
  	"rustls-native-certs",
  	"tokio1-rustls",
  	"smtp-transport",
  	"tokio1",
  ] }
  maxminddb = "0.26.0"
  meilisearch-sdk = { version = "0.29.1", default-features = false }
  murmur2 = "0.1.0"
  native-dialog = "0.9.0"
  notify = { version = "8.2.0", default-features = false }
  notify-debouncer-mini = { version = "0.7.0", default-features = false }
  p256 = "0.13.2"
  paste = "1.0.15"
  phf = { version = "0.12.1", features = ["macros"] }
  png = "0.17.16"
  prometheus = "0.14.0"
  quartz_nbt = "0.2.9"
  quick-xml = "0.38.1"
  rand = "=0.8.5" # Locked on 0.8 until argon2 and p256 update to 0.9
  rand_chacha = "=0.3.1" # Locked on 0.3 until we can update rand to 0.9
  redis = "0.32.4"
  regex = "1.11.1"
  reqwest = { version = "0.12.22", default-features = false }
  rgb = "0.8.52"
  rust_decimal = { version = "1.37.2", features = ["serde-with-float", "serde-with-str"] }
  rust_iso3166 = "0.1.14"
  rust-s3 = { version = "0.35.1", default-features = false, features = [
  	"fail-on-err",
  	"tags",
  	"tokio-rustls-tls",
  ] }
  rusty-money = "0.4.1"
  sentry = { version = "0.42.0", default-features = false, features = [
  	"backtrace",
  	"contexts",
  	"debug-images",
  	"panic",
  	"reqwest",
  	"rustls",
  ] }
  sentry-actix = "0.42.0"
  const_format = "0.2.34"
  serde = "1.0.219"
  serde_bytes = "0.11.17"
  serde_cbor = "0.11.2"
  serde_ini = "0.2.0"
  serde_json = "1.0.142"
  serde_with = "3.14.0"
  serde-xml-rs = "0.8.1" # Also an XML (de)serializer, consider dropping yaserde in favor of this
  sha1 = "0.10.6"
  sha1_smol = { version = "1.0.1", features = ["std"] }
  sha2 = "0.10.9"
  spdx = "0.10.9"
  sqlx = { version = "0.8.6", default-features = false }
  sysinfo = { version = "0.36.1", default-features = false }
  tar = "0.4.44"
  tauri = "2.7.0"
  tauri-build = "2.3.1"
  tauri-plugin-deep-link = "2.4.1"
  tauri-plugin-dialog = "2.3.2"
  tauri-plugin-http = "2.5.1"
  tauri-plugin-opener = "2.4.0"
  tauri-plugin-os = "2.3.0"
  tauri-plugin-single-instance = "2.3.2"
  tauri-plugin-updater = { version = "2.9.0", default-features = false, features = [
  	"rustls-tls",
  	"zip",
  ] }
  tauri-plugin-window-state = "2.4.0"
  tempfile = "3.20.0"
  theseus = { path = "packages/app-lib" }
  thiserror = "2.0.12"
  tikv-jemalloc-ctl = "0.6.0"
  tikv-jemallocator = "0.6.0"
  tokio = "1.47.1"
  tokio-stream = "0.1.17"
  tokio-util = "0.7.16"
  totp-rs = "5.7.0"
  tracing = "0.1.41"
  tracing-actix-web = { version = "0.7.19", default-features = false }
  tracing-error = "0.2.1"
  tracing-subscriber = "0.3.19"
  eyre = "0.6.12"
  color-eyre = "0.6.5"
  url = "2.5.4"
  urlencoding = "2.1.3"
  uuid = "1.17.0"
  validator = "0.20.0"
  webp = { version = "0.3.0", default-features = false }
  whoami = "1.6.0"
  windows = "0.61.3"
  windows-core = "0.61.2"
  webview2-com = "0.38.0" # Should be updated in lockstep with wry
  winreg = "0.55.0"
  woothee = "0.13.0"
  yaserde = "0.12.0"
  zbus = "5.9.0"
  zip = { version = "4.3.0", default-features = false, features = [
  	"bzip2",
  	"deflate",
  	"deflate64",
  	"zstd",
  ] }
  zxcvbn = "3.1.0"
  
  [workspace.lints.clippy]
  bool_to_int_with_if = "warn"
  borrow_as_ptr = "warn"
  cfg_not_test = "warn"
  clear_with_drain = "warn"
  cloned_instead_of_copied = "warn"
  collection_is_never_read = "warn"
  dbg_macro = "warn"
  default_trait_access = "warn"
  explicit_iter_loop = "warn"
  filter_map_next = "warn"
  flat_map_option = "warn"
  format_push_string = "warn"
  get_unwrap = "warn"
  large_include_file = "warn"
  large_stack_arrays = "warn"
  manual_assert = "warn"
  manual_instant_elapsed = "warn"
  manual_is_variant_and = "warn"
  manual_let_else = "warn"
  map_unwrap_or = "warn"
  match_bool = "warn"
  needless_collect = "warn"
  negative_feature_names = "warn"
  non_std_lazy_statics = "warn"
  pathbuf_init_then_push = "warn"
  read_zero_byte_vec = "warn"
  redundant_clone = "warn"
  redundant_feature_names = "warn"
  redundant_type_annotations = "warn"
  todo = "warn"
  unnested_or_patterns = "warn"
  wildcard_dependencies = "warn"
  
  # Optimize for speed and reduce size on release builds
  [profile.release]
  opt-level = "s"   # Optimize for binary size
  strip = true      # Remove debug symbols
  lto = true        # Enables link to optimizations
  panic = "abort"   # Strip expensive panic clean-up logic
  codegen-units = 1 # Compile crates one after another so the compiler can optimize better
  
  # Specific profile for labrinth production builds
  [profile.release-labrinth]
  inherits = "release"
  panic = "unwind"     # Don't exit the whole app on panic in production
  
  [profile.dev.package.sqlx-macros]
  opt-level = 3
  