| 1 |
[workspace] |
| 2 |
members = ["crates/audiofiles-core", "crates/audiofiles-browser", "crates/audiofiles-app", "crates/audiofiles-sync", "crates/audiofiles-rhai", "crates/audiofiles-bench"] |
| 3 |
default-members = ["crates/audiofiles-core", "crates/audiofiles-browser", "crates/audiofiles-app", "crates/audiofiles-sync", "crates/audiofiles-rhai"] |
| 4 |
resolver = "2" |
| 5 |
|
| 6 |
[workspace.package] |
| 7 |
edition = "2024" |
| 8 |
license = "LicenseRef-PolyForm-Noncommercial-1.0.0" |
| 9 |
|
| 10 |
[workspace.dependencies] |
| 11 |
audiofiles-core = { path = "crates/audiofiles-core" } |
| 12 |
audiofiles-browser = { path = "crates/audiofiles-browser" } |
| 13 |
audiofiles-sync = { path = "crates/audiofiles-sync" } |
| 14 |
audiofiles-rhai = { path = "crates/audiofiles-rhai" } |
| 15 |
# Exact patch rather than the minor, as the suite itself pins: a minor-only |
| 16 |
# requirement is satisfied by a lock holding an earlier patch, which then fails |
| 17 |
# to compile against an API added in a later one. The two move together -- |
| 18 |
# makeover-immediate re-exports nothing, so the `Column` the app describes and |
| 19 |
# the `Column` the renderer matches on have to be the same type. |
| 20 |
makeover-layout = "0.44" |
| 21 |
makeover-immediate = "0.46" |
| 22 |
# The time axis. Minor rather than exact patch: it re-exports nothing and no |
| 23 |
# type of its crosses a renderer boundary, so it is under the same rule as |
| 24 |
# makeover-geometry above rather than the layout/immediate pair below. |
| 25 |
makeover-timing = "0.1" |
| 26 |
# The described screens, which are audiofiles-browser's screens. By git URL with |
| 27 |
# a version requirement, per the tree's rule for cross-repo deps. They were |
| 28 |
# behind a `quasi` feature until 2026-08-25, when the last flip landed. |
| 29 |
quasi-router = { git = "https://makenot.work/git/max/quasi.git", version = "0.109" } |
| 30 |
quasi-immediate = { git = "https://makenot.work/git/max/quasi.git", version = "0.109" } |
| 31 |
quasi-declare = { git = "https://makenot.work/git/max/quasi.git", version = "0.1" } |
| 32 |
egui = { version = "0.35", default-features = false, features = ["default_fonts"] } |
| 33 |
egui_extras = { version = "0.35", default-features = false } |
| 34 |
eframe = { version = "0.35", default-features = false, features = ["default_fonts", "glow"] } |
| 35 |
cpal = "0.18" |
| 36 |
# Keep this in step with synckit, which puts `rusqlite::Connection` in its public |
| 37 |
# API: a version here that disagrees with synckit-client's co-links two |
| 38 |
# libsqlite3-sys and fails the build rather than merely warning. The whole tree |
| 39 |
# moved to 0.40 together on 2026-08-07 -- see wiki `sql-library-standard`. |
| 40 |
rusqlite = { version = "0.40", features = ["bundled", "functions"] } |
| 41 |
thiserror = "2.0.18" |
| 42 |
sha2 = "0.11.0" |
| 43 |
hex = "0.4.3" |
| 44 |
symphonia = { version = "0.6.0", default-features = false, features = ["wav", "aiff", "mp3", "flac", "ogg", "vorbis", "pcm", "aac", "alac", "isomp4", "caf"] } |
| 45 |
parking_lot = "0.12.5" |
| 46 |
dirs = "6.0.0" |
| 47 |
stratum-dsp = "=1.0.0" |
| 48 |
bs1770 = "=1.0.0" |
| 49 |
realfft = "3.5.0" |
| 50 |
toml = "1.1" |
| 51 |
rfd = "0.17" |
| 52 |
pollster = "1.0" |
| 53 |
serde = { version = "1.0.228", features = ["derive"] } |
| 54 |
serde_json = "1.0.149" |
| 55 |
rubato = "4.0" |
| 56 |
hound = "3.5" |
| 57 |
tracing = "0.1.44" |
| 58 |
tracing-subscriber = { version = "0.3.22", features = ["env-filter"] } |
| 59 |
rhai = { version = "1.21", features = ["sync"] } |
| 60 |
tray-icon = "0.24" |
| 61 |
tokio = { version = "1", features = ["rt-multi-thread", "macros", "time", "sync"] } |
| 62 |
uuid = { version = "1", features = ["v4"] } |
| 63 |
base64 = "0.22" |
| 64 |
chrono = "0.4" |
| 65 |
rand = "0.10" |
| 66 |
# rustls-no-provider: rustls TLS with the OS-native trust store (rustls-platform-verifier); |
| 67 |
# audiofiles-app installs the ring crypto provider once at startup. |
| 68 |
reqwest = { version = "0.13", default-features = false, features = ["json", "rustls-no-provider"] } |
| 69 |
rustls = { version = "0.23", default-features = false, features = ["std", "tls12", "logging", "ring"] } |
| 70 |
semver = "1" |
| 71 |
open = "5" |
| 72 |
rayon = "1.10" |
| 73 |
libc = "0.2" |
| 74 |
midir = "0.11" |
| 75 |
tagtree = { git = "https://makenot.work/git/max/makenotwork.git", version = "0.4" } |
| 76 |
makeover = "3.1" |
| 77 |
# The invariant half of the design system: relational spacing. makeover |
| 78 |
# resolves colour, which a theme may override; this carries what no theme may. |
| 79 |
makeover-geometry = "0.7" |
| 80 |
|
| 81 |
[workspace.lints.rust] |
| 82 |
unused = "warn" |
| 83 |
unreachable_pub = "warn" |
| 84 |
|
| 85 |
[workspace.lints.clippy] |
| 86 |
pedantic = { level = "warn", priority = -1 } |
| 87 |
# Allow-list tuned from a measured breakdown across server/multithreaded/pter |
| 88 |
# (2026-07-22). These are the high-churn / low-signal pedantic lints; everything |
| 89 |
# else in `pedantic` stays a warning. Keep this block identical across repos. |
| 90 |
module_name_repetitions = "allow" |
| 91 |
# Doc lints. No docs-completeness push is underway. |
| 92 |
missing_errors_doc = "allow" |
| 93 |
missing_panics_doc = "allow" |
| 94 |
doc_markdown = "allow" |
| 95 |
# Numeric casts. Endemic and mostly intentional in size and byte math. |
| 96 |
cast_possible_truncation = "allow" |
| 97 |
cast_sign_loss = "allow" |
| 98 |
cast_precision_loss = "allow" |
| 99 |
cast_possible_wrap = "allow" |
| 100 |
cast_lossless = "allow" |
| 101 |
# Subjective structure and style nags. High churn, low signal. |
| 102 |
must_use_candidate = "allow" |
| 103 |
too_many_lines = "allow" |
| 104 |
struct_excessive_bools = "allow" |
| 105 |
similar_names = "allow" |
| 106 |
items_after_statements = "allow" |
| 107 |
single_match_else = "allow" |
| 108 |
# Frequent false-positives in TUI and router-heavy code. |
| 109 |
match_same_arms = "allow" |
| 110 |
unnecessary_wraps = "allow" |
| 111 |
type_complexity = "allow" |
| 112 |
|