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
| Field | Description | Example |
|---|---|---|
release | Semantic version | "1.2.3" |
dist | Build/distribution number | "45" |
environment | Environment name | "production" |
updateId | OTA update identifier | "abc123..." |
updateChannel | OTA update channel | "production" |
Expo OTA Updates
With Expo, you have two versioning layers:
- Native build (
release+dist) - App store version - 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.