Examples use Dartastic Cloud (cloud.dartastic.io). Hosted plans substitute their own <subdomain>.dartastic.iosign in and this page fills in your exact URLs .

One Observatory, Two Ways to Run It

Dartastic Observatory is native OpenTelemetry observability for Dart and Flutter: dashboards, metrics, traces, and logs on proven open-source infrastructure, tuned for Flutter apps and Dart servers. It comes in two flavors, and every dashboard on this page ships pre-loaded in both:

  • Dartastic Cloud (the default) — the shared, metered, start-fast tier at cloud.dartastic.io. Subscribe, mint a token, send telemetry; usage is metered with one bill and prepaid packs. Plans & pricing.
  • Dartastic Hosted — a dedicated single-tenant stack behind <subdomain>.dartastic.io: the same dashboards plus your private Dartastic Pub and private Symbolizer, and your data never shares a machine with another customer. Three tiers: Dev ($199), Pro ($599), Enterprise ($1299) — compare on Pricing.

The end-to-end onboarding journey is covered in Getting started. Hosted stacks provision in 5–15 minutes; the Hosted tab flips from "brewing" to your live URLs, with copy buttons. Cloud access is immediate on the Cloud tab.

Hosted autoscale & bill cap

Hosted stacks vertical-resize during sustained traffic spikes (resize-up only, never down) so launches don't drop telemetry. It's on by default; switch it off — or set a monthly bill cap — on the Hosted tab if billing predictability matters more. A resize that would pass your cap sends an "upgrade?" email instead of resizing.

Enterprise ships with white-glove provisioning — a dedicated contact, custom dashboards on request, per-region deploy (NA / EU / APAC). Your stack is a person, not a ticket.

Send Telemetry to Your Observatory

Mint an Observatory OTLP token on the Tokens tab, then point any OpenTelemetry SDK or collector at your authenticated OTLP endpoint:

OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.cloud.dartastic.io:443
OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer <your Observatory OTLP token>"
# optional — http/protobuf is the default:
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf

The same endpoint works from the Dartastic SDK's endpoint: parameter, a collector, or any other OTLP-speaking service — your whole backend can report into the same Observatory as your Flutter apps. Include the :443; some OTLP clients guess the port wrong without it. Setup for the SDK itself is under OTel SDK.

Reading the Dashboards

Every pre-loaded dashboard follows the same conventions:

  • Pickers at the top. Service, Environment, and (on mobile dashboards) App Build filter everything below; they default to All. The build picker is how you compare releases — nearly every mobile panel can be split by app.build_id.
  • Short titles, rich tooltips. Panel titles stay short enough to survive narrow layouts; hover the on a panel for the full description of what it shows and the telemetry it reads.
  • Percentiles over averages. Latency panels show p50/p95/p99 — averages hide the users having a bad time.
  • Thresholds mean something. Green/amber/red bands follow the platform vitals thresholds (frozen frames, ANR rates, crash-free floors), not arbitrary cutoffs.
  • Drill down, don't squint. The ladder is fleet → dashboard → panel → traces: most panels link through to trace search filtered to the same service, build, and time range, so a spike is two clicks from the spans that caused it.

Mobile Performance Summary

The fleet home page — one screen that answers "how is the app doing in production right now?" Start here every morning; every other mobile dashboard is a drill-down from it.

Dartastic Observatory — Mobile Performance Summary: vitals scorecard, crashes and errors, adoption and user analytics for a Flutter fleet
Mobile Performance Summary

Sections

  • Vitals scorecard — the numbers app stores and leadership ask for: crash-free sessions %, ANR rate, cold and warm app-start p75, slow-frame and frozen-frame rates. Each gauge carries its platform threshold, so amber/red is meaningful, not decorative.
  • Frustration signals — taps that coincided with an error: a tap that raised an error during handling, or was followed by one within ~100 ms. It surfaces "users are hammering a broken button" long before reviews do, with the screens where it happens.
  • Crashes & errors — crash and error-session trends with the top exception types, linking into the Crashes dashboard for symbolized stacks.
  • Adoption & usage — sessions, distinct users, and version spread, so you can see a rollout take traffic while its vitals move (or don't).
  • Per-screen breakdowns — the same vitals cut by app.screen.name: which screens jank, which crash, which frustrate.

Telemetry it reads

KeyKindOn this dashboard
flutter.session.countDartasticSession outcomes: the crash-free numerator and denominator, totals, and sessions per build.
flutter.app.startup.duration_msDartasticCold-start p75 (filtered to app.start.type = cold).
flutter.frame.build_msDartasticFrame build-time p95.
flutter.navigation.duration_msDartasticMost-visited screens, from navigation counts per screen.
flutter.anr.events_totalDartasticTop screens by ANR events.
app.exit.countDartasticAbnormal-exit rate (reason != normal).
process.memory.usageOTelAverage resident memory.
service.nameOTelThe Service picker; on every query.
app.build_idOTelThe App Build picker and every per-release split.
app.screen.nameOTelPer-screen ANR and most-visited breakdowns.
session.statusDartasticstarted | ok | errored | crashed | abnormal — the outcome filters.
app.start.typeDartasticcold | warm | hot | prewarmed — the cold-start filter.
app.exit.reasonDartasticExit reason: normal | memory_pressure | anr | oom | watchdog | bad_access | cpu_limit.

Crashes — Symbolized, Next to the Exception

Everything about crashes and unhandled errors, with the Symbolizer's deobfuscated stack sitting directly beside the raw one — no separate crash portal, no copy-pasting stacks into a decoder.

Dartastic Observatory — Crashes overview: crash counts, crash-free sessions trend and top exception types
Crash counts & crash-free trend

Sections

  • Crash counts & crash-free trend — crashes and crash-free sessions % over time. The crash-free line is the release gate: it should recover to baseline within hours of a rollout, and this panel is where you watch it do so.
  • Trends by build — the same series split by app.build_id, so a regression shows up as one build's line peeling away from the pack.
  • Top crash groups — a table grouped by exception type: count, trend, affected builds and devices. Sort by count for triage, by "first seen in build" for release-blame.
  • Device & platform split — crashes by device.model.identifier and OS: the panel that separates "our bug" from "that one Android vendor's bug."
  • Crash detail — click through to the error span: the standard exception.type / exception.message / exception.stacktrace, with dartastic.exception.stacktrace.symbolized right next to it holding readable Dart frames.
Dartastic Observatory — crash trends split by app build, one line per release
Trends by build — a bad release peels away from the pack
Dartastic Observatory — crash detail with the symbolized stack trace attribute beside the obfuscated one
Symbolized stack, beside the raw exception

Telemetry it reads

KeyKindOn this dashboard
traces_spanmetrics_calls_totalDerivedCrash counts from error spans, generated at ingest from your traces.
status_codeDerivedFilters the derived counts to error-status spans.
flutter.session.countDartasticCrash-free % and crashed-sessions-by-build trends.
session.statusDartasticcrashed | abnormal vs all outcomes in the crash-free math.
service.nameOTelService picker, trace filters, and the app identity on the symbolizer link.
app.build_idOTelBuild picker, per-build splits, affected-build counts, and the symbolizer link version.
device.model.identifierOTelAffected-device counts and the Device column.
dartastic.exception.typeDartasticDistinct-exception-type counts (crash-metric dimension).
exception.typeOTelException column and crash-group key.
exception.messageOTelMessage column and crash-group key.
exception.stacktraceOTelThe raw (often obfuscated) stack; input to the symbolizer.
dartastic.symbolize.statusDartasticSymbolized? column: ok | symbols_not_published | error.
dartastic.exception.stacktrace.symbolizedDartasticThe readable, deobfuscated stack shown beside the raw one.

Flutter App Health

The deep-dive on how the app feels: frames, jank and its attribution, ANRs, memory, user-experience vitals, network flakiness, and device state. Where the Performance Summary says "frames regressed," App Health says which screen, which widget, on which devices, and why.

Dartastic Observatory — Flutter App Health scorecard: frame health, jank, ANR and memory at a glance
Flutter App Health

Sections

  • Frame health — build and raster time percentiles against the vsync budget, the severity mix (mild · slow · severe · frozen), and vsync-overrun depth (dartastic.frame.overrun): not just how many frames missed, but by how much.
  • Worst screens & jank attribution — screens ranked by jank, and for armed devices the Pro engine's attribution: the widgets and functions actually on the UI thread during janky frames (dartastic.jank.attribution.*, with symbols_resolved marking deobfuscated samples). This is the panel that turns "the app stutters" into a file and line.
  • ANR — App-Not-Responding events by severity (info · mild · severe) and by screen, from the engine's watchdog. Severe ANRs are what app stores punish; the info-tier ones are your early warning.
  • Memory — Dart heap used vs capacity, native (non-Dart) heap allocation, and OS memory-pressure events (Android onTrimMemory levels, iOS warnings). Climbing native heap with stable Dart heap is the classic plugin-leak signature, and it's visible here.
  • User-experience vitals — web-vitals-style measures for Flutter: first and largest content paint, interaction latency, time to first byte on app-critical requests.
  • Network flakiness, power & thermal — the share of HTTP spans tagged flaky (with reasons: timeouts, resets, DNS), battery drain, and thermal state. When frames regress only on hot or low-battery devices, this row says so.
Dartastic Observatory — worst screens by jank with per-widget attribution
Worst screens & jank attribution
Dartastic Observatory — ANR events by severity and vsync overrun panels
ANR & vsync overrun
Dartastic Observatory — user experience vitals: paint, interaction and first-byte latency
User-experience vitals
Dartastic Observatory — network flakiness, battery and thermal state panels
Flakiness, power & thermal

Telemetry it reads

KeyKindOn this dashboard
flutter.frame.build_msDartasticBuild-phase p50/p95/p99; total-frame denominator.
flutter.frame.raster_msDartasticRaster-phase p50/p95/p99.
flutter.frame.dropped_totalDartasticFrozen/severe frame rates and the worst-screens table.
flutter.frame.jank_ratioDartasticRolling jank % scorecard and build-vs-fleet comparison.
flutter.vsync.deadline_miss_max_nsDartasticWorst vsync deadline miss in the window.
flutter.vsync.deadline_miss_countDartasticLate frames per window.
traces_spanmetrics_calls_totalDerivedAttributed-frame counts and symbolized-attribution rate, from jank-attribution spans.
traces_spanmetrics_latencyDerivedFrame-overrun quantiles for attributed frames.
dartastic.jank.attribution.symbols_resolvedDartasticMarks attributions with resolved symbols; filters the suspects tables.
dartastic.jank.attribution.app_frame.functionDartasticThe app function blamed for a janky frame — the top-suspects column.
dartastic.frame.overrunDartasticSeconds past the frame deadline; sorts the jank suspects.
flutter.anr.events_totalDartasticANR events by severity and by screen.
flutter.anr.duration_msDartasticHang-duration percentiles.
app.hang.duration_msDartasticApp hang time from iOS MetricKit.
process.runtime.dart.heap.used_bytesDartasticDart heap used.
process.runtime.dart.heap.capacity_bytesDartasticDart heap capacity line.
process.runtime.dart.gc.collectionsDartasticGC collections per minute.
process.runtime.dart.gc.duration_msDartasticGC pause p95 by GC generation.
process.runtime.dart.isolates_countDartasticLive isolate count.
process.runtime.dart.native_heap.allocated_bytesDartasticNative (non-Dart) heap — the plugin-leak signature line.
process.memory.usageOTelResident memory (RSS).
memory_pressure.eventDartasticOS memory-pressure events by source and level.
memory_pressure.levelDartasticAndroid onTrimMemory level over time.
flutter.session.countDartasticCrash-free % and version adoption context.
flutter.session.duration_msDartasticSession length by version.
flutter.app.startup.duration_msDartasticTTID cold/warm/hot quantiles and the startup mix.
flutter.navigation.duration_msDartasticNavigation p95 by route.
flutter.experience.fcp_msDartasticFirst Contentful Paint p75.
flutter.experience.lcp_msDartasticLargest Contentful Paint p75 and the widget-attribution leaderboard.
flutter.experience.inp_msDartasticInteraction to Next Paint p75.
flutter.experience.ttfb_msDartasticTime to First Byte p75.
app.exit.countDartasticANR exit rate and exit reasons by source.
network.bytesDartasticTransfer by connection type and direction (MetricKit).
http.client.request.durationOTelFlaky-request rate and latency split flaky vs not.
device.battery.stateDartasticBattery-state distribution.
device.battery.low_power_modeDartasticLow-power-mode adoption by platform.
device.thermal_state.eventDartasticThermal-state distribution by state and platform.
service.nameOTelService picker; on every query.
app.build_idOTelBuild picker and per-version splits.
app.screen.nameOTelRoute picker, by-route splits, and the worst-screens join.
app.widget.nameOTelThe LCP widget-attribution leaderboard.
span_nameDerivedPins the derived series to jank-attribution frames.
flutter.frame.severityDartasticFrame buckets mild | slow | severe | frozen.
flutter.anr.severityDartasticANR buckets info | mild | severe.
session.statusDartasticCrash-free and adoption outcome filters.
app.start.typeDartasticcold | warm | hot | prewarmed startup split.
app.exit.reasonDartasticExit-reason filters (anr, oom, …).
dartastic.sourceDartasticMetric provenance: android | metrickit.
process.runtime.dart.gc.typeDartasticGC generation split (young | old).
dartastic.memory_pressure.levelDartasticMemory-pressure level split (onTrimMemory levels).
os.typeOTelBy-platform splits on vitals, battery, and thermal panels (resource attribute).
dartastic.battery.stateDartasticBattery-state split.
dartastic.thermal.stateDartasticThermal-state split.
network.connection.typeOTelNetwork-transfer split (wifi | cell, …).
network.io.directionOTelNetwork-transfer split (transmit | receive).
dartastic.network.flakyDartasticMarks requests made under a flaky network.
dartastic.network.flaky.reasonDartasticWhy the network was judged flaky (p99_latency, connectivity_changes, …).

Mobile Release Health

The rollout dashboard: is the build you shipped yesterday better or worse than the one before it? Everything is split by app.build_id and read as a delta against the previous release.

Dartastic Observatory — Mobile Release Health: adoption, crash-free by build and session outcomes per release
Mobile Release Health

Sections

  • Adoption — each build's share of sessions over time: the S-curve of a rollout, and the tail of stragglers on old versions.
  • Crash-free by build — crash-free sessions % per build side by side. The question this dashboard exists to answer, answered first.
  • Session outcomes — the full session taxonomy (started · ok · errored · crashed · abnormal) per build. "Abnormal" (the OS killed us: OOM, watchdog) rising without "crashed" rising is invisible in crash reporters — and plainly visible here.
  • Exit reasonsapp.exit.count by reason (normal · memory_pressure · anr · oom · watchdog · bad_access · cpu_limit) per build: why sessions ended abnormally.
  • Vitals delta & network — app start, frame severities, and network flakiness as new-build-vs-baseline comparisons. Flakiness is normally a small single-digit percentage; a release that doubles it shipped a networking bug.

Telemetry it reads

KeyKindOn this dashboard
flutter.session.countDartasticCrash-free %, session outcomes, adoption curves, release tables, and the "build adopted" annotation.
app.exit.countDartasticANR/OOM stats and exits-by-reason per build.
app.exit.trace.availableDartasticExits that have a stack trace available.
app.exit.memory.pssDartasticMedian memory footprint at exit (Android).
flutter.app.startup.duration_msDartasticCold TTID p95, this build vs baseline.
flutter.experience.fcp_msDartasticFirst Contentful Paint p75 and trend.
flutter.experience.lcp_msDartasticLargest Contentful Paint p75 and trend.
flutter.experience.inp_msDartasticInteraction to Next Paint p75 and trend.
flutter.experience.ttfb_msDartasticTime to First Byte p75.
http.client.request.durationOTelFlaky-request rate and the flaky-reason breakdown.
memory_pressure.eventDartasticMemory-pressure events (24 h).
memory_pressure.levelDartasticPressure level over time by platform.
device.battery.levelDartasticMedian battery level.
device.battery.stateDartasticBattery-state distribution over time.
device.battery.low_power_modeDartasticLow-power-mode share.
device.thermal_stateDartasticiOS thermal state over time; devices at serious/critical.
device.thermal_state.eventDartasticThermal events (24 h).
service.nameOTelService picker; on every query.
app.build_idOTelThe build under review AND the baseline build — every panel keys on it.
os.typeOTelPlatform picker and iOS-only filters.
service.instance.idOTelCounts distinct devices reporting hot thermal states.
session.statusDartasticstarted | ok | errored | crashed | abnormal outcome taxonomy.
app.exit.reasonDartasticExit-reason filters and splits (anr, oom, …).
app.start.typeDartasticCold-start filter for the TTID comparison.
dartastic.network.flakyDartasticFlaky-request filter.
dartastic.network.flaky.reasonDartasticFlaky-reason pie and per-minute series.
process.memory.usageOTelPicker source only (build and platform value lists).
traces_spanmetrics_calls_totalDerivedPicker source only (service value list).

Dart Server (Linux)

The flagship server dashboard for Dart backends — Serverpod, shelf, gRPC, anything — in Docker on Linux. Three altitudes on one page: the service's traffic, the Dart VM inside it, and the host and container underneath, so "the API is slow" can be answered without changing dashboards.

Dartastic Observatory — Dart Server Linux dashboard: request rate, errors and latency, Dart VM runtime, host and container panes
Dart Server (Linux)

Sections

  • Requests, errors, duration — the classic RED row from the standard http.server.request.duration histogram: request rate, error rate, and p50/p95/p99 latency, by route. This is the row you alert on.
  • Dart VM runtime — the pane no generic APM has: event-loop lag (how late timers fire — the single best "is this isolate healthy" signal), Dart heap used vs capacity, GC pause time and frequency, and isolate count. Rising lag with flat CPU means the event loop is blocked, not the machine.
  • Host — CPU, load, memory, filesystem, and network for the box, from the standard system.* metrics.
  • Container — cgroup view: container CPU throttling and memory against limits. Throttling with idle host CPU means your limits are wrong, not your code — a five-second diagnosis on this row.
Dartastic Observatory — Dart VM runtime pane: event-loop lag, isolates, GC pause and heap used vs capacity
Dart VM Runtime
Dartastic Observatory — host and container pane: CPU, memory, filesystem, network and cgroup throttling
Host & Container

Telemetry it reads

Server-side families come from the dartastic_opentelemetry_dart_metrics package (setup).

KeyKindOn this dashboard
http.server.request.durationOTelThe whole RED row: rate, 5xx %, p50/p95/p99, slowest and busiest routes.
http.server.active_requestsOTelIn-flight requests.
dartastic.event_loop.lagDartasticEvent-loop lag p50/p99 (seconds on the wire, shown as ms).
process.runtime.dart.heap.used_bytesDartasticDart heap used line.
process.runtime.dart.heap.capacity_bytesDartasticDart heap capacity line.
process.runtime.dart.gc.collectionsDartasticGC collections per minute by generation.
process.runtime.dart.gc.duration_msDartasticGC pause p95 (old-gen stat; per-type series).
process.runtime.dart.isolates_countDartasticLive isolates.
system.cpu.timeOTelCPU busy gauge, core count, CPU by mode.
system.cpu.load_average.1mOTelPer-core load gauge.
system.filesystem.usageOTelDisk used % on the data mount.
system.network.connectionsOTelEstablished TCP connections.
container.memory.usageOTelContainer memory vs limit.
container.memory.limitDartasticThe cgroup memory-limit line.
container.cpu.throttled.countDartasticCPU throttle events per minute — the "limits are wrong" panel.
process.memory.usageOTelProcess RSS in the memory-vs-limit panel.
process.uptimeOTelProcess uptime stat.
process.open_file_descriptorsDartasticOpen FDs line.
process.open_file_descriptors.limitDartasticFD limit line.
process.threadsDartasticThread count.
process.memory.faultsDartasticMajor page faults per minute.
service.nameOTelService picker; on every query.
http.routeOTelPer-route splits in rate and latency panels.
http.response.status_codeOTelThe 5xx error-rate filter.
process.runtime.dart.gc.typeDartasticGC generation split (young | old).
cpu.modeOTelCPU time split by mode (user | system | idle | iowait | steal).
system.filesystem.stateOTelFilesystem used/free split.
network.connection.stateOTelTCP connection states (registry vocabulary).
mountDartasticFilesystem mount filter.
cpuDartasticCore identity — derives the core count for load normalization.
system.paging.fault.typeOTelPage-fault type filter (major | minor).

Service Overview

Every service reporting to your Observatory on one screen — backends, workers, and apps side by side, ranked so regressions float to the top.

Dartastic Observatory — Service Overview: per-service rate, errors and latency with regression-sorted deltas
Service Overview

Sections

  • Fleet RED table — one row per service.name: rate, errors, latency percentiles, sorted by change against the previous window rather than absolute value, so the service that just got slower outranks the one that's always been busy.
  • Errors by service — who is failing, trending, with click-through to that service's traces.
  • Top endpoints — the busiest and slowest operations across the fleet, from span-derived metrics.

Telemetry it reads

KeyKindOn this dashboard
http.server.request.durationOTelEverything RED: totals, 5xx rates, quantiles, per-service/route rate, latency heatmap, status mix.
traces_spanmetrics_calls_totalDerivedThe operations-regression table: per-operation volume, delta vs the prior window.
span_nameDerivedOperation identity in the regression table.
service.nameOTelPer-service splits, the picker, and the error-trace drill-down filter.
http.routeOTelPer-route request-rate split.
http.response.status_codeOTel5xx filters and the status-code mix.

Server Health

The infrastructure counterpart to Service Overview: every host, USE-style — utilization, saturation, errors — for capacity planning and "is it the machine?" triage.

Dartastic Observatory — Server Health: CPU, load, memory, disk and network per host
Server Health

Sections

  • CPU & load — utilization and load average per host; sustained load above core count is the saturation signal.
  • Memory — used vs available with swap activity: the difference between "using RAM as cache" (fine) and "about to OOM" (not).
  • Disk — I/O throughput and space trends, so full disks are a forecast, not a page at 3 a.m.
  • Network — throughput and error/drop counts per interface.

Telemetry it reads

From dartastic_opentelemetry_dart_metrics or any OTel host-metrics collector.

KeyKindOn this dashboard
system.cpu.load_average.1mOTel1-minute load series; the service picker source.
system.cpu.timeOTelvCPU saturation, iowait rate, per-CPU heatmap.
system.filesystem.usageOTelRoot-filesystem used/total gauge.
system.network.connectionsOTelTCP socket states over time.
container.memory.usageOTelContainer memory-headroom numerator.
container.memory.limitDartasticMemory-headroom denominator.
container.cpu.throttled.countDartasticContainer CPU throttling rate.
process.cpu.timeOTelProcess CPU (user + system).
process.uptimeOTelUptime table.
process.open_file_descriptorsDartasticFD-headroom numerator.
process.open_file_descriptors.limitDartasticFD-headroom denominator.
process.memory.faultsDartasticMajor page-fault rate.
service.nameOTelHost/service picker; on every query.
cpuDartasticPer-CPU grouping in the saturation heatmap.
cpu.modeOTelCPU iowait/idle split.
system.filesystem.stateOTelFilesystem used/free split.
network.connection.stateOTelTCP connection states (registry vocabulary).
mountDartasticRoot-filesystem filter.
system.paging.fault.typeOTelPage-fault type filter (major | minor).

Pro at a Glance

One panel per Pro-engine capability — ANR watchdog, jank attribution, network flakiness, memory pressure, adaptive backpressure, symbolized crashes — each linking to the dashboard that goes deep. It doubles as a coverage check: a Pro feature showing "No data" here means that capability isn't reaching your Observatory (see the engine toggles).

Dartastic Observatory — Pro at a Glance: one panel per Pro engine capability with links to the deep-dive dashboards
Pro at a Glance

Telemetry it reads

KeyKindOn this dashboard
flutter.session.countDartasticCrash-free % and crash count with prior-24 h deltas.
flutter.anr.events_totalDartasticSevere ANR events (24 h) and delta.
app.exit.countDartasticOS-driven app exits (24 h) and delta.
flutter.app.startup.duration_msDartasticCold-startup p95.
flutter.frame.jank_ratioDartasticRolling jank ratio.
flutter.vsync.deadline_miss_max_nsDartasticWorst vsync deadline miss.
process.runtime.dart.native_heap.allocated_bytesDartasticNative-heap gauge (Pro engine capability check).
flutter.experience.fcp_msDartasticFCP p75.
flutter.experience.lcp_msDartasticLCP p75.
flutter.experience.inp_msDartasticINP p75.
flutter.experience.ttfb_msDartasticTTFB p75.
memory_pressure.eventDartasticOS memory-pressure events (24 h).
device.battery.low_power_modeDartasticLow-power-mode session share.
device.thermal_stateDartasticiOS devices at thermal state serious or worse.
http.client.request.durationOTelFlaky network request rate.
system.cpu.load_average.1mOTelBox load average.
process.memory.usageOTelLiveness checks for the box services; build-picker source.
traces_spanmetrics_calls_totalDerivedPicker source only (service value list).
dartastic_ai_gateway_queries_totalDartasticAI query volume and refused-% guardrail (Prometheus-native, scraped from the AI gateway).
dartastic_ai_gateway_cost_micros_totalDartasticEstimated AI cost and top single-customer cost.
dartastic_ai_gateway_budget_spend_microsDartasticAI budget-used numerator.
dartastic_ai_gateway_budget_microsDartasticThe configured daily AI budget cap.
service.nameOTelService picker and liveness selectors.
app.build_idOTelBuild picker.
session.statusDartasticCrash-free outcome filters.
flutter.anr.severityDartasticANR severity filter.
app.start.typeDartasticCold-start filter.
os.typeOTeliOS filter on the thermal panel.
service.instance.idOTelDistinct-device count on the thermal panel.
dartastic.network.flakyDartasticFlaky-request filter.
outcomeDartasticAI-query result filter (the refused-% guardrail).
customer_idDartasticTop single-customer AI cost split.

The Semantics Behind the Panels

Dartastic is standards-first, and the tables above reflect three deliberate tiers. Where an OpenTelemetry semantic convention exists, the SDK emits it as-is (service.name, http.server.request.duration, system.*). Namespaces that Dart and Flutter need but the registry doesn't define yet — flutter.*, process.runtime.dart.*, session and app-exit families — are deliberately not vendor-prefixed: they are the names we're proposing through the OpenTelemetry SIG process, so standardizing them won't be a breaking rename. Signals that are genuinely Dartastic — jank attribution, network-flakiness verdicts, symbolized stacks — carry the dartastic. prefix. Every key each dashboard reads is listed in its own Telemetry it reads table above — dashboards and SDK share one published catalog, so those tables are what's on the wire, useful for building your own panels and alerts too.

Units follow OpenTelemetry conventions (durations in seconds on the wire where the convention says so — dashboards convert to ms where that reads better; mobile-native histograms carry their unit in the name, like _ms). Legacy key spellings from earlier SDKs are dual-emitted during migration windows, so old data keeps rendering.

Looking for setup instead? Tokens, pubspec, SDK initialization, and environment variables live on the main Help & Setup page. Stuck? Support answers.