Skip to content
Everframe Docs
Documentation

Configuration

Configure reporting in start(). Nothing is fetched from the dashboard.

Updated

ef = CreateObject("roSGNode", "Everframe:Everframe")
ef.callFunc("start", { sdkKey: "evf_live_…", maxBreadcrumbs: 30, releaseHealthLaunch: ReadAsciiFile("tmp:/everframe-health-launch.json") })
KeyDefaultMeaning
sdkKeyrequiredThe SDK key of your Roku integration. start() returns false without it
endpointhttps://everframe.devIngest host. For self-testing only
enabledtruefalse turns the SDK off — see below
releaseHealthLaunchunsetPass ReadAsciiFile("tmp:/everframe-health-launch.json") from channel code after the Main bridge; required to monitor this launch
releaseHealthtrueMonitor release launches on Roku OS 13.0+ with the updated Main bridge; false clears health state and queued health observations
debugBuilddetectedOverride development-build detection; development builds are excluded from release health
maxBreadcrumbs50Breadcrumb ring size. An integer, clamped to 1–50; other values are ignored

The app name, version and build on a report come from your channel’s manifest (title, major_version / minor_version / build_version). There is nothing to pass for them.

Dashboard settings do not apply

The Roku SDK does not fetch server config. The capture settings other SDKs read from the dashboard — session replay, vitals, network bodies, the breadcrumb kinds filter, two-way replies — have no effect on a Roku channel, and the integration’s overview in the dashboard does not show them.

Turning it off

ef.callFunc("start", { sdkKey: "evf_live_…", enabled: false })

enabled: false is remembered on the device. Queued reports, the stored exit record, release-health observations, the persisted breadcrumbs and the current screen are discarded, the reporter stops, and instrumented code records nothing. It stays off across launches until a later start() without enabled: false.

It also works on an SDK that is already running — call it when a viewer withdraws consent.

The manual API

After start(), the node is m.global.everframe from any scope. Before start() it is invalid, so guard calls made from component init():

ef = m.global.everframe
if ef <> invalid then ef.callFunc("setScreen", "Details")
CallWhat it does
captureException(e)Reports a caught exception without ending the channel — see Crash reporting
addBreadcrumb({ kind, level, message, data })Adds a breadcrumb — see Breadcrumbs
setUser({ id, email, displayName })Attaches a user to later reports — see User identity
setScreen(name) / getScreen(invalid)Sets or reads the current screen — see Screen tracking

Every call swallows its own errors and returns false on failure. The SDK never throws into your channel.

Registry use

Roku gives a channel about 16 KB of registry, and the SDK keeps its state there, in the section Everframe_<channel ID>:

  • up to 4 queued reports of at most 2000 characters each
  • the latest 20 breadcrumbs, at most 2000 characters
  • the current screen, at most 128 characters

Release health separately reserves up to 2048 UTF-8 bytes, including keys, for at most 6 observations, plus up to 768 bytes for the active launch pointer and small bookkeeping markers (less than 3 KiB in total).

Previous breadcrumbs, pending exits, versions and report rate-limit state also use the shared registry. Report limits count characters, which can take more than one UTF-8 byte. Leave room for your own registry data accordingly. The section name includes the channel ID (roAppInfo.GetID(), dev when sideloaded) because Roku shares the registry between channels signed with the same developer key.

A report that does not fit in 2000 characters is trimmed to fit — oldest breadcrumbs first, then outer stack frames, then long text fields. Its fingerprint is computed before trimming, so trimming never changes which group a report lands in.