Limitations & Trade-offs
Honest documentation of what Crashless does and doesn't do.
What Crashless Does
✅ Error Handling - Comprehensive and reliable
✅ HTTP Request Tracking - All Express routes automatically instrumented
✅ Metrics Collection - Efficient in-memory storage
✅ Basic Tracing - Works for HTTP requests and fetch()/fs.readFile()
✅ Built-in Dashboard - Real-time observability UI
What Crashless Doesn't Do
Auto-Instrumentation Limitations
❌ Database Libraries - Prisma, Sequelize, Mongoose, TypeORM, etc. require manual instrumentation
❌ Redis Clients - node-redis, ioredis require manual wrapping
❌ Message Queues - RabbitMQ, Kafka, AWS SQS require manual instrumentation
❌ Custom HTTP Clients - axios, got, node-fetch alternatives require manual instrumentation
❌ Other fs Methods - Only fs.readFile() is auto-patched, not writeFile, readdir, etc.
Note: HTTP requests (Express routes) are automatically instrumented. Only operations within those requests need manual instrumentation if they use libraries not covered by auto-patching.
Technical Limitations
1. Monkey-Patching
- What it is: Modifying global functions (
fetch(),fs.readFile()) - Why it's fragile: Can break with native modules, bundlers, or custom implementations
- Impact: May not work in all environments
2. CDN Dependency
- What it is: Dashboard UI loads from CDN (Tailwind, Alpine.js, ECharts)
- Why it's a limitation: Requires internet connection
- Impact: Dashboard won't work offline
3. Memory Storage
- What it is: All data stored in memory
- Why it's a limitation: Lost on server restart
- Impact: No persistence, limited by available memory
4. Limited OTLP Support
- What it is: OpenTelemetry Protocol compatibility
- Why it's limited: Subset of OTLP features
- Impact: May not work with all OpenTelemetry tools
Performance Limitations
- Overhead: 2-30% depending on configuration (not less than 1% as sometimes claimed)
- Memory: ~5-20MB typical usage
- Scalability: Not designed for extremely high traffic (>1000 req/s per instance)
When to Use Crashless
Ideal Use Cases
✅ Small to medium applications - Good fit for most APIs
✅ Development/staging - Excellent for debugging
✅ Teams wanting simplicity - No complex setup required
✅ Projects needing quick observability - Get started fast
✅ Zero-dependency requirement - No npm dependencies
Not Ideal For
❌ Large-scale enterprise applications - May need more features
❌ Applications requiring full OpenTelemetry - Limited OTLP support
❌ Applications needing database auto-instrumentation - Requires manual work
❌ Offline environments - Dashboard requires CDN access
❌ Applications with strict less than 1% overhead requirement - Typical overhead is 2-30%
Comparison with Alternatives
vs Manual Error Handling
Crashless provides:
- Automatic error catching
- Consistent error format
- Built-in observability
- Less boilerplate code
Manual approach:
- Full control
- No overhead
- More code to maintain
vs OpenTelemetry
Crashless provides:
- Simpler setup
- Built-in dashboard
- Zero dependencies
- Less configuration
OpenTelemetry provides:
- Industry standard
- Full library support
- More instrumentation options
- Better for enterprise
vs Other Error Handling Libraries
Crashless provides:
- Built-in observability
- Dashboard and metrics
- Distributed tracing
- More features
Other libraries provide:
- Just error handling
- Smaller footprint
- Fewer features
Known Issues
1. Auto-Patching May Fail
Issue: Monkey-patching can fail silently
Impact: Tracing may not work for some operations
Workaround: Use manual instrumentation
2. Memory Growth
Issue: Memory can grow if cleanup isn't called
Impact: Potential memory leaks
Workaround: Ensure cleanup runs periodically (should be automatic)
3. Dashboard CDN Dependency
Issue: Dashboard requires internet connection
Impact: Won't work offline
Workaround: Use metrics export endpoints instead
Future Improvements
- Better auto-instrumentation - Support more libraries
- Offline dashboard - Bundle UI resources
- Automatic cleanup - Scheduled cleanup tasks
- More OTLP features - Full OpenTelemetry compatibility
- Database instrumentation - Auto-patch common DB libraries
Transparency
This document provides honest limitations and trade-offs. Crashless prioritizes simplicity and ease of use over comprehensive feature coverage. It's designed for teams who want observability without the complexity of full APM solutions.
If you need:
- Full OpenTelemetry compatibility → Use OpenTelemetry SDK
- Database auto-instrumentation → Use specialized APM tools
- Less than 1% overhead → Use minimal configuration or manual error handling
- Offline dashboard → Use metrics export with custom dashboard
Crashless is a pragmatic solution that balances features, simplicity, and performance. It's not trying to replace enterprise APM tools, but rather provide a simple, zero-dependency alternative for teams who want observability without the complexity.
Next Steps
- Architecture - How Crashless works
- Performance Guide - Performance characteristics
- Examples - Workarounds and patterns