Thanks for taking the time to improve Faro.
Faro is a Rust terminal app that captures browser debugging data into SQLite and exposes it through a TUI, CLI, SQL, and MCP. Contributions are welcome, especially around performance, browser capture reliability, agent workflows, documentation, and terminal UI polish.
Prerequisites:
- Rust stable with edition 2024 support.
- A Chromium-family browser for manual capture testing.
curlfor replay features.- Optional:
nvim,code --wait,zed --wait, or another$EDITORfor editor handoff workflows.
Clone and run checks:
git clone https://github.com/nullslate/faro.git
cd faro
cargo fmt --check
cargo test
cargo clippy --all-targets --all-features -- -D warnings
rg -n "\.ok\(\)|\.unwrap\(\)|\.expect\(" cratesRun locally:
cargo run -- http://localhost:5173
cargo run -- capture http://localhost:5173 --for 10s --json
cargo run -- --db /tmp/faro.db mcp- Keep changes focused and explain the user-visible behavior.
- Add tests for new behavior and regressions.
- Preserve existing style and architecture. Prefer extending current modules over creating parallel paths.
- Avoid
.unwrap(),.expect(), and.ok()incrates. - Do not include captured private data, auth headers, cookies, or real production payloads in fixtures, screenshots, or issues.
- Run
cargo fmt,cargo test, and clippy before opening a PR.
Faro can ingest large request streams, so performance changes should include a note about impact. The opt-in harnesses are:
scripts/perf-smoke.sh
cargo test large_session -- --ignored --nocapture
cargo test render_perf -- --ignored --nocaptureTreat harness numbers as regression signals, not portable benchmarks.
Faro captures data that can include credentials, cookies, localStorage, request bodies, and response bodies. Please be careful with logs and examples. Report security issues privately using the process in SECURITY.md.
This project follows the Contributor Covenant Code of Conduct.