# Chanora — top-level Cargo workspace. # # Layout authority: DEC-022 in # docs/governance/product-decision-register.md, which adopts the # README's sketch as canonical: # # apps/chanora_flutter/ — Flutter application (separate toolchain) # core/chanora_core/ — top-level Rust API + orchestration # crates/chanora_protocol/ — tsclientlib isolation # crates/chanora_resolver/ — TeamSpeak address resolution # crates/chanora_state/ — snapshot, deltas, reducers # crates/chanora_audio/ — capture, DSP, Opus, jitter, mixer # crates/chanora_cache/ — avatar/icon blob cache (cacache-backed) # crates/chanora_storage/ — bookmarks, settings, identity refs # crates/chanora_diagnostics/ — logs, redaction, export # crates/chanora_prefetch — server-resolution prefetch cache/policy # crates/chanora_bridge/ — Flutter/Rust typed DTOs + glue # # The Flutter app is not part of this Cargo workspace; it is owned by # Gradle / Xcode / Flutter tooling under apps/chanora_flutter/. # # Proof-of-concept spikes are archived separately in the private # chanoraapp/chanora-poc repository. Promotion of PoC findings into # product code happens crate-by-crate with explicit audit-trail commits. [workspace] resolver = "2" members = [ "core/chanora_core", "crates/chanora_protocol", "crates/chanora_state", "crates/chanora_audio", "crates/chanora_storage", "crates/chanora_cache", "crates/chanora_diagnostics", "crates/chanora_prefetch", "crates/chanora_bridge", "crates/chanora_resolver", ] exclude = [ "apps/chanora_flutter", "tools/protocol-probe", "tools/audio-test", ] [workspace.package] version = "0.2.0-beta.1" edition = "2021" rust-version = "1.95" authors = ["The Chanora Project Contributors"] license = "MIT OR Apache-2.0" # DEC-020 repository = "https://github.com/anomalyco/opencode" publish = false # not on crates.io readme = "README.md" # Shared dependency pinnings. Members refer to these via # `package.dependencies..workspace = true` so versions stay aligned. [workspace.dependencies] thiserror = "2" tracing = "0.1" serde = { version = "1", features = ["derive"] } # DEC-032 exit step: override the `cmake` crate with the fork carrying # cmake-rs PR #257 (https://github.com/rust-lang/cmake-rs/pull/257). # The patch forwards `ANDROID_ABI` and `ANDROID_PLATFORM` environment # variables (set per-invocation by cargo-ndk >= 4.x and reinforced by # our SDD-118 item 5 cleanEnv map) to the child `cmake` invocation as # `-D` variables, so audiopus_sys's libopus CMake build picks up the # correct per-ABI target on multi-ABI Android builds. Without it the # child cmake falls through to the NDK toolchain file's default and # armeabi-v7a / x86_64 fail to compile. # # Pinned by exact commit SHA (the `android-build` branch tip on # pr2502/cmake-rs as of 2026-05-18) so the patch is reproducible. # Re-evaluate and remove once PR #257 merges and a fresh `cmake` # release lands on crates.io (current upstream is 0.7.2). # Patch tsproto-types to left-pad P-256 coordinates that are shorter than # 32 bytes. BigInt::to_bytes_be() strips leading zero bytes; when a # coordinate happens to start with 0x00 (~0.8 % probability per coordinate) # the upstream code rejects it with WrongPublicKeyLength, breaking the # init-server handshake. The fix zero-pads to the field size instead. # Fork: https://github.com/EdisonJwa/tsclientlib/tree/fix/p256-short-coordinate-pad [patch."https://github.com/ReSpeak/tsclientlib.git"] tsproto-types = { git = "https://github.com/EdisonJwa/tsclientlib.git", branch = "fix/p256-short-coordinate-pad" } [patch.crates-io] cmake = { git = "https://github.com/pr2502/cmake-rs", rev = "bdad5edc569d82151922c5c6c4685b1563f12aa1" } # Apple-only DWARF emission for archive validation lives in the iOS and # macOS chanora_bridge podspecs (apps/chanora_flutter/{ios,macos}/ # chanora_bridge.podspec) as per-build environment overrides: # # CARGO_PROFILE_RELEASE_DEBUG=true # CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO=off # CARGO_PROFILE_RELEASE_STRIP=false # # This keeps Android, Linux, and Windows release binaries on the cargo # default release profile (no DWARF, no extra ~10MB symbol payload). # Apple builds need the DWARF so dsymutil can emit a usable # chanora_bridge.framework.dSYM that the archive validator accepts.