Spoor is a family of Rust crates for low-overhead instrumentation, semantic tracing, counters, memory observation, and downstream projection into existing profiling and visualization tools.
The workspace currently contains:
spoor_core: foundational ids, descriptors, context, levels, and emission primitivesspoor: a thin facade overspoor_corespoor_runtime: bounded in-process collection and snapshot extractionspoor_memory: scratch and cache helpers layered over core countersspoor_session: transport-neutral snapshot envelopes for downstream consumersspoor_session_wtransport: local attach path for discovery and snapshot fetch over WebTransportspoor_fanout: backend composition for feeding multiple sinks at oncespoor_tracing: atracingsubscriber layer that forwards spans and events into Spoorspoor_benchmarks: top-level benchmark wind tunnel for substrate overheadexamples/basic: a top-level example crate to avoid spreading dev dependencies through core packages
Spoor is intended to be usable from outside this repo in two directions:
- instrument your own application with
spoor,spoor_runtime, and related helper crates - build a separate consumer or UI that attaches to a running Spoor session
Start here:
The current local attach workflow is:
- your process installs
spoor_runtime - your process serves sessions through
spoor_session_wtransport - a consumer connects to the fixed local server and discovers active sessions
The examples show that flow directly:
cargo run -p basic --bin session_wtransportfor a one-process serve/discover/fetch round tripcargo run -p basic --bin session_servercargo run -p basic --bin session_consumer
The session examples include direct Spoor instrumentation plus tracing
spans/events bridged through spoor_tracing. For a compact Chrome Trace JSON
view of just the tracing bridge:
cargo run -p basic --bin tracing_demo > /tmp/spoor-tracing.json