1[package] 2name = "rust-third-party" 3version = "0.0.0" 4edition = "2024" 5publish = false 6 7[lib] 8path = "top/lib.rs" 9 10# reindeer reads this manifest to generate the Buck2 third-party graph. 11[dependencies] 12# bot.log rotation (apps/native): a dedicated pipe-reading thread owns the 13# file, so rotation can never race the C bot's own printf. 14file-rotate = "0.7" 15snes-core = { path = "jgenesis/backend/snes-core" } 16jgenesis-common = { path = "jgenesis/common/jgenesis-common" } 17snes-config = { path = "jgenesis/config/snes-config" } 18# SaveWriter's serialized methods are generic over bincode's traits, so an 19# implementor names them. Same major as jgenesis, so one copy in the graph. 20# 21# 2.0.1 is the last bincode that compiles. 3.0.0 on crates.io is a tombstone: 22# a README announcing the crate is unmaintained and a lib.rs that is one 23# `compile_error!` (downloaded and read 2026-09-20). Leaving bincode means 24# jgenesis leaving it first, since these are ITS trait bounds. 25bincode = "2" 26 27# The native window (and later the web page): one immediate-mode UI that 28# builds for both. wgpu rather than glow so the picture path is the same 29# API on desktop (Vulkan/GL) and in the browser (WebGPU/WebGL2). 30eframe = { version = "0.36", default-features = false, features = ["wgpu", "default_fonts", "wayland", "x11"] } 31egui = "0.36" 32# Audio out. `pulseaudio` is cpal's pure-Rust PulseAudio client, and cpal 33# prefers it over ALSA when it answers: WSLg's sound server IS PulseAudio 34# ($PULSE_SERVER), and nothing on this host routes ALSA into it. 35cpal = { version = "0.18", features = ["pulseaudio"] } 36# The emulator thread of control fills this and cpal's realtime callback 37# drains it; a callback must never block, so the queue is lock-free. This is 38# the crate cpal's own `feedback` example uses. 39ringbuf = "0.5" 40# `Color` is `repr(C)` and `Pod`, so a frame IS its RGBA bytes; this is how 41# that gets said without a copy. Already in the graph through jgenesis. 42bytemuck = "1" 43# The core's own CRC crate, for naming the cartridge a snapshot belongs to. 44crc = "3.4.0" 45# Server: the window, over HTTP, and `native mcp`, over stdio. Client: what 46# `native mcp` reaches the window with. reqwest comes in without a TLS stack, 47# which loopback does not need. 48rmcp = { version = "3.4.0", default-features = false, features = ["server", "client", "macros", "transport-streamable-http-server", "transport-streamable-http-client-reqwest", "transport-io"] } 49# `SessionStore` is an async trait in rmcp's terms. Already in the graph 50# through rmcp. 51async-trait = "0.1.92" 52tokio = { version = "1.53.1", features = ["rt", "net", "sync", "macros", "time", "io-util"] } 53axum = { version = "0.8.9", default-features = false, features = ["http1", "tokio"] } 54# Jev: ~/jevcrates, as the git submodule beside this file, pinned by its 55# gitlink. jev-http speaks HTTP/2 itself over rustls with the RustCrypto 56# provider - pure Rust, no C, no cmake, the same choice ~/dashboard's HTTPS 57# transport makes - and the compiled-in Mozilla roots, not /etc/ssl. 58# `packages/mcp` names rustls and the provider directly as well. 59jev-protocol = { path = "jevcrates/jev-protocol" } 60jev-client = { path = "jevcrates/jev-client" } 61jev-http = { path = "jevcrates/jev-http" } 62rustls = { version = "0.23", default-features = false, features = ["std", "tls12"] } 63rustls-rustcrypto = { git = "https://github.com/RustCrypto/rustls-rustcrypto", branch = "master" } 64 65serde = { version = "1.0.229", features = ["derive"] } 66serde_json = "1.0.151" 67schemars = "1.2.2" 68png = "0.18.1" 69# zstd over `packages/replay`'s XOR keyframe deltas. ruzstd is a pure-Rust 70# zstd (real zstd frames), so no C and no cmake, the same reasoning as the 71# TLS stack above. Its encoder implements only `Fastest` (about zstd level 72# 1), which is enough on deltas that are mostly zero. Already in the graph 73# through `object`, so this adds no crate. 74ruzstd = "0.8" 75base64 = "0.23.1" 76 77# Subsecond hot-patching (see research/subsecond-patch-build.md): `subsecond` 78# is what a patched-in-place binary links (call/try_call/apply_patch/ 79# aslr_reference); `subsecond-types` is the JumpTable the patch tool 80# serializes and the running binary deserializes. Pinned to the newest 0.7.x 81# (0.8 is alpha-only on crates.io as of 2026-09-20). 82subsecond = "0.7.10" 83subsecond-types = "0.7.10" 84# `tools/hotpatch` builds the stub object + jump table with these: `object` 85# for reading/writing ELF symbol tables (same crate dx itself uses, 86# packages/cli/Cargo.toml), `ar` for pulling `.o` members out of a `.rlib` 87# when a patch spans more than the tip crate, `libc` to reset SIGPIPE 88# (code-rust.md's CLI hygiene rule) - already in the graph transitively via 89# `subsecond`, named here directly so it gets a plain third-party alias. 90object = { version = "0.37", features = ["read", "write"] } 91ar = "0.9" 92libc = "0.2" 93 94# Path dependencies inside a workspace root become its members automatically, 95# which would make cargo resolve jgenesis's `workspace = true` keys against 96# THIS manifest. Excluding the trees leaves them under their own workspace roots. 97[workspace] 98exclude = ["jgenesis", "jevcrates"]