OpenTelemetry observability for Flutter. Wraps the native EDOT iOS and EDOT Android Agents to provide automatic and manual instrumentation from Dart.
iOS 15.6+, Android minSdk 24, Flutter 3.44+.
flutter pub add inoxth_edot_flutterimport 'package:inoxth_edot_flutter/inoxth_edot_flutter.dart';
Future<void> main() async {
await Edot.start(EdotConfig(
serviceName: 'my-app',
serviceVersion: '1.0.0',
deploymentEnvironment: 'production',
serverUrl: 'https://apm.example.com:443',
auth: const EdotAuth.apiKey('...'),
));
runApp(const MyApp());
}// Trace navigation by adding the observer.
MaterialApp(
navigatorObservers: [EdotNavigatorObserver()],
);Edot.start installs the error handlers, sets up the export pipeline, and replays anything
produced before it ran. The iOS deployment target, the full configuration reference, the
GoRouter recipe, Tracking Consent and the complete list of deliberate limitations all live in
packages/inoxth_edot_flutter/README.md.
Two installable packages; each has its own README.
| Package | Description |
|---|---|
inoxth_edot_flutter |
Core - config, both native implementations, navigation, errors, package:http tracing, logs, metrics, consent |
inoxth_edot_flutter_dio |
Dio interceptor. Separate because Dart has no optional dependencies |
The repository also holds test infrastructure (edot_collector_harness) and the example apps -
CONTRIBUTING.md maps the full layout.
inoxth_edot_flutter |
EDOT iOS (apm-agent-ios) |
EDOT Android (agent-sdk) |
Min iOS | Min Android |
|---|---|---|---|---|
| 0.1.x | 1.2.1 | 1.1.0 | 15.6 | 24 |
All versions require Flutter ≥ 3.44 (Swift Package Manager is default-on from that version) and
Android compileSdk 35. The Agent versions are pinned; raising them raises the platform floors.
Auto features need no per-request or per-screen code once the relevant integration is enabled; Manual features are called explicitly. Grouped by the package that provides them.
Core - inoxth_edot_flutter
| Feature | Mode |
|---|---|
App-wide dart:io request tracing (traceAllHttpTraffic) |
Auto |
package:http client tracing (EdotHttpClient) |
Manual |
| W3C trace-context propagation to traced hosts | Auto |
Navigation Screen Spans and Active View enrichment (EdotNavigatorObserver) |
Auto¹ |
In-page Active View updates for tabs and IndexedStack (Edot.setActiveView) |
Manual |
| Uncaught Dart errors, framework errors and failed futures | Auto |
Widget-subtree error capture (EdotErrorBoundary) |
Manual |
| iOS native crashes, lifecycle events, system and app metrics | Auto (iOS) |
Tracking Consent gate (Edot.trackingConsent, Edot.setTrackingConsent) |
Manual |
Session identifier (Edot.currentSessionId) |
Manual |
Structured logs (Edot.log) |
Manual |
Manual spans (Edot.tracer) |
Manual |
Metrics (Edot.recordMetric) |
Manual |
¹ once the observer is registered on your MaterialApp or router.
Dio - inoxth_edot_flutter_dio
| Feature | Mode |
|---|---|
Dio request tracing (EdotDioInterceptor) |
Manual |
Attribute value types accepted by each API.
| Scope | API | Value types |
|---|---|---|
| Span | span.setString / setInt / setDouble / setBool |
String | int | double | bool |
| Log | attributes: on Edot.log(severity, message, attributes:) |
String | int | double | bool |
| Metric | attributes: on Edot.recordMetric(name, value, attributes:) |
String |
Three example apps live under
packages/inoxth_edot_flutter/example - basic,
navigator, and go_router - each integrating the plugin with a different navigation approach and
sharing the same demo screens. The
example index helps you pick one and covers the
common env-file setup. Between them they exercise every feature: manual spans, logs and metrics, all
three network paths, error capture and the boundary, navigation and tab tracking, the consent
states, and the Session identifier.
See CONTRIBUTING.md for the toolchain, the two test seams and the change
workflow.
MIT - see LICENSE.