DOCS · GETTING STARTED

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-14e5b9d8c2f1

The 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 — 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.0
Future<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, deletion
  • admin — settings, integrations, API keys
  • developer — issues, releases, source maps
  • viewer — read-only

You're done

That's the whole onboarding loop. From here, the most-asked next steps are: