DEV Community

Cover image for Stop Losing Users to Silent Crashes: Introducing crash_reporter for Flutter
Cahyanudien Aziz Saputra
Cahyanudien Aziz Saputra

Posted on

Stop Losing Users to Silent Crashes: Introducing crash_reporter for Flutter

As Flutter developers, we've all been there. Your app crashes in production, users abandon it, and you don't find out until the 1-star reviews start rolling in. Traditional crash analytics tools are great, but they come with their own problems: complex setup, vendor lock-in, privacy concerns, and that dreaded delay before you actually see what went wrong.

What if you could get crash reports instantly, exactly where your team already communicates?

The Problem with Traditional Crash Analytics

Don't get me wrong — tools like Firebase Crashlytics and Sentry are powerful. But they have downsides:

  • Delayed notifications: You often learn about crashes hours later
  • Context switching: Checking another dashboard breaks your flow
  • Privacy concerns: Sensitive data going to third-party servers
  • Overkill for small teams: Full-featured analytics when you just need crash alerts
  • Cost: Many solutions get expensive as your user base grows

Introducing crash_reporter

I built crash_reporter to solve a simple problem: get crash reports instantly, in the tools you already use, with zero third-party analytics involved.

It's a lightweight Flutter plugin that sends crash reports, errors, and custom logs to multiple platforms simultaneously — Telegram, Slack, Discord, and custom webhooks.

Why This Approach Works

Real-time notifications where you already are

Your team lives in Slack or Discord. Your ops team monitors Telegram. Why not send crash reports there directly?

Multi-platform flexibility

Enable one service or all four. Send production crashes to Slack, development errors to Discord, and critical alerts to Telegram — simultaneously.

Complete privacy control

No external analytics SDKs. No data leaves your app except what you explicitly send. Perfect for apps handling sensitive user data or operating in regulated industries.

Lightweight and dependency-free

No bloated SDKs. Just a simple, focused package that does one thing well.

Getting Started in 5 Minutes

1. Add the Package

dependencies:
  crash_reporter: ^1.0.0
Enter fullscreen mode Exit fullscreen mode

2. Set Up Your Notification Channels

Choose one or more platforms:

Telegram (my personal favorite for quick alerts):

  • Search for @botfather and create a bot
  • Get your Chat ID from @InstantChatIDBot

Slack: Create an Incoming Webhook in your workspace

Discord: Create a webhook in your server settings

Custom Webhook: Use any HTTP endpoint you control

3. Initialize in Your main.dart

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  CrashReporter.initialize(
    telegramConfig: TelegramConfig(
      botToken: 'YOUR_BOT_TOKEN',
      chatId: YOUR_CHAT_ID,
    ),
    slackConfig: SlackConfig(
      webhookUrl: 'YOUR_SLACK_WEBHOOK',
    ),
    notificationConfig: NotificationConfig(
      enableTelegram: true,
      enableSlack: true,
      sendCrashReports: true,
      sendStartupEvents: true,
    ),
  );

  // Get notified when your app starts
  CrashReporter.sendAppStartup();

  // Catch all Flutter errors
  FlutterError.onError = (details) {
    CrashReporter.reportCrash(
      error: details.exception,
      stackTrace: details.stack ?? StackTrace.current,
      context: 'Flutter UI Error',
      fatal: true,
    );
  };

  // Catch all Dart errors
  PlatformDispatcher.instance.onError = (error, stack) {
    CrashReporter.reportCrash(
      error: error,
      stackTrace: stack,
      context: 'Runtime Error',
      fatal: true,
    );
    return true;
  };

  runApp(const MyApp());
}
Enter fullscreen mode Exit fullscreen mode

That's it! You're now getting instant crash reports.

Real-World Use Cases

Development Teams

Get instant feedback during testing. No more "it crashed but I don't know why" from QA.

Solo Developers

Monitor your production app without complex analytics setup. One Telegram bot gives you everything you need.

Multi-Environment Workflows

// Development: Discord only
// Staging: Slack only  
// Production: Telegram + Custom webhook to your backend
Enter fullscreen mode Exit fullscreen mode

Custom Business Logic

try {
  await processPayment();
} catch (e, s) {
  CrashReporter.reportCrash(
    error: e,
    stackTrace: s,
    context: 'Payment Failed',
    fatal: true,
    extraData: {
      'user_id': currentUser.id,
      'amount': orderTotal,
      'payment_method': paymentType,
    },
  );
}
Enter fullscreen mode Exit fullscreen mode

Advanced Features

Track Custom Events

Not just crashes — track any important app events:

CrashReporter.sendEvent("User completed onboarding");
CrashReporter.sendEvent("Premium subscription activated");
Enter fullscreen mode Exit fullscreen mode

Rich Context with Extra Data

Add custom metadata to understand exactly what happened:

CrashReporter.reportCrash(
  error: error,
  stackTrace: stackTrace,
  context: 'Data Sync Failed',
  fatal: false,
  extraData: {
    'sync_type': 'full',
    'records_processed': 1523,
    'network_status': 'wifi',
    'battery_level': '45%',
  },
);
Enter fullscreen mode Exit fullscreen mode

App Startup Notifications

Know instantly when your app is deployed:

CrashReporter.sendAppStartup();
Enter fullscreen mode Exit fullscreen mode

Perfect for tracking deployments across environments.

Privacy-First Design

In an era of data breaches and privacy regulations, crash_reporter gives you complete control:

  • ✅ No third-party analytics servers
  • ✅ You control what data is sent
  • ✅ All credentials stored securely in memory
  • ✅ GDPR compliant by design
  • ✅ Perfect for healthcare, finance, and other regulated industries

When Should You Use This?

Perfect for:

  • Small to medium teams wanting instant notifications
  • Apps handling sensitive data
  • Developers who prefer their existing communication tools
  • Multi-environment setups (dev/staging/prod)
  • Projects where you need custom crash handling

Consider traditional analytics if:

  • You need advanced features like user sessions, ANR tracking, or performance monitoring
  • You have a large team needing detailed crash analytics dashboards
  • You want automatic grouping and duplicate detection

The Bottom Line

crash_reporter isn't trying to replace Firebase Crashlytics or Sentry. It's a focused tool for developers who want instant crash notifications in their existing workflow, without the overhead of full analytics platforms.

If you've ever wanted to:

  • Get a Telegram message the moment your app crashes in production
  • Send different crashes to different channels based on severity
  • Keep complete control over your crash data
  • Set up crash reporting in 5 minutes instead of 5 hours

Then crash_reporter might be exactly what you need.

Try It Out

Install it today and get your first crash report in minutes:

flutter pub add crash_reporter
Enter fullscreen mode Exit fullscreen mode

Check out the full documentation and examples on pub.dev and the source code on GitHub.


Have feedback or feature requests? I'd love to hear how you're using crash_reporter! Drop a comment below or open an issue on GitHub.

Found this helpful? Give it a 👍 on pub.dev and star it on GitHub to help other developers discover it.

Happy coding, and may your crashes always be caught! 🚀

Top comments (0)