For developers
Crash, error and API monitoring for developers
Every crash, error and failed API call across mobile, web and backend, with the context to fix it, and the rest of the team already looking at the same issue.
Plans: Crash and error reporting and email alerts on every plan · network capture and Slack alerts from Starter · tickets and Fix with AI on Growth and above · See pricing
java.lang.NullPointerException at com.example.app.ui.UserProfileFrag... at android.app.Fragment.performCre... at android.app.FragmentStateManager...- Pixel 7
- Android 14
- 1.2.0 (324)
- Apr 16, 10:24 AM
What you get
- Stack traces with contextGrouped crashes, native crashes and errors with the device, OS, app version and build, and how many users each one hit.Every plan
- Failed and slow API callsStatus, timing and the users affected for every failing request: OkHttp on Android, fetch and XHR on the web, and incoming and outgoing calls from your servers.Starter and above
- Backend errors tooThe Python, Node.js, Go, Java and PHP SDKs report unhandled and handled exceptions on every plan, and requests by route from Starter.Every plan
- Built for productionOffline queuing on the device, a test key that keeps your dev traffic apart, and remote config to tune sampling and capture without a release.Every plan
- Context from the rest of the teamQA's reproduction, support's customer report and product's impact arrive as comments on the issue, and an @mention or assignment notifies you.Every plan
- Tickets and Fix with AICreate a ticket with the stack trace and steps already written, or have your AI propose a fix that opens a draft pull request once you approve it.Growth and above
Workflow
From install to the merged fix
Set up once, then spend your time on the fix instead of on reproducing the bug.
- 1
Install the SDK
Add the package for your platform and initialize it with the project's public key. Snippets for every SDK are below.
Every plan - 2
The crash arrives with context
Grouped with every other occurrence, with the stack trace, device and app version, and the users it hit.
Every plan - 3
You hear about it
An alert by email (every plan) or in your team's channel (Starter and above), or a bell and email notification when someone assigns the issue or @mentions you.
Every plan - 4
Fix it with the evidence attached
Open a ticket with the steps already written, or ask Fix with AI for a draft pull request. Your review and CI stay in charge.
Growth and above
Setup
Set up in minutes, on every platform
The same snippets as the docs. Kotlin Multiplatform, iOS and OpenTelemetry ingest are in beta; everything else is generally available.
dependencies { implementation("com.codeskop.sdk:tracker-android:0.3.0") // Optional: OkHttp / Retrofit network capture (recommended) implementation("com.codeskop.sdk:tracker-okhttp:0.3.0")}class MyApplication : Application() { override fun onCreate() { super.onCreate() CodeskopAndroid.init( this, CodeskopConfig(apiKey = BuildConfig.CODESKOP_KEY), ) }}dependencies: codeskop_tracker: ^0.3.0import 'package:codeskop_tracker/codeskop_tracker.dart';import 'package:flutter/material.dart'; void main() { Codeskop.runGuarded(() async { await Codeskop.init( apiKey: 'cs_live_pk_YOUR_KEY', endpoint: 'https://api.codeskop.com', ); runApp(const MyApp()); });}npm install @codeskop/trackerimport { init } from "@codeskop/tracker"; init({ apiKey: "cs_live_pk_YOUR_KEY", release: "1.4.0", // optional: your app's version});npm install @codeskop/tracker @codeskop/tracker-reactimport { createRoot } from "react-dom/client";import { CodeskopProvider, CodeskopErrorBoundary } from "@codeskop/tracker-react"; createRoot(document.getElementById("root")!).render( <CodeskopProvider config={{ apiKey: "cs_live_pk_YOUR_KEY", release: "1.4.0" }}> <CodeskopErrorBoundary fallback={<p>Something went wrong.</p>}> <App /> </CodeskopErrorBoundary> </CodeskopProvider>,);kotlin { sourceSets { commonMain.dependencies { implementation("com.codeskop.sdk:tracker-core:0.3.0") } androidMain.dependencies { implementation("com.codeskop.sdk:tracker-android:0.3.0") implementation("com.codeskop.sdk:tracker-okhttp:0.3.0") // optional network capture } }}.package(url: "https://github.com/Codeskop-io/mobile-sdk.git", from: "0.3.0")pip install codeskopimport codeskop codeskop.init( api_key="cs_live_pk_…", # or set CODESKOP_API_KEY environment="production", # optional release="1.4.2", # optional: auto-detected on most hosts)npm install @codeskop/nodeimport * as codeskop from "@codeskop/node"; codeskop.init({ apiKey: process.env.CODESKOP_API_KEY, // cs_live_pk_… (public key) environment: "production", // optional release: "1.4.2", // optional: auto-detected on most hosts});go get github.com/Codeskop-io/codeskop-goimport ( "os" "time" codeskop "github.com/Codeskop-io/codeskop-go") func main() { codeskop.Init(codeskop.Options{APIKey: os.Getenv("CODESKOP_API_KEY")}) // cs_live_pk_… (public key) defer codeskop.Close(2 * time.Second) // ...}dependencies { implementation("com.codeskop.sdk:codeskop-server:0.1.0")}Codeskop.init(Codeskop.options() .apiKey(System.getenv("CODESKOP_API_KEY")) // cs_live_pk_… (public key) .environment("production"));composer require codeskop/codeskop-php<?phprequire __DIR__ . '/vendor/autoload.php'; \Codeskop\Codeskop::init(['api_key' => getenv('CODESKOP_API_KEY')]); // Optional: name the route of this request (otherwise IDs in the path become {id}).\Codeskop\Codeskop::setRoute('/orders/{id}');OTEL_EXPORTER_OTLP_ENDPOINT=https://api.codeskop.com/v1/otlpOTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer cs_live_pk_…OTEL_EXPORTER_OTLP_PROTOCOL=http/protobufOTEL_SERVICE_NAME=checkoutFrequently asked questions
Which platforms are supported?
Android, Flutter, the web, React, and the Python, Node.js, Go, Java and PHP server SDKs are generally available. Kotlin Multiplatform and iOS are in early access beta, and so is OpenTelemetry ingest.
Is it safe to ship the key in my app?
Yes. Public ingest keys (cs_live_pk_…) can only write events. Secret keys (cs_…_sk_) must never go in an app.
Do test and development events count toward our quota?
No. Events sent with a test key (cs_test_pk_…) go to the test environment, which is free and never counted, on every plan.
Are R8 or ProGuard traces deobfuscated?
No. The dashboard shows obfuscated Android traces as they arrive, so map them with your own mapping.txt.
Does Fix with AI change our code by itself?
No. It proposes a change for you to review and revise. Only when you approve does it create a branch and open a draft pull request, and it never merges anything.
Can I use OpenTelemetry instead of an SDK?
Yes, in beta. Point your OTLP/HTTP exporter at Codeskop with the project's public key. It's the way in for languages without a Codeskop SDK, such as .NET, Ruby, Rust and Elixir.
Know what broke. Fix it faster.
Bring your whole team into the same issues.
Set up in minutes. Free plan for up to 5 team members, no credit card required.