Events
Harsh accel, brake, corner, swerve
Four bands versus threshold: within norm, light, medium, heavy. Swerve is a heading change while moving. A bearing the road does not follow counts only when the phone is mounted and turning with it.
On-device driving quality.
Apexmatic is a phone-only driving quality app for Android and iOS. It uses the open-source Harshy SDK: start a trip, receive live metrics and events, and export a session that never needs a Apexmatic server.
100
A preview of the live score.
How it works
Start a trip and Apexmatic follows the drive on your phone. The score, the route, and what happened along the way stay on the device.
Events
Four bands versus threshold: within norm, light, medium, heavy. Swerve is a heading change while moving. A bearing the road does not follow counts only when the phone is mounted and turning with it.
Score
Penalties are exposure-normalized and scaled by one-third so everyday driving stays in a high band. The score is computed on the phone.
Road
Road quality is vertical IMU RMS along the path. It is a measure of pavement, not an event and not part of the trip score.
Impact
A hard jolt can be noted on the trip for you to review. It does not call emergency services, and it does not change the score.
Phone
A span when the phone is picked up or held above a quiet mount baseline. It does not change the score. Screen-unlock distraction is not part of this detector.
Export
The route, events, and score stay on the phone. Download a copy of a trip when you want one.
Event catalog
Integrate
Packages stay @harshy/*. Apexmatic uses the Harshy SDK for capture and scoring on the phone. Apexmatic is the app for Android and iOS.
Expo / RN
JavaScript host API: permissions, start/stop, live metrics and events, local history, optional upload adapter.
Native
Kotlin and Swift in the Harshy SDK. Same session schema as JS. Do not run the client and the Expo module in one process.
Headless
Fleets with their own GPS/IMU feed the detector without copying math into the app.
import { createHarshy, isPossibleImpact } from "@harshy/sdk";
import { createNativeEngine, isNativeEngineAvailable } from "@harshy/sdk/native";
const harshy = createHarshy({
nativeAvailable: isNativeEngineAvailable(),
createNativeEngine,
});
harshy.subscribe({
onMetrics: (metrics) => console.log(metrics.score),
onEvent: (event) => {
if (isPossibleImpact(event)) {
// Heuristic only — not a confirmed crash.
}
},
});
await harshy.requestPermissions();
await harshy.start({ source: "native" });
const session = await harshy.stop();Open source
Apexmatic uses Harshy for capture and scoring on the phone. Hosts may attach their own upload adapter. Source and issues live on GitHub.
View source