Skip to main content

TomorrowOS API Overview

TomorrowOS is a unified API layer for digital signage operating systems. The goal is to give developers, CMS vendors and integrators one clean way to build signage apps, CMS players, widgets and device experiences across different platforms. Instead of every project needing separate logic for each screen OS, TomorrowOS exposes a shared command surface. The CMS talks to devices over WebSocket using dotted method names such as device.info.getCapabilities and device.content.setPolicy. Platform details stay inside the player runtime.

How tos is created

In the examples below, tos is a TomorrowOS SDK instance. It comes from constructing the TomorrowOS class exported by @tomorrowos/sdk:
After that:
  • tos.device(deviceId).sendCommand(...) sends a device command
  • tos.pairing.* handles pairing
  • tos.playlists.* manages playlists and policy publish
You can name the variable anything (tomorrowos, client, etc.). This overview uses tos as a short alias for the SDK instance.

Core API principle

Every TomorrowOS API should follow this principle:
Check capability first. Execute safely second. Report clearly third.
This means a developer should be able to ask:
Then act safely:
And report clearly if the feature is unsupported or failed on that device.

Main API domains

Information API

The Information API tells you what the device is, and what it can do. Current methods:
CMS helpers around the same domain:

device.info.get

Returns basic identity and hardware information about the connected screen or player. Example:
Expected response data:
Use this to show device details in a CMS, store model / firmware metadata, or decide which devices need attention.

device.info.getCapabilities

Returns which TomorrowOS device commands are supported on the connected runtime. This is the capability check step before calling hardware-facing commands such as reboot, screenshot or on/off timer. Example:
Expected response data:
Support statuses: Always call device.info.getCapabilities before relying on reboot, screenshot, on/off timer or other hardware-facing commands.

Playback API

TomorrowOS does not expose a low-level play() RPC for each media item. Playback is driven by content policy. The CMS publishes playlists; the player applies them and handles images, videos, widgets, schedules and fallbacks. Example:
Clear everything and return to brand fallback:
Current methods:
CMS helpers that build and push policy:
What the player handles after setPolicy:
  • Images
  • Videos
  • Widgets / packaged HTML
  • Playlist schedules
  • Brand fallback
  • Offline cache and recovery behaviour

Transition API

The Transition API is not a separate public command today. Transition behaviour lives inside the player when it moves between playlist items after device.content.setPolicy. It covers:
  • Image to image
  • Image to video
  • Video to image
  • Video to video
  • Image / video to widget
  • Widget back to media
  • Playlist handoff and resume after reconnect / reboot
Current surface:
Design goal: prevent black gaps, flickers and failed content handovers without requiring CMS code to orchestrate each frame swap.

Asset API

The Asset API manages content files on the CMS side and cache behaviour on the device side. CMS apps upload and register media; the player downloads, verifies and activates assets before they appear on screen. Example CMS flow:
Important behaviours:
  • Media upload and registration on the CMS
  • Absolute URL rewriting when building device policy
  • Local cache on the player
  • Partial download / failed download handling
  • Storage pressure and cleanup
  • Atomic activation before visible playback
  • Fallback if activation fails
Current surface:

Sync API

The Sync API today focuses on connection continuity rather than multi-screen video walls. It covers pairing, reconnect, resume after reboot, and pushing the latest policy when a device comes back online. Example:
Current methods / events:
Sync considerations already handled in the runtime:
  • Reconnect after network loss
  • Resume after reboot
  • Resume after re-pair
  • Latest vs snapshot policy push
  • Recovery when one screen drops offline
Frame-accurate video wall sync is not a public API yet.

Display API

The Display API handles screen-level controls where supported. Example:
Clear the timer:
CMS helpers:
Current methods:
Notes:
  • setOnOffTimer uses daily HH:mm times (turnOnAt / turnOffAt must differ)
  • When active, the panel can mute / unmute on schedule while the device stays connected
  • device.power.reboot asks the device to reboot and resume afterwards where supported
  • Display control is often model / firmware dependent — always check device.info.getCapabilities first

Network API

The Network API helps understand connectivity and offline behaviour. There is no separate device.network.* command set yet. Connectivity is observed through device presence and heartbeat. Current surface:
Useful for:
  • Offline detection
  • Reconnect logic
  • Content caching
  • Playback fallback
  • Network health reporting

Telemetry API

The Telemetry API captures a screenshot from the device. Example:
Expected response data shape:
Current method:
Always check device.info.getCapabilities first. Screenshot support can vary by runtime and device.

Example full flow

API design rules

TomorrowOS APIs should be:
  • Simple to read
  • Easy to use
  • Capability-first
  • Honest about limitations
  • Safe by default
  • Clear when unsupported
  • Practical for real signage deployments
  • Useful across multiple OS environments
  • Flexible enough for CMS vendors and integrators

Summary

This API overview reflects the shipped command surface used by TomorrowOS apps today: