TypeError: Cannot read properties of undefined
reading 'id' - cart.tsx:84:19
Hosted error tracking
BugCatch catches unhandled exceptions across your web, Node, Java, and React Native apps, fingerprints each one, and collapses the duplicates. You get a single issue with the stack trace and the clicks that led to it - not four thousand identical emails.
Free to start · No credit card · Your first error in under five minutes
What it is
An error tracker for teams who want the signal without the enterprise contract.
Install the SDK, paste a DSN, ship. From then on every uncaught exception and rejected promise arrives with a resolved stack trace, the breadcrumb trail that preceded it, the user it happened to, and the release it shipped in.
BugCatch also watches the things that break without throwing: endpoints that got slow, queries that got slower, heap that keeps climbing, and URLs that stopped responding.
Event pipeline
Four steps. Your app never waits for any of them.
Global handlers pick up uncaught errors and unhandled rejections. The SDK parses the stack, attaches the last 100 breadcrumbs - clicks, navigation, console warnings - plus the user, release, and environment you set.
The SDK key is checked against a Redis cache and the event goes onto a queue. Your app gets its response back right away - no blocking call, no latency added to the request that already failed.
A SHA-256 of the error type, message, and location becomes the fingerprint. A new fingerprint opens an issue. A known one increments its counters and adds the user to a set. Same crash, same row.
New issues and regressions trigger an email or a webhook. Cooldowns hold the line at one notification per issue per four hours, so a crash loop stays a single message.
Capabilities
What the SDK does once it's initialised.
Uncaught errors and unhandled promise rejections, with no per-call wiring. Add captureException and captureMessage where you want detail.
Clicks, navigation, and console warnings from the 100 events before the crash, so you can reproduce it instead of guessing.
Attach the signed-in user after login, tag by plan or region, and filter issues by any of it later.
A hook that runs before anything leaves the process. Scrub fields, drop noisy error classes, or return false to discard the event.
What you open when something looks wrong.
Upload a source map per release and minified frames resolve to the original file, line, and column.
Heap, CPU, and event loop lag reported per instance, so you can tell one struggling pod from a fleet-wide problem.
Slow routes and slow database queries logged against their own thresholds, separate from your error stream.
HTTP checks every five minutes for URLs, plus heartbeat pings for background jobs - three retries before a URL is called down, a missed ping before a job is.
A page at your own slug showing the monitors you choose and any incident you post, for the people who'd otherwise be asking you in a DM.
See which request, and which part of it, was slow - not just that the server was under load. Pro and above.
Arrange the charts you already have into a grid that opens the way you actually work. Pro and above.
Invite members per project, comment on issues, merge duplicates the fingerprint missed, and bulk resolve or ignore once you've shipped the fix.
Old events age out on a schedule you set, so the dashboard stays fast and storage stays bounded.
What reaches you when you're not looking.
Email the first time a fingerprint appears, and again if something you resolved comes back.
The same events posted to your endpoint, on the same four-hour cooldown, for Slack or anything else you route to.
Memory, CPU, slow endpoints, and downed monitors, each on an independent cooldown so one bad afternoon doesn't become fifty emails.
A project digest every Friday at noon and an uptime summary every Monday at two, both to every member.
The dashboard
Integration
Create a project, copy its DSN from the dashboard, and pass it to init. Everything
after that is automatic.
npm install bugcatch-sdk
import BugCatch from 'bugcatch-sdk';
BugCatch.init({
dsn: import.meta.env.VITE_BUGCATCH_DSN,
release: import.meta.env.VITE_APP_VERSION,
environment: import.meta.env.MODE,
});
// Identify the user once they sign in.
BugCatch.setUser({ id: user.id, email: user.email });
BugCatch.setTag('plan', 'pro');
import BugCatch from 'bugcatch-sdk';
BugCatch.init({
dsn: process.env.BUGCATCH_DSN,
environment: process.env.NODE_ENV,
autoCaptureBreadcrumbs: false, // no DOM on the server
});
app.use((err, req, res, next) => {
BugCatch.captureException(err, { path: req.path, method: req.method });
next(err);
});
// Before any other import.
import BugCatch from 'bugcatch-react-native-sdk';
BugCatch.init({
dsn: 'https://api.bugcatch.app/ingest/PROJECT_ID?key=SDK_KEY',
release: '1.0.0',
environment: 'production',
});
// No native modules required.
import dev.lzrvc.bugcatch.BugCatch;
import dev.lzrvc.bugcatch.BugCatchOptions;
BugCatch.init(new BugCatchOptions.Builder(System.getenv("BUGCATCH_DSN"))
.release("1.0.0")
.environment("production")
.build());
// Uncaught exceptions are captured, cause chains included.
Alerting
Most error tools fail at the second crash, not the first. BugCatch puts every notification behind a cooldown keyed to the issue, so a loop that fires ten thousand times still costs you one message.
Each alert class gets its own timer. A memory warning doesn't suppress a downed monitor, and a slow endpoint doesn't bury a new exception.
Pricing
Every plan includes the full issue pipeline - fingerprinting, stack traces, breadcrumbs and alerts. Paying moves the ceilings and unlocks the monitoring on top.
For a single hobby project.
€0
forever
Start freeFor small teams shipping to production.
€4/mo
or €40 a year - two months free
Choose StarterFor growing products that need depth and history.
€10/mo
or €100 a year - two months free
Start 14-day trialFor teams with volume, long retention and SSO needs.
€20/mo
or €200 a year - two months free
Choose BusinessEvery paid plan starts with a 14-day Pro trial, no card required. Billing is handled by Paddle as merchant of record, so VAT and sales tax are included at checkout. Limits apply to the project owner - collaborators in a Pro project get Pro features on their own Free account. Full limits are in the plan reference.
Create a project, copy the DSN, and ship the SDK in your next deploy.
npm install bugcatch-sdk