A local-first Cloudflare audit and developer-report app, built as a native Rust desktop application with GPUI.
Cedar turns Cloudflare inventory, usage, sync health, recent drift, observability coverage, and Workers cost projections into an operational view and a paste-ready Markdown report. Credentials and snapshots stay local.
- Rust 2024
- GPUI with
gpui-component - Embedded Geist and Geist Mono typography
- Tokio and Reqwest for Cloudflare API work
- SQLite for snapshots and preferences
- The operating-system keychain for the Cloudflare token
There is no browser runtime, WebView, JavaScript, React, Vite, or Tauri layer.
- Accounts, zones, Workers, Pages, D1, R2, and KV inventory
- Local account audits with actionable findings
- Snapshot comparison and recent-change reporting
- Markdown developer-report copy
- Workers, zone, D1, R2, and KV usage for
24h,7d, and30d - Audit Logs, Logpush, Workers Observability, and zone security signals when permitted
- Per-collector API diagnostics, latency, rate-limit headers, failures, and Ray IDs
- Analytics-derived Workers Paid cost projection
- Graceful partial results when Cloudflare scopes or plan access are limited
- Native GitHub release updates with SHA-256 verification and automatic rollback
Install the stable Rust toolchain, then:
cargo runThe first build compiles GPUI and its graphics stack, so it takes longer than later builds.
cargo fmt --check
cargo test --locked
cargo check --lockedBuild an optimized native executable:
cargo build --release --lockedOn Windows, the result is target/release/cedar.exe and has no WebView runtime dependency.
Build the complete Windows release artifact set locally:
powershell -ExecutionPolicy Bypass -File scripts/package-windows.ps1That command builds the optimized GPUI executable, creates a standalone .exe and a .zip,
generates SHA-256 checksums, verifies the archive, and launches the packaged native app for a short
startup smoke test. Artifacts are written to dist-release/windows/.
GitHub Actions builds native Windows x64 and universal macOS releases from v* tags. The pipeline
validates that the tag exactly matches the version in Cargo.toml, runs the Rust quality gates,
signs when configured, packages the app, verifies every checksum, and creates a draft GitHub
Release. Cedar's native updater consumes these existing release assets and checksum manifests
directly; there is no Tauri bundler, JavaScript build, WebView payload, or Enigma portable wrapper
in the release path.
Release assets:
Cedar.exeCedar_windows-x64.zipSHA256SUMS-windows.txtCedar_macos.dmgCedar_macos.app.zipSHA256SUMS-macos.txt
Releases also include byte-identical versioned Windows executable and macOS app-archive aliases so older Cedar updaters remain compatible. New versions consume the stable filenames above.
See RELEASING.md for the tag, signing, notarization, verification, and publishing checklist.
Cedar includes an offline visual-QA mode backed by deterministic fixture data and an in-memory database. Capture every major surface in dark and light themes at the minimum, standard, and wide window presets:
powershell -ExecutionPolicy Bypass -File scripts/visual-qa.ps1Run a focused capture while iterating:
powershell -ExecutionPolicy Bypass -File scripts/visual-qa.ps1 `
-Scenario shortcuts `
-Theme dark `
-Viewport minimum `
-SkipBuildCaptures and their SHA-256 manifest are written to artifacts/visual-qa/. The capture runner opens
and foregrounds each native window briefly so GPU-rendered GPUI content is captured accurately.
List or launch fixture states directly with:
target/release/cedar.exe --list-visual-qa
target/release/cedar.exe --visual-qa workers-inspector --theme light --viewport 1440x960Cedar preserves its existing local data contracts:
- Database: the platform local-data directory under
Cedar/cedar.sqlite3 - Keychain service:
cedar - Keychain entry:
cloudflare-api-token
Preferences that previously lived in browser local storage now live in the SQLite configuration table.
Verified update downloads and rollback diagnostics live under Cedar/updates in the same platform
local-data directory.
Cedar paginates Cloudflare REST collectors for accounts, Workers, D1, R2, KV, zones, Audit Logs, and Logpush jobs. Pages projects are fetched without explicit pagination options because Cloudflare may reject them for that endpoint. Zone GraphQL analytics run in batches across discovered zones.
Cedar uses current GraphQL datasets instead of the retired Zone Analytics REST endpoint. Security Events use firewallEventsAdaptiveGroups first and fall back to raw firewallEventsAdaptive rows when necessary.
| Mode | Scopes | Result |
|---|---|---|
| Minimal read-only | Account Settings Read, Account Analytics Read, Workers Scripts Read, Cloudflare Pages Read, Zone Read, Zone Analytics Read, Audit Logs Read, D1 Read, Workers R2 Storage Read, Workers KV Storage Read | Inventory, usage, zones, audit logs, and local cache |
| Full observability | Minimal scopes plus Logs Edit and Workers Observability Edit | Adds Logpush inventory, Workers Observability keys, destinations, and telemetry checks |
Cloudflare write-gates some read-like observability endpoints. Logpush inventory requires Logs Edit, and Workers Observability telemetry requires Workers Observability Edit.
src/main.rs GPUI application entry point
src/ui.rs Native window, state, and interface
src/backend.rs Cloudflare collectors, keychain, and SQLite
src/audit.rs Audit findings, snapshot diff, and report generation
src/updater.rs Native release discovery, verification, restart, and rollback
assets/ App icons and packaging assets
scripts/ Native packaging, signing, smoke-test, and visual-QA tooling
Cedar is a personal learning project. Issues and forks are welcome, but there are no support or roadmap promises.
- Cost is a Workers Paid projection, not invoice-grade billing.
- Cedar does not call Cloudflare's gated billing usage APIs.
- Advanced collectors degrade gracefully when the token, plan, or account cannot access a dataset.
- GPUI is still pre-1.0, so framework API upgrades may require code changes.
MIT. See LICENSE.
Geist font files are distributed under the SIL Open Font License 1.1. See assets/fonts/OFL-Geist.txt.