Skip to content
Everframe Docs
Documentation

Install

Two dependencies, one start call. Covers phones, tablets, Android TV and Fire TV.

Updated

Add the dependencies

In your app module’s build.gradle.kts (Kotlin DSL, the default for new Android Studio projects):

// app/build.gradle.kts
dependencies {
    val everframeVersion = "1.2.1"
    implementation("dev.everframe:core:$everframeVersion")
    implementation("dev.everframe:reporter-ui:$everframeVersion")
    implementation("dev.everframe:media3:$everframeVersion") // optional — Session Vitals playback tracking
}

Or, in a Groovy build.gradle:

// app/build.gradle
dependencies {
    def everframeVersion = '1.2.1'
    implementation "dev.everframe:core:$everframeVersion"
    implementation "dev.everframe:reporter-ui:$everframeVersion"
    implementation "dev.everframe:media3:$everframeVersion" // optional — Session Vitals playback tracking
}

1.2.0 is the newest release on Maven Central as of October 2026; use the newest one listed under dev.everframe. If your project keeps versions in gradle/libs.versions.toml, add the three libraries there instead.

All three resolve from Maven Central (mavenCentral(), already in a new project’s settings.gradle.kts). core and reporter-ui are required; media3 is optional. core alone compiles, and then throws the moment the reporter opens: Everframe.report.open() resolves through a resolver that reporter-ui installs via an androidx.startup Initializer, and without it you get IllegalStateException("Reporter UI module not on classpath. Add dev.everframe:reporter-ui dependency."). A snippet listing only core ships a crash.

Internet permission

The SDK sends reports over the network, so the app needs android.permission.INTERNET, and a new Android Studio project does not declare it. The SDK declares it in core’s own manifest, and Gradle merges it into your app, so there is nothing to add; a line you already have is harmless. The SDK needs no other permission.

Start it

Once, as early as you can — Application.onCreate():

import android.app.Application
import dev.everframe.Everframe
import dev.everframe.config.EverframeConfig

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Everframe.start(this, EverframeConfig(appId = "<App ID>", sdkKey = "evf_live_…"))
    }
}

Register the class in AndroidManifest.xml with <application android:name=".MyApp" …>, or onCreate() never runs.

Android takes both an appId and an sdkKey, and the config class is in dev.everframe.config — not alongside the Everframe object. Copy both values from the app’s Setup tab in the dashboard:

FieldValue
sdkKeyThe SDK key, evf_live_…. It identifies your app when reports are sent.
appIdThe App ID, a UUID, shown on the Setup tab. It is the same value symbol uploads take (--app-id, EVERFRAME_APP_ID). The SDK only checks that it is not blank.

start() throws EverframeConfigError if either is blank — the one exception start() lets out, so let it escape rather than catching it.

Pass the current Activity as the optional third argument if you start from somewhere other than Application — the SDK hooks each Activity’s window as it is created, so without it the Activity already on screen never records tap breadcrumbs.

Open the reporter

The SDK draws no trigger of its own — wire it to your own button or debug menu. report.open() is a suspend function that returns when the user submits or cancels:

lifecycleScope.launch {
    val result = Everframe.report.open()
}

Everframe.report.openAsync(callback) is the callback form. The bubble config flag is only a hint your own code can read — see Configuration.

Requirements

minSdk24
Kotlin2.0+ — the SDK is built with Kotlin 2.1
UIJetpack Compose and classic Views both supported
TVAndroid TV and Fire TV. There is no on-device reporter on a TV. On Android TV, link the device for quick capture.

Verify it

File a report and check the delivery log in the dashboard. If nothing arrives, check captureGate, which reports whether capture is armed — start() opens it, kill() closes it:

Log.d("everframe", "gate=${Everframe.captureGate} config=${Everframe.currentConfig}")

The usual causes are a wrong sdkKey, an Application class that is not registered in the manifest, and reporter-ui missing from the dependency list.

Next