jvmBuilt for Java & Kotlin

Analytics & Monitoring
for Java & Kotlin

Same Maven artifact as the Spring Boot integration, no auto-config. Manual init for raw JVM apps, Ktor servers, Quarkus, Micronaut, and Helidon — Kotlin and Java APIs both supported.

  • Java 11+ and Kotlin 1.8+ supported
  • JDBC auto-instrumentation — every PreparedStatement traced
  • OkHttp and Apache HttpClient interceptors for outgoing calls
  • Async-context propagation via reactor / kotlinx.coroutines
  • Native crash capture for JVM exceptions and Errors
  • Ships on Maven Central + GitHub Packages
java
1// In your application main()
2import app.justanalytics.JA;
3
4JA.init(JA.Config.builder()
5 .apiKey(System.getenv("JUSTANALYTICS_API_KEY"))
6 .serviceName("my-jvm-app")
7 .environment("production")
8 .build());
9
10// Ktor / Quarkus / Micronaut / raw JVM —
11// same artifact, different integration class.
Active Users
0+12%
Pageviews
0+8%
Errors
0resolved
Uptime
0%all green

Built for JVM services

If you don't want Spring Boot auto-config — Ktor, Quarkus, Micronaut, or hand-rolled — this is the page for you.

JDBC tracing

Wraps your DataSource so every Connection's PreparedStatement is traced. Works with HikariCP, c3p0, Tomcat JDBC, raw JDBC.

HTTP integrations

Ktor: install(JustAnalytics). Quarkus: CDI bean. Micronaut: AOP filter. Plus OkHttp / Apache HttpClient interceptors for outgoing calls.

Exception capture

Uncaught JVM exceptions, coroutine failures, and CompletableFuture errors all captured with full stack frames.

Coroutine-aware context

Trace context propagated through kotlinx.coroutines and Reactor's Mono/Flux without manual passing.

Full analytics suite

Add the frontend script for cookie-free analytics, replay, and Web Vitals. One dashboard for client + server.

Alert rules

Per-endpoint latency, error-rate, JVM-heap, and GC-pause alerts. Email, webhook, or PagerDuty.

Ktor setup

Maven / Gradle dependency, init at startup, install the Ktor plugin. Every route is traced.

// build.gradle.kts
dependencies {
    implementation("app.justanalytics:justanalytics-jvm:1.0.0")
    implementation("app.justanalytics:justanalytics-ktor:1.0.0")
}

// Application.kt
import app.justanalytics.JA
import app.justanalytics.ktor.JustAnalytics

fun main() {
    JA.init(JA.Config.builder()
        .apiKey(System.getenv("JUSTANALYTICS_API_KEY"))
        .serviceName("my-ktor-app")
        .environment("production")
        .build())

    embeddedServer(Netty, port = 8080) {
        install(JustAnalytics)        // every request becomes a trace
        routing {
            get("/users/{id}") {
                // JDBC queries auto-traced inside this handler
                call.respondText("user ${call.parameters["id"]}")
            }
        }
    }.start(wait = true)
}

Ready to simplify your stack?

Replace five tools with one platform. Start with the free tier or try Pro free for 7 days.

Start 7-Day Free Trial