Crash reporting on your own Cloudflare account
crashyard is an open-source, Sentry-compatible crash, error and log reporter. It runs as one Worker with D1 and R2 that you deploy in a click. Your apps keep the official Sentry SDKs and only change their DSN.
Cloudflare's free plan handles a few thousand events a day. Native crashes and source maps need Workers Paid. See why.
// app.tsimport * as Sentry from '@sentry/browser' Sentry.init({- dsn: 'https://5e1c0a7d3b@o4507.ingest.sentry.io/451',+ dsn: 'https://8b41d2f09c@crashyard.example.com/3', release: import.meta.env.VITE_RELEASE,})
// AppDelegate.swiftimport Sentry SentrySDK.start { options in- options.dsn = "https://5e1c0a7d3b@o4507.ingest.sentry.io/452"+ options.dsn = "https://2c7f90e1a4@crashyard.example.com/1" options.sendDefaultPii = false}
<!-- AndroidManifest.xml, inside <application> --><meta-data android:name="io.sentry.dsn"- android:value="https://5e1c0a7d3b@o4507.ingest.sentry.io/453" />+ android:value="https://71d3c4b8e2@crashyard.example.com/4" /><meta-data android:name="io.sentry.send-default-pii" android:value="false" />
# app.pyimport sentry_sdk sentry_sdk.init(- dsn="https://5e1c0a7d3b@o4507.ingest.sentry.io/454",+ dsn="https://4f02a9d6c1@crashyard.example.com/2", traces_sample_rate=1.0,)
The same one-line change for every official Sentry SDK.
- Apple
- Android
- JavaScript
- Node.js
- Python
- Ruby
- PHP
- Go
- Java
- .NET
- Elixir
- Rust
- Dart
Readable stack traces from the files you already upload
Point sentry-cli, the Xcode build phase, the Gradle plugin or @sentry/vite-plugin at crashyard. It reads dSYMs, R8 mappings, native libraries and source maps with Sentry's own symbolic library, built to WebAssembly.
- Crashes that came first are read againAnything from the last 30 days that arrived before its files is processed once they're uploaded.
- Each frame opens its lineOn GitHub or GitLab, at the release's commit. Private repositories need no token.
- Suspect commitsAn issue lists the commits in its first release that changed a file in its stack.
Fixes CRASHYARD-42in a message resolves it.
Uploads need Workers Paid.
# Point Sentry's own tools at crashyardexport SENTRY_URL=https://crashyard.example.com/export SENTRY_ORG=crashyardexport SENTRY_PROJECT=acme-iosexport SENTRY_AUTH_TOKEN=cy_… # After archiving the iOS app$ sentry-cli debug-files upload --include-sources ./dSYMs # Send the release's commits for suspect commits and links$ sentry-cli releases set-commits "1.0 (10)" --local
Everything a small team uses Sentry for
Issues, releases, logs, traces and monitors in one dashboard, light or dark, on a desktop or a phone.
Issues
Crashes and errors grouped the way Sentry groups them, searchable with Sentry's query syntax.
- Resolve now or in the next release
- Regressions flagged when an issue comes back
- Merge, ignore, assign and add notes
- Crashes from App Review and TestFlight called out
Releases
What is new, what regressed and what is gone in each release, against the one before.
- Crash-free sessions and users
- Adoption over the last 30 days
- The commits each release shipped
Logs and traces
Sentry logs, searchable by any attribute, grouped, charted and followed live.
- Jump from a log to the issue in the same trace
- Transactions by p95, per release
- The slowest runs with their spans
Monitors and status pages
Cron monitors for scheduled jobs and uptime checks for URLs. Each failure opens an incident.
- Check in from the SDK, sentry-cli or curl
- Public status pages on your own domain
- Post incidents, notices and maintenance
Alerts where you already are
Route each alert by type, project, level and environment. Quiet hours hold the ones that can wait until morning, and a weekly summary lands on Monday.
Triage from your agent
An MCP server at /mcp lets an agent such as Claude Code read issues, events, logs, traces and releases, and resolve, assign or merge what it finds. A token acts as you and never does more than your role allows.
# The token comes from Settings, then Agent tokens$ claude mcp add --transport http crashyard \ https://crashyard.example.com/mcp \ --header "Authorization: Bearer cyp_…" # Then ask: why did acme-ios 1.0 (10) start# crashing in Voice.next()?
The rest of the job, in the same Worker
Performance
Transactions by p95, how each release changed them, and web and mobile vitals.
Dashboards
Charts, numbers and tables from issues, events and logs, or the Crashes template.
Worker runs
Catches Workers that run out of CPU time or memory, which their own SDK never gets to send.
Passkeys
No passwords. Four roles from owner to viewer, invites, recovery codes, and Sign in with GitHub if you want it.
Updates from GitHub releases
crashyard checks for new releases daily and installs one from the dashboard, or every night.
Installable app
Add it to your phone's home screen, with push notifications on iOS 16.4 and later.
Next to Sentry
Forward every event on to Sentry too, so you can compare the two until you switch.
Private by default
No telemetry, no IP addresses. Passwords, tokens and emails are scrubbed before storing.
Moving from Sentry
Import a project's issues with their latest event, counts, status and comments. New events land on the same issues.
What runs on which Cloudflare plan
crashyard runs in your account, so Cloudflare's plan is the only bill. Cloudflare's free plan handles a few thousand events a day.
| Feature | Free | Paid |
|---|---|---|
| Issues, alerts, logs, traces and performance | Yes | Yes |
| Releases, sessions and crash-free rates | Yes | Yes |
| Monitors, uptime checks and status pages | Yes | Yes |
| Stack traces readable as sentNode.js, Python, Ruby, PHP, Go, Java, .NET | Yes | Yes |
| Native crashes from iOS and AndroiddSYMs, R8 mappings and native libraries | No | Yes |
| Source maps for browser JavaScript | No | Yes |
| Installing updates from the dashboard | No | Yes |
| Debug files up to 512 MBWith the optional SymCache builder container | No | Yes |
Why native crashes need Paid
Turning a stack trace back into code takes more processing time than the free plan's 10 ms a request. crashyard finds which plan your account is on by itself, and the pages that need Paid say so.
Not there yet
- React Native with Hermes, obfuscated Flutter and Unity with IL2CPP arrive grouped, with raw frames.
- Profiles and session replays are accepted and dropped.
How it compares
Other projects keep crash reports yourself too. Here's where crashyard differs.
crashyard
One Worker in your Cloudflare account, with no server to run.
- Everything the Sentry SDK sends
- Native symbols through sentry-cli
- Alert routes with quiet hours
- Uptime checks and incidents
- Passkeys and an MCP server
Bicho, Workers Sentinel
Take errors through an API, without performance data, sessions, logs, monitors or alerts.
GlitchTip, Bugsink, OpenFault
Speak Sentry's protocol too, and need a server and a database that you keep running.
FlareLog
Runs on its own servers, and your apps send with its own SDK instead of Sentry's.
Need session replays or profiling? Use Sentry. crashyard can forward every event there while you compare.
Running in about fifteen minutes
The button copies crashyard to your GitHub account, creates the D1 database and the R2 bucket, and deploys. Add a setup code, create your owner passkey, and give each app's SDK its project's DSN.
$ git clone https://github.com/marctorrelles/crashyard$ cd crashyard && pnpm install$ pnpm run setup# Asks for your domain and email, deploys,# and prints the setup code for your owner passkey