Abrova
☰ Docs menu · Breadcrumbs

Breadcrumbs

Trail of events leading up to an error — automatic navigation and tap tracking plus manual breadcrumbs for HTTP, user actions, and custom events.

Last updated: 27 Oct 2026

Breadcrumbs are a trail of events that happened before an error occurred. They help you understand what the user was doing when things went wrong.

Example journey:

User opened app→ Navigated to /checkout→ Clicked "Pay Now"→ 💥 Payment failed

Flutter#

Track Navigation Automatically

dart
MaterialApp(
  navigatorObservers: [
    AbrovaTraceNavigatorObserver(), // Tracks all screen changes
  ],
  home: HomePage(),
)

Track Taps Automatically

One call enables breadcrumbs for every tap on a button, switch, list row, or any interactive widget — across Web, Android, iOS, macOS, Windows, and Linux. Each breadcrumb captures the widget type, label, optional ValueKey, current route, and tap coordinates.

dart
// Call once after AbrovaTrace.init() and WidgetsFlutterBinding.ensureInitialized()
AbrovaTrace.enableGestureBreadcrumbs();

See the Flutter SDK page for the full list of recognized widgets, label-extraction order, and privacy notes.

Add Manual Breadcrumbs#

Flutter

dart
// User action
AbrovaTrace.addBreadcrumb(
  'User clicked checkout button',
  type: BreadcrumbType.user,
  data: {'cart_items': 3, 'total': 49.99},
);

// HTTP request
AbrovaTrace.addBreadcrumb(
  'POST /api/orders',
  type: BreadcrumbType.http,
  data: {'status_code': 200, 'duration_ms': 150},
);

// Custom event
AbrovaTrace.addBreadcrumb(
  'Cache miss for user profile',
  type: BreadcrumbType.info,
  data: {'cache_key': 'user_123'},
);

Node.js

javascript
const AbrovaTrace = require('@abrova-trace/nodejs-sdk');
const { Breadcrumb } = AbrovaTrace;

AbrovaTrace.addBreadcrumb(
  Breadcrumb.http('POST', '/api/login', 200, 150)
);

AbrovaTrace.addBreadcrumb(
  Breadcrumb.database('SELECT * FROM users WHERE id = ?', 25)
);

AbrovaTrace.addBreadcrumb(
  Breadcrumb.user('clicked_checkout_button', { cart_total: 99.99 })
);

Next.js

tsx
import { useBreadcrumbs } from '@abrova-trace/nextjs-sdk/react';

const { addBreadcrumb, addHttp } = useBreadcrumbs();

addBreadcrumb('Form submitted', { formName: 'contact' });
addHttp('GET', '/api/users', 200, { duration_ms: 45 });
TypeDescription
BreadcrumbType.userUser actions (clicks, taps, swipes)
BreadcrumbType.navigationScreen changes (automatic with observer)
BreadcrumbType.httpAPI calls and network requests
BreadcrumbType.stateApp state changes
BreadcrumbType.infoGeneral information events
BreadcrumbType.errorError events
BreadcrumbType.systemSDK and system events

Complete Example#

dart
class CheckoutPage extends StatelessWidget {
  Future<void> _checkout() async {
    // Track user action
    AbrovaTrace.addBreadcrumb(
      'User initiated checkout',
      type: BreadcrumbType.user,
      data: {'cart_items': 3},
    );

    try {
      // Track HTTP call
      AbrovaTrace.addBreadcrumb(
        'POST /api/orders',
        type: BreadcrumbType.http,
      );

      final order = await api.createOrder();

      AbrovaTrace.addBreadcrumb(
        'Order created successfully',
        type: BreadcrumbType.info,
        data: {'order_id': order.id},
      );
    } catch (e, stackTrace) {
      // Error will include ALL breadcrumbs above
      await AbrovaTrace.captureException(
        e,
        stackTrace: stackTrace,
        message: 'Checkout failed',
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: _checkout,
      child: Text('Place Order'),
    );
  }
}

Viewing Breadcrumbs#

Breadcrumbs appear automatically in the dashboard when viewing an error detail. They show a timeline of: navigation events, user clicks, API requests, and then the error.

Best Practices#

Add Before Important Actions

Track breadcrumbs before payments, data mutations, and auth flows

Use Descriptive Messages

"User clicked checkout" is better than "button clicked"

Include Relevant Data

Add IDs, amounts, and context — but avoid sensitive info

Don't Overdo It

Too many breadcrumbs can be noisy — focus on meaningful events

Was this page helpful?
Report a problem