Skip to main content

Release Tracking

Track which version of your application introduced a bug.

Why Release Tracking?

Release tracking helps you:

  • Identify regressions - "This error started in v1.2.3"
  • Filter by version - See errors for a specific release
  • Link source maps - Symbolicate stack traces for each release
  • Track OTA updates - Know if an Expo update caused issues

Basic Setup

Browser

Syntropy.init({
projectId: 'your-project-id',
release: '1.2.3', // Semantic version
dist: '45', // Build number (optional)
environment: 'production', // Environment name
});

Node.js

Syntropy.init({
projectId: 'your-project-id',
release: process.env.npm_package_version,
environment: process.env.NODE_ENV,
});

React Native / Expo

import * as Application from 'expo-application';
import * as Updates from 'expo-updates';

Syntropy.init({
projectId: 'your-project-id',

// Native app version
release: Application.nativeApplicationVersion ?? '1.0.0',
dist: Application.nativeBuildVersion ?? undefined,

// Environment
environment: __DEV__ ? 'development' : 'production',

// OTA updates (Expo-specific)
updateId: Updates.updateId ?? undefined,
updateChannel: Updates.channel ?? undefined,
});

Release Fields

FieldDescriptionExample
releaseSemantic version"1.2.3"
distBuild/distribution number"45"
environmentEnvironment name"production"
updateIdOTA update identifier"abc123..."
updateChannelOTA update channel"production"

Expo OTA Updates

With Expo, you have two versioning layers:

  1. Native build (release + dist) - App store version
  2. OTA update (updateId + updateChannel) - JavaScript bundle

When an error occurs, you'll know if it was caused by:

  • A new native build
  • An OTA JavaScript update
// Example: User on native build 1.2.3, OTA update abc123
{
"release": "1.2.3",
"dist": "45",
"updateId": "abc123-def456",
"updateChannel": "production"
}

Best Practices

Use Semantic Versioning

release: '1.2.3'  // major.minor.patch

Include Build Numbers

dist: process.env.BUILD_NUMBER || '1'

Set Environment

environment: process.env.NODE_ENV  // 'development', 'staging', 'production'

Automate in CI/CD

# GitHub Actions example
- name: Build
env:
REACT_APP_VERSION: ${{ github.ref_name }}
REACT_APP_BUILD: ${{ github.run_number }}
run: npm run build

Filtering by Release

In the Syntropy dashboard, you can:

  • Filter errors by release version
  • See when an error first appeared (which release)
  • Compare error rates between releases
  • Identify which releases have the most issues

Source Maps

Link source maps to releases for readable stack traces:

syntropy sourcemaps upload \
--project your-project-id \
--version 1.2.3 \
--path ./dist

See Source Maps for more details.