Your first crash, captured.
The fastest path to a working install. Sign up, install the SDK, see events stream in. The whole thing should take under five minutes.
1. Create a workspace
Go to /auth/signup, choose an organisation slug (this becomes part of your URL — app.tillpulse.io/<slug>/...), set a password, and verify your email. You become the owner of the workspace.
Onboarding launches automatically — a five-step checklist that walks you through creating a project, installing an SDK, capturing your first event, and inviting your team.
2. Create a project
A project corresponds to a single mobile app build. Pick a platform (React Native, Flutter, iOS, Android, or web) and a data region:
af-south-1— Africa (Johannesburg)eu-central-1— Europe (Frankfurt)us-east-1— North America (Virginia)
TillPulse stores events in the region you pin. Once set, you cannot change a project's region — events written to af-south-1 stay there.
3. Copy the DSN
On the project's settings page you'll see a DSN that looks like:
https://4f8a...e2c1@ingest.tillpulse.io/2c8f1d3a-b6e4-4f12-9a3d-14e5b9d8c2f1The DSN is split into a public key (the part before @) and a project ID (the path). You can rotate the key at any time — old events with the old key are rejected within five minutes (DSN cache TTL).
4. Install an SDK
Pick the platform you ship on:
- React Native SDK — install via npm, one
initcall. - Flutter SDK — pubspec dependency,
TillPulse.initinmain().
React Native — minimum viable install
npm install @tillpulse/react-native @react-native-async-storage/async-storage
cd ios && pod install// App.tsx
import TillPulse from '@tillpulse/react-native'
await TillPulse.init({
dsn: 'https://<key>@ingest.tillpulse.io/<id>',
release: '1.4.0',
environment: 'production',
})Flutter — minimum viable install
# pubspec.yaml
dependencies:
tillpulse_flutter: ^0.1.0Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await TillPulse.init(
options: TillPulseOptions(
dsn: 'https://<key>@ingest.tillpulse.io/<id>',
release: '1.4.0',
environment: 'production',
),
appRunner: () => runApp(const MyApp()),
);
}5. Trigger a test event
After init, throw an exception or call captureMessage to confirm events are flowing:
TillPulse.captureMessage('Hello from getting-started', 'info')
// or
throw new Error('Test crash from getting-started')Open the dashboard. Within ~10 seconds the Onboarding wizard's Wait for first event step flips to ✓ and you'll see the event under the project's Issues tab.
6. Identify users (optional but recommended)
TillPulse.setUser({
id: hashedUserId, // NEVER raw PII
segment: 'pro',
subscription: 'paid',
})
TillPulse.setTag('region', 'ng')
TillPulse.setTag('network_type', '3g')TillPulse never accepts a raw email or phone as a user identifier. Hash it client-side first (SHA-256 is fine — we only use it for de-duplication).
7. Configure your first alert
Go to Alerts → Rules → New rule. The most useful starter alert is issue_spike — fires when an issue's event rate breaches a threshold:
{
"trigger_type": "issue_spike",
"conditions": { "threshold": 50, "window_minutes": 15, "severity": "high" },
"actions": [{ "type": "slack", "webhook_url": "https://hooks.slack.com/..." }]
}See the full list of trigger types and delivery channels in Alerts & integrations.
8. Invite your team
Onboarding step 5 sends bulk invites by email. Roles available:
owner— full access, billing, deletionadmin— settings, integrations, API keysdeveloper— issues, releases, source mapsviewer— read-only
You're done
That's the whole onboarding loop. From here, the most-asked next steps are:
- Upload source maps / dSYM / ProGuard so stack frames are readable.
- Connect Slack, Linear, or Jira for alert + ticket sync.
- Self-host the dashboard on Cloudflare Pages.