Projects & DSNs
A project is one DSN. Every SDK holding that DSN reports into it.
Creating a project
From the viewer's home page, or from the command line:
crashcart project shop-ios "Shop app (iOS)" ios
# project shop-ios (id 1)
# DSN: https://<key>@crashcart.example.com/1The last argument is the platform: ios, android, flutter, react-native, web, backend or other. It is a label shown in the viewer, not a filter.
The slug (shop-ios) is what you'll see in URLs and use in the CLI and API.
The DSN
https://<key>@crashcart.example.com/1Paste it into the SDK exactly as you would a Sentry DSN. The key lets an app send events to this project — it is fine to ship inside an app binary, but don't publish it.
If the DSN shows the wrong host (for example localhost when CrashCart is behind a domain), set PUBLIC_URL.
Rotating the key
Settings → Rotate key in the viewer, or crashcart rotate-key shop-ios. The old key stops working immediately, so apps in the field keep failing until they ship a build with the new DSN.
One project per platform
Create one project per app and platform — shop-ios, shop-android, shop-web — rather than one for the whole app. The "latest release" and crash-spike detection are computed per project, and iOS 2.4.1 and Android 2.4.1 are different builds with different crash rates. Mixing them blurs both numbers.
Sampling and daily quota
A single bug can produce millions of identical events. Three settings under Settings → Sampling keep storage under control without losing the count:
| Setting | Default | Effect |
|---|---|---|
| Keep first | 100 | The first 100 events of every issue are always stored |
| Sample rate | 1.0 | After that, this fraction of the issue's events is stored |
| Daily quota | 100 000 | Events accepted per day for the whole project; 0 = unlimited |
The issue's event count stays exact whether or not an event was stored, and crashes (fatal) are always stored.