Radial app
Usage data
Radial keeps anonymous usage stats so we can see where the app works and where it fails people. This page is the complete schema: every event the app can send, every property attached to it, and nothing else. If it isn't listed here, the app doesn't send it.
The rules
- Event names only, never content. No code, file names, project names, prompts, URLs, or anything from a client site.
- An installation, not a person. Events carry a random install ID (a UUID minted on your machine). There is no account, and we don't tie the ID to one.
- Auditable locally. Every event the app sends is also appended to
telemetry-log.jsonlin the app's data folder, so you can read the exact payloads yourself. - One switch ends it. Settings → Privacy → Share anonymous usage stats. Off means the app sends nothing, and no event records that you turned it off.
Events
| Event | When it fires | Extra properties |
|---|---|---|
app_opened | The app launches. | pro (true/false, whether a Pro license is active) |
project_created | A new project is created from a template. | template (the built-in template's id) |
project_opened | A project opens successfully. | none |
agent_session_started | The first agent message in a project, once per project per app run. Prompt volume is not recorded. | provider (claude, codex, or cursor) |
launch_check_run | The pre-launch checklist scans a project. | issue_count (number of warnings plus failures) |
site_published | A publish or deploy succeeds. | mode (preview, pr, direct, or deploy) |
review_shared | A client review link is created. | pro (whether a Pro license was active) |
handoff_created | A teammate handoff link is created. The link's contents are encrypted on your machine and never readable by Radial. | none |
handoff_accepted | A handoff link is accepted and the project set up. | none |
editor_grant_created | An editor link is created. Nothing from the repo travels with the event. | mode (direct or approval, whether publishes need the owner's approval) |
editor_join_accepted | An editor link is accepted. | none |
editor_pr_merged | An owner approves an editor's edits. | none |
license_activated | A Pro license key activates. | none |
upgrade_cta_clicked | An upgrade button in the app opens the pricing page. | source (which screen the button was on: cap or promo) |
adjust_applied | A batch of style tweaks from the adjust steppers is handed to the agent. | tweaks (how many properties changed in the batch; never which ones, their values, or the element) |
adjust_undo | An adjust batch is reverted from the undo chip. | none |
app_error | The app itself hits an unexpected error, once per distinct error per run. | surface (main, renderer, or preview), error_name (the error's type, like TypeError), where (a file and line inside Radial's own code, like renderer.js:1234). Error messages are never sent—they can contain file paths. The full details stay on your machine in error-log.jsonl. |
Every event also carries the app version, the macOS version, the random install ID, and a timestamp. That's the whole payload.
One addition outside the app: Radial's publish service (the piece that moves an editor link's clones and publishes) keeps aggregate counters of its own: a link was created, a publish happened, a publish request was opened, a link was turned off. Each carries the repo name only, never file contents.
Where it goes
Events are processed for us by PostHog and are used only to improve Radial. They are never sold or shared for anyone else's purposes. Dev builds and test runs send nothing.
Turning it off
Settings → Privacy → Share anonymous usage stats → Off. The switch is immediate and persistent. The privacy policy and Trust & Security pages hold this in writing.