# Workers Background scripts that run continuously on TelemetryOS devices # What are Workers? Workers are background scripts that run continuously on TelemetryOS devices, even when your application isn't currently visible in the playlist. They enable background processing, data synchronization, and scheduled tasks without requiring a visible UI. Workers handle tasks like: * Fetching data from external APIs * Synchronizing with inventory or CMS systems * Monitoring device health * Caching content for offline use * Background analytics collection * Scheduled data updates ## How Workers Work Workers are defined in your `telemetry.config.json` file and start when the playlist containing your application is loaded. They continue running in the background, even when the playlist moves to other pages. ```json { "name": "my-app", "version": "1.0.0", "mountPoints": { "render": "/render" }, "workers": [ { "script": "./workers/sync.js" } ] } ``` ## Example Worker **workers/sync.js:** ```javascript import { configure, store } from '@telemetryos/sdk'; configure('my-app'); async function syncData() { try { // Fetch fresh data from external API const response = await fetch('https://api.example.com/data'); const data = await response.json(); // Store for application to use await store().application.set('latest-data', data); console.log('Data synced successfully'); } catch (error) { console.error('Sync failed:', error); } // Schedule next sync setTimeout(syncData, 60000); // Every minute } // Start sync loop syncData(); ``` ## Worker Context * **Runs on:** Physical devices only * **Lifecycle:** Starts when playlist is loaded, continues running in background * **SDK Access:** Full SDK API available (storage, media, playlist, etc.) * **No DOM access:** Workers are JavaScript contexts without browser DOM ## Communication with Render Workers communicate with your render view through the Storage API: ```javascript // Worker writes data await store().application.set('weather-data', weatherInfo); // Render subscribes to changes store().application.subscribe('weather-data', (data) => { updateDisplay(data); }); ``` ## Best Practices 1. **Error handling** - Workers must be resilient to failures and network issues 2. **Periodic execution** - Use `setTimeout` or `setInterval` for scheduling 3. **Resource management** - Be mindful of CPU and memory usage on devices 4. **Graceful degradation** - Applications should work if worker fails 5. **Logging** - Log important events for debugging in production ## Learn More For complete details on workers, including lifecycle, configuration, and advanced patterns, see the [Mount Points documentation](https://docs.telemetryos.com/docs/mount-points).