Telemetry Insights โ Understand Your Users Better ๐
Once your app is in users' hands, the obvious questions follow: How many people actually run it? Which version are they on? Which platforms should you prioritize? Shipping updates blind is guesswork โ faynoSync's built-in telemetry turns those questions into data.
The best part: it's privacy-first and you already have most of the plumbing. Telemetry is collected from the same /checkVersion calls your clients already make โ you just add one header. This post covers what's tracked, the critical X-Device-ID header, how to enable it, the beacon endpoint for SDK/edge flows, and how to read the data.
What is Telemetry? ๐คโ
Telemetry is faynoSync's built-in analytics layer that:
- ๐ Tracks user engagement and active clients
- ๐ Monitors version distribution and adoption
- ๐ Analyzes platform and architecture usage
- ๐ Aggregates it all into daily stats
It helps you make data-driven decisions about your application's future. Full reference: Telemetry System docs.
What You Can Track ๐ฏโ
1. Client Analyticsโ
- ๐ฅ Unique clients and active users
- ๐ฑ Platform distribution
- ๐ป Architecture breakdown
2. Version Insightsโ
- ๐ฆ Version adoption rates
- ๐ฏ Clients on the latest version vs. outdated clients
- ๐ Version distribution trends
3. Channel Analyticsโ
- ๐จ Channel popularity (stable, beta, nightly, alpha)
- ๐ Per-channel client counts
How it worksโ
Telemetry data is collected automatically when clients call the /checkVersion endpoint โ as long as they send the X-Device-ID header. For each request faynoSync records the device ID, app name, platform, channel, architecture, and reported version.
The data is stored in Redis with a 30-day retention period, aggregated daily, and organized by administrator โ application โ date โ metric. No separate database, no extra service.
The X-Device-ID header โ the part that matters mostโ
Telemetry is only collected when the client sends an X-Device-ID header. Without it, the request still works โ but it won't count toward your stats. This ID is what lets faynoSync count unique devices instead of raw requests.
GET /checkVersion?app_name=myapp&version=1.0.0&channel=stable&platform=darwin&arch=arm64
X-Device-ID: 3f6c1a8e-9b2d-4c77-bc1e-2a9f0d5e7a11
Implementation guidelinesโ
- Generate a UUID v4 (or similar) on first launch.
- Persist it in secure, durable storage on the device.
- Reuse the same ID across app restarts and updates.
- Never change it for an existing installation, or you'll double-count that user.
Keep it anonymousโ
The device ID must not contain any personal data:
- โ No names, emails, or account identifiers
- โ No IP addresses
- โ No sensitive data
It's an opaque identifier and nothing more. This is what keeps faynoSync telemetry privacy-first by design โ you control the ID, and a random UUID reveals nothing about the user.
How to Enable It ๐โ
Add this to your .env file:
ENABLE_TELEMETRY=true
That's the server side. Then make sure your clients send X-Device-ID on their /checkVersion calls, and stats start accumulating automatically.
Collecting telemetry without checkVersion: the beacon endpointโ
If your client doesn't call /checkVersion โ for example, SDK or edge flows where updates come from edge infrastructure โ use the dedicated /telemetry/beacon endpoint instead. It records the same data but is optimized for speed, validating requests against an in-memory snapshot rather than reading full metadata per call.
curl --location 'http://localhost:9000/telemetry/beacon?app_name=myapp&version=1.0.0&channel=stable&platform=linux&arch=amd64&owner=admin' \
--header 'X-Device-ID: 3f6c1a8e-9b2d-4c77-bc1e-2a9f0d5e7a11'
- Requires no auth token, but all query parameters and
X-Device-IDare required. - Returns
204 No Contenton success. - If you already call
/checkVersion, you do not need the beacon.
See Telemetry beacon and Edge and S3 Response Cache for the architecture behind it.
How to Access Insights ๐โ
Dashboardโ
Log in to your admin dashboard and open the Telemetry section to explore charts for clients, versions, platforms, and channels.
APIโ
GET /telemetry?range=week
Available query parameters:
| Parameter | Description |
|---|---|
date | Specific date (YYYY-MM-DD) |
range | Time range: week or month |
apps | Filter by application(s) |
channels | Filter by channel(s) |
platforms | Filter by platform(s) |
architectures | Filter by architecture(s) |
Reading the responseโ
The API returns aggregated stats. The summary block is where the headline numbers live:
{
"date": "2026-06-16",
"admin": "ku9n",
"summary": {
"total_requests": 1765,
"unique_clients": 1751,
"clients_using_latest_version": 167,
"clients_outdated": 1584,
"total_active_apps": 5
},
"platforms": [
{ "platform": "windows", "client_count": 229 },
{ "platform": "linux", "client_count": 215 },
{ "platform": "darwin", "client_count": 207 }
],
"channels": [
{ "channel": "stable", "client_count": 448 },
{ "channel": "beta", "client_count": 446 },
{ "channel": "nightly", "client_count": 435 }
],
"daily_stats": [
{ "date": "2026-06-15", "total_requests": 400, "unique_clients": 400, "clients_using_latest_version": 37, "clients_outdated": 363 }
]
}
What the key fields tell you:
unique_clientsโ real device count (thanks toX-Device-ID), not inflated by repeat polling.clients_using_latest_versionvsclients_outdatedโ your update adoption rate at a glance. In the example above, most clients are still on older builds โ a clear signal to investigate why updates aren't landing.platforms/architectures/channelsโ where to focus QA and build effort.daily_statsโ trends over time: growing user base, adoption after a release, lingering outdated clients.
The full response also includes a versions block with per-version client counts. See the complete example in the docs.
Access control & privacy ๐โ
- Per-admin isolation โ each administrator sees telemetry only for their own apps.
- Team users โ can view all statistics but can only filter/sort resources they have access to; access is verified by the API.
- Anonymous by design โ identification is via the opaque
X-Device-IDyou generate; no PII, no IP addresses. - 30-day retention โ data ages out automatically.
Limitations ๐โ
- Data is retained for 30 days.
- Statistics are only collected when
X-Device-IDis provided. - Team users have limited filtering capabilities.
- Data is aggregated daily (not real-time per request).
Best Practices ๐กโ
- Enable from day one โ telemetry is only as good as its history; you can't backfill.
- Generate device IDs correctly โ UUID v4, persistent, never reused or mutated.
- Review trends weekly โ watch adoption after each release and chase down outdated-client spikes.
- Let the data drive the roadmap โ prioritize the platforms and channels your users actually run.
How to try faynoSync?โ
-
Follow the Getting Started guide:
๐ https://faynosync.com/docs/getting-started -
Create your app using the REST API or web dashboard:
๐ฆ API Docs: https://faynosync.com/docs/api
๐ฅ๏ธ Dashboard UI: https://github.com/ku9nov/faynoSync-dashboard -
Set
ENABLE_TELEMETRY=trueand sendX-Device-IDfrom your clients. -
Open the Telemetry dashboard and start collecting insights. ๐
Related readingโ
- Rollout Health Reports โ Catch Failed Updates Before They Spread
- Scaling Update Checks with Edge + S3 Response Cache
- How to Setup Auto Update for Electron App
- Performance Mode โ Speed Up Your API
- Telemetry System docs
If you find this project helpful, please consider subscribing, leaving a comment, or giving it a star, create an Issue or feature request on GitHub.
Your support keeps the project alive and growing ๐
