Telemetry events

GraphDeck records a small, anonymous count of which tools get used, to guide development. It is disclosed (a first-run notice), opt-out (Settings → Privacy, or set the GRAPHDECK_TELEMETRY environment variable to off), and silent-fail, so it can never delay, block, or error the app.

Counts only, never content. No graph names, node names, file paths, prompt text, precise location, or any free-form string ever leaves your machine. There is no install id or identifier of any kind: telemetry is fully unattributed. On launch GraphDeck sends one aggregate rollup like { "ai_generate": 3, "library_save": 12 }, plus the app version and the OS family (win / mac / linux). That is the entire payload. Your graphs themselves never leave the machine.

When telemetry is off, nothing is tallied and nothing is sent. These are the only names that can ever be sent — anything not on this list is rejected before it can be counted.

EventWhat it counts
app_launchThe app was launched.
tier_freeThe launch was in the unactivated (free) state (one per launch).
tier_proThe launch was in the activated (Pro) state (one per launch).
update_downloadAn app update download was started.
update_installAn app update install was started.
pack_use_blueprintThe Blueprint pack was switched to.
pack_use_materialThe Materials pack was switched to.
pack_use_widgetThe Widget (UMG) pack was switched to.
pack_use_otherAnother pack was switched to (the pack name is never sent).
graph_newA new empty graph was started.
validate_runValidation was run on a graph.
validate_cleanA validation run found no issues.
validate_issuesA validation run found at least one issue.
validate_autofixValidation auto-fix was applied.
export_clip_blueprintA Blueprint graph was exported to the clipboard for UE.
export_clip_materialA Material graph was exported to the clipboard for UE.
export_clip_widgetA Widget graph was exported to the clipboard for UE.
export_clip_otherAnother pack’s graph was exported to the clipboard.
error_export_clipA clipboard export failed.
ue_connect_okThe UE connector reached a running editor (counted on connect, not per poll).
ue_connect_failThe connection to a UE editor was lost (counted on the drop, not per poll).
deploy_ue_okA one-click deploy to UE succeeded.
deploy_ue_failA one-click deploy to UE failed.
ue_ver_5_5A connected editor was UE 5.5.
ue_ver_5_6A connected editor was UE 5.6.
ue_ver_5_7A connected editor was UE 5.7.
ue_ver_otherA connected editor was another UE version.
library_saveA graph was saved to the library.
library_updateAn existing library entry was updated.
library_openA library entry was opened.
error_libraryA library save/update/open failed.
ai_generateAn AI generation round was run.
ai_explainAI explain was run.
ai_askAI ask was run.
error_aiAn AI request failed.
mcp_buildAn MCP build/add-to-graph call was handled.
mcp_validateAn MCP validate call was handled.
mcp_deployAn MCP deploy/import call was handled.
mcp_libraryAn MCP library call (list/search/get/open) was handled.
mcp_knowledgeAn MCP knowledge/spec/search call was handled.
mcp_boardAn MCP teaching-board call (board_*/read_board) was handled.
mcp_otherAnother MCP call was handled.
limit_libraryA Free-tier user hit a library gate (sort/folders/tags/location).
limit_otherA Free-tier user hit another Pro gate.
license_activate_okA license key was activated successfully.
license_activate_failA license key activation failed.
limit_slots_blueprintA blocking per-pack cap bump fired in the Blueprints pack.
limit_slots_materialA blocking per-pack cap bump fired in the Materials pack.
limit_slots_widgetA blocking per-pack cap bump fired in the UMG pack.
limit_slots_otherA blocking per-pack cap bump fired in another pack.
limit_slots_passiveA background save landed session-only at the cap (passive bump).
limit_externalA save outside the library folder was refused (external-file bump shown).
upgrade_click_slotsAn upgrade CTA was clicked from a slot-cap bump.
upgrade_click_dayAn upgrade CTA was clicked from the daily-limit bump.
upgrade_click_lifetimeAn upgrade CTA was clicked from the lifetime-limit bump.
upgrade_click_nudgeAn upgrade CTA was clicked from a conversion nudge.
upgrade_click_otherAn upgrade CTA was clicked from another bump context.
limit_day_hitThe daily new-graph limit bump was shown.
limit_lifetime_hitThe lifetime AI-build allowance bump was shown.
lifetime_50The 50% lifetime-allowance milestone popup was shown (once per install).
lifetime_90The 90% lifetime-allowance milestone popup was shown (once per install).
nudge_milestoneThe win-milestone nudge was shown (10th deploy or 5th lesson; once per install).
nudge_session_lossThe close prompt warned that a session-only graph will not be kept.
nudge_intensityThe heavy-usage-day nudge was shown (once per install).
ledger_file_questionedA questioned file was seen in the library folder at startup.
migrate_okThe userData rename-migration guard migrated an old "GraphDeck Free" dir successfully.
migrate_failThe userData rename-migration guard failed (both dirs left intact; alarm signal).
session_under_1mA session lasted under 1 minute.
session_1_5mA session lasted 1–5 minutes.
session_5_30mA session lasted 5–30 minutes.
session_30_120mA session lasted 30 minutes–2 hours.
session_over_2hA session lasted over 2 hours.
return_same_dayRe-opened the same day as the previous launch.
return_next_dayRe-opened the day after the previous launch.
return_2_7dRe-opened 2–7 days after the previous launch.
return_8_30dRe-opened 8–30 days after the previous launch.
return_over_30dRe-opened more than 30 days after the previous launch.

77 events. Generated from the app source, so this list cannot drift from what the app actually does.