The desktop app
The desktop app is the same engine behind a window — the same crates, the same scope guard, the same evidence model as the CLI. Every CLI capability has a view; this is the map.
Layout
The left nav is grouped by the stage of the work:
- Overview — Dashboard, Setup (project, scope, identities, attached headers, programme, session renewal).
- Traffic — History, Repeater, WebSocket, Match & Replace, Decoder.
- Discovery — Crawler, Site map, Fingerprint, Attack surface, Secrets, Externals, Vulnerable libs, Discover, Import API, Identifiers, Toolkit, Mobile, Desktop.
- Testing — Scan, Custom Checks, Fuzzer, Race, Sequencer, DOM XSS, Authorization, Access Control, LLM, Collaborator, Header OOB, XXE, Upload, GraphQL.
- Results — Findings, Report, Snapshots, Programme, Licence.
Things worth knowing
- Access Control (Testing) is the GUI for the whole-app
authz-sweep— open a project, declare two identities, set a budget, and run the sweep; leads come back with repro steps. It's Pro. - Pro gating is visible before you click. A gated view (active scan, the offense probes, the premium modules) reads the licence, disables its send control on Free, and shows a "needs the Pro tier" callout — so you never press a button that only errors.
- The Decoder sends nothing — it's there so you never paste a live token into an online tool.
- Credential values never reach the frontend. The typed IPC edge carries a credential's kind but has no field that could carry its value, so a token can't reach a devtools console or a screenshot by accident.
- Stop is honest. The active scan's Stop button promises exactly what it can — no further request is sent; a request already on the wire completes, because nothing can recall one.
- Version negotiation. The interface and engine agree a contract version on start; if they disagree the app says so rather than risk decoding a request under the wrong contract.
Running it
Installed builds launch from your applications menu / Start menu. From source:
pnpm -C frontend build
cargo build --release -p nullhawk-desktop --features custom-protocol
# then run target/release/nullhawk-desktop
A debug build loads the dev server (
pnpm -C frontend dev), not the bundled frontend — running a debug build without the dev server showsERR_CONNECTION_REFUSED. Release builds with--features custom-protocolbundle the UI and need no dev server.