Skip to content

Widgets

Live signage elements generated from Canvas Relay's authoritative widget registry. Dynamic sources are normalized and cached by Canvas Relay; players do not call third-party APIs directly. Device support, data source, refresh, offline behavior and setup fields below stay synchronized with the runtime.

Clock

Free plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Current time — digital or analog face.

Digital or analog, any IANA timezone, 12/24-hour. Pair it with the hours widget for an 'open now' corner.

SettingTypeDefaultNotes
faceenum (digital | analog)"digital"
formatenum (12 | 24)"12"
showSecondsbooleanfalse
showDatebooleanfalse
timezonestringnull
colorcolor"#FFFFFF"

QR code

Free plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ snapshotAndroid/Google TV: browserFire TV: browser

Scannable link — menus, reviews, Wi-Fi, promos.

Point it at your review page, Wi-Fi details, or a signup link. Give it a quiet zone (padding) and test-scan from the farthest seat.

SettingTypeDefaultNotes
urlurl""
labelstring""
darkcolor"#000000"
lightcolor"#FFFFFF"

Business hours

Free plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ snapshotAndroid/Google TV: browserFire TV: browser

Weekly opening hours with a live open/closed status.

Set your weekly hours once; the widget shows today's hours and flips between 'open now' and 'closed' on its own.

SettingTypeDefaultNotes
titlestring"Hours"
highlightTodaybooleantrue
timezonestringnull
colorcolor"#FFFFFF"
accentcolor"#34D399"
monOpenstring""
monClosestring""
tueOpenstring""
tueClosestring""
wedOpenstring""
wedClosestring""
thuOpenstring""
thuClosestring""
friOpenstring""
friClosestring""
satOpenstring""
satClosestring""
sunOpenstring""
sunClosestring""

Countdown

Creator plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Days/hours/minutes to a date — "opens in", events, deadlines.

Counts down to a date/time — 'opens in 3 days', 'happy hour in 45 min'. Pick the target and the labels.

SettingTypeDefaultNotes
targetAtstring""
labelstring"Opens in"
doneTextstring"We're open!"
colorcolor"#FFFFFF"
accentcolor"#F59E0B"

Image slideshow

Creator plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Rotating photos from your media library, crossfaded.

Pick up to 6 images from your media library and a crossfade cadence. Uses your cached media, so it plays fully offline.

SettingTypeDefaultNotes
image1medianull
image2medianull
image3medianull
image4medianull
image5medianull
image6medianull
intervalSecnumber83–60
fitenum (cover | contain)"cover"

Weather / Forecast

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Current conditions plus a configurable 3–5 day forecast using commercial-safe open weather data.

Live conditions for a latitude/longitude via the built-in weather provider — no API key needed. Cached briefly; offline it shows the last fetch.

Data: MET Norway Locationforecast 2.0

Use/license: CC BY 4.0; commercial reuse permitted with attribution

Attribution: Weather data: MET Norway (CC BY 4.0)

Refresh: 20-minute shared public cache; never fetched more often than every 15 minutes.

Limits: No delivery SLA. Requests identify Canvas Relay and respect MET cache guidance. Daily highs/lows are derived from MET's hourly forecast points in the configured timezone.

SettingTypeDefaultNotes
latitudenumber38.72-90–90
longitudenumber-75.08-180–180
timezonestring"America/New_York"
unitsenum (fahrenheit | celsius)"fahrenheit"
layoutenum (compact | card | forecast)"card"
forecastDaysnumber53–5
forecastHoursnumber123–24
showFeelsLikebooleantrue
showWindbooleantrue
showAttributionbooleantrue
themeenum (transparent | dark | light)"dark"
colorcolor"#FFFFFF"

Ticker

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Scrolling headlines — your own lines or an RSS feed.

A scrolling line of your own messages, or items from an RSS feed. Keep entries short — tickers are glanced at, not read.

SettingTypeDefaultNotes
itemsstring""
rssUrlurlnull
speedSecnumber305–120
colorcolor"#FFFFFF"
backgroundcolor"#111827"

Web embed

Pro plan and upOffline: hides itself until the network returns
Browser ✓Pi ✓Roku — unsupportedAndroid/Google TV: browserFire TV: browser

Embed a web page (sandboxed). Needs the screen to be online.

Embeds a web page in a sandboxed iframe. Online-only: offline it hides rather than showing a broken page. Some sites refuse embedding (X-Frame-Options) — that's their choice, not a bug.

SettingTypeDefaultNotes
urlurl""

YouTube

Pro plan and upOffline: hides itself until the network returns
Browser ✓Pi ✓Roku — unsupportedAndroid/Google TV: browserFire TV: browser

YouTube video, muted + looping. Online-only; heavy on Raspberry Pi — prefer uploaded video files there.

Plays a YouTube video muted and looping. Online-only, and heavy for a Raspberry Pi — prefer uploaded video files on Pi players.

SettingTypeDefaultNotes
videostring""
loopbooleantrue

Air Quality

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

AQI and health category from a customer-owned/open structured feed.

Data: Customer-provided JSON/CSV

Use/license: Customer/source controlled

Refresh: No more often than every 30 minutes; normally hourly.

Limits: Canvas Relay does not bundle a paid commercial AQI API. Use a feed you are licensed to display, including public-domain EPA data transformed to JSON/CSV.

SettingTypeDefaultNotes
sourceenum (json | csv)"json"
sourceUrlurlnull
titlestring"Air Quality"
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Tides / Marine

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

NOAA tide predictions for a CO-OPS station.

Data: NOAA CO-OPS Data API

Use/license: U.S. government/public-domain data unless specifically marked otherwise

Attribution: NOAA / Center for Operational Oceanographic Products and Services

Refresh: Fetches a multi-day prediction window and refreshes at most every 6 hours.

SettingTypeDefaultNotes
stationstring"8557380"
titlestring"Tides"
hoursnumber4812–168
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Earthquakes

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Recent USGS earthquake activity by magnitude and optional location.

Data: USGS Earthquake Catalog/FDSN

Use/license: USGS-produced data are U.S. public domain; source credit requested

Attribution: U.S. Geological Survey

Refresh: Shared cache; normally every 10 minutes.

SettingTypeDefaultNotes
latitudenumbernull-90–90
longitudenumbernull-180–180
radiusKmnumber100010–20000
minMagnitudenumber2.50–10
hoursnumber241–168
maxItemsnumber61–12
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Sunrise / Sunset / Moon

Pro plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Local sunrise, sunset, moon phase, and daylight calculations.

Data: Canvas Relay deterministic astronomy calculations

Use/license: No external data provider

Refresh: Calculated on-device from date/location; no recurring network request.

SettingTypeDefaultNotes
latitudenumber38.72-90–90
longitudenumber-75.08-180–180
timezonestring"America/New_York"
showMoonbooleantrue
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

World Clock

Pro plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Multiple city clocks calculated locally on the player.

Data: IANA timezone data on player/runtime

Use/license: No recurring external API

Refresh: Calculated locally every minute (or second when needed).

SettingTypeDefaultNotes
citiesrecord-list[{"label":"New York","timezone":"America/New_York"},{"label":"London","timezone":"Europe/London"},{"label":"Tokyo","timezone":"Asia/Tokyo"}]Use Add item; no raw JSON needed.
formatenum (12h | 24h)"12h"
showDatebooleanfalse
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Calendar / Agenda

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Google Calendar-first agenda with an ICS fallback for other calendar providers.

Data: Google Calendar API (primary) / customer-provided ICS fallback

Use/license: Customer-authorized Google Calendar data or customer-selected ICS source

Refresh: Five-minute tenant cache with ETag/last-known-good behavior.

Limits: Google mode requires a one-time OAuth connection. Private events default to Busy-only display so details are not exposed accidentally.

SettingTypeDefaultNotes
sourceenum (google | ics)"google"
calendarIdstring"primary"
feedUrlurlnull
titlestring"Agenda"
maxItemsnumber61–12
horizonHoursnumber726–336
privacyModeenum (details | busy | hide-private)"busy"
layoutenum (agenda | next-event | week)"agenda"
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

News Cards

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Headline cards from a licensed RSS or Atom feed.

Data: Customer-provided RSS/Atom feed

Use/license: Feed publisher/customer controlled

Refresh: Ten-minute cache; conditional/stale behavior is centralized.

Limits: The customer must have the right to publicly display/redistribute the selected feed content.

SettingTypeDefaultNotes
feedUrlurlnull
titlestring"Latest"
maxItemsnumber61–12
layoutenum (cards | list)"cards"
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Quotes / Messages

Pro plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Rotate customer-entered messages without any external quote service.

Data: Canvas Relay board configuration

Use/license: Customer-owned/entered content

Refresh: Change-driven; rotation is local.

SettingTypeDefaultNotes
messagesstring-list["Welcome!","Thanks for being here."]Add/reorder values in the inspector.
intervalSecnumber155–300
showQuotesbooleanfalse
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Google Reviews / Testimonials

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Latest reviews from an authorized Google Business Profile, with manual testimonials as a fallback.

Data: Google Business Profile Reviews API / manual testimonials

Use/license: Authorized first-party Business Profile content; Google API policies apply

Attribution: Reviews from Google Business Profile when Google mode is selected

Refresh: 15-minute tenant cache; temporary cached Google content is retained for at most seven days.

Limits: Google mode only works for profiles the signed-in merchant owns or manages. Canvas Relay's Google Cloud project must first receive Business Profile API access approval. No review scraping is used.

SettingTypeDefaultNotes
sourceenum (google | manual)"google"
accountIdstring""
locationIdstring""
maxItemsnumber101–20
reviewsrecord-list[{"quote":"Great service!","author":"Customer","rating":5}]Use Add item; no raw JSON needed.
intervalSecnumber205–300
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Social Feed

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Posts/cards from a customer-provided RSS/Atom, JSON, or CSV feed.

Data: Customer-provided feed/BYO structured source

Use/license: Customer/source controlled

Refresh: Ten-minute cache; five-minute hard minimum.

Limits: No expensive social-network API or scraping is bundled.

SettingTypeDefaultNotes
sourceenum (rss | json | csv)"rss"
sourceUrlurlnull
titlestring"Social"
maxItemsnumber61–12
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Transit Departures

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Departures from a public GTFS-Realtime Trip Updates feed.

Data: Customer-selected public GTFS-Realtime feed

Use/license: Varies by transit agency; customer must select a feed licensed for display

Refresh: One-minute hard minimum with source/query cache deduplication.

SettingTypeDefaultNotes
feedUrlurlnull
stopIdstring""
titlestring"Departures"
maxItemsnumber81–12
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Sports Scoreboard

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

OpenLigaDB scores and fixtures with an optional customer-owned JSON/CSV fallback.

Data: OpenLigaDB (built-in) or customer-provided JSON/CSV

Use/license: OpenLigaDB API data: Open Database License (ODbL); BYO feed terms are customer/source controlled

Attribution: Data: OpenLigaDB · ODbL

Refresh: Current scoreboards use a two-minute cache; completed data may remain cached longer. Roku never calls OpenLigaDB directly.

Limits: OpenLigaDB is community-maintained and strongest for football/German leagues. Team/league logos are intentionally not redistributed. JSON/CSV fallback remains available for other competitions.

SettingTypeDefaultNotes
sourceenum (openligadb | json | csv)"openligadb"
OpenLigaDB league code (e.g. bl1)string"bl1"
Season (e.g. 2026)string"2026"
Matchday / group numbernumbernull1–100
Team filterstring""
displayModeenum (scoreboard | current | recent | upcoming)"scoreboard"
sourceUrlurlnull
titlestring"Scores"
maxItemsnumber51–10
showKickoffbooleantrue
showStatusbooleantrue
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

KPI / Big Number

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

A signage-first number, label, and optional comparison.

Data: Canvas Relay/manual or customer-provided JSON/CSV

Use/license: Customer-owned/authorized data

Refresh: Manual values are change-driven; remote data has a one-minute hard minimum.

SettingTypeDefaultNotes
sourceenum (manual | json | csv)"manual"
sourceUrlurlnull
labelstring"Sales Today"
valuestring"1,248"
prefixstring""
suffixstring""
subtextstring""
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Progress / Goal Meter

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Actual-versus-target progress for sales, fundraising, or production.

Data: Canvas Relay/manual or customer-provided JSON/CSV

Use/license: Customer-owned/authorized data

Refresh: Change-driven/manual or five-minute cached remote source.

SettingTypeDefaultNotes
sourceenum (manual | json | csv)"manual"
sourceUrlurlnull
labelstring"Goal"
valuenumber72-1000000000000–1000000000000
targetnumber1000.000001–1000000000000
prefixstring""
suffixstring""
showPercentbooleantrue
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Data Table

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

TV-readable rows and selected columns from JSON/CSV.

Data: Customer-provided JSON/CSV

Use/license: Customer-owned/authorized data

Refresh: Five-minute cache with one-minute hard minimum.

SettingTypeDefaultNotes
sourceenum (json | csv)"csv"
sourceUrlurlnull
titlestring"Status"
columnsrecord-list[{"key":"name","label":"Name"},{"key":"value","label":"Value"}]Use Add item; no raw JSON needed.
maxRowsnumber101–30
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Leaderboard

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Rank employees, teams, scores, sales, or fundraising totals.

Data: Canvas Relay/manual or customer-provided JSON/CSV

Use/license: Customer-owned/authorized data

Refresh: Change-driven/manual or five-minute cached remote source.

SettingTypeDefaultNotes
sourceenum (manual | json | csv)"manual"
sourceUrlurlnull
titlestring"Leaderboard"
entriesrecord-list[{"label":"Team A","value":"100"},{"label":"Team B","value":"92"}]Use Add item; no raw JSON needed.
maxItemsnumber101–20
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Map / Directions

Pro plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku — unsupportedAndroid/Google TV: browserFire TV: browser

Display an OpenStreetMap destination with an address and directions link.

Data: OpenStreetMap interactive embed

Use/license: OpenStreetMap data is ODbL; tile/service use is subject to OSMF usage policies

Attribution: © OpenStreetMap contributors

Refresh: Browser-requested interactive tiles only; Canvas Relay does not prefetch or proxy OSM tiles.

Limits: Roku does not embed browser maps. The browser player sends ordinary Referer/browser requests and leaves attribution visible.

SettingTypeDefaultNotes
titlestring"Find Us"
destinationstring"Destination"
addressstring""
latitudenumber38.72-90–90
longitudenumber-75.08-180–180
zoomnumber153–18
showDirectionsLinkbooleantrue
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Wait Time / Queue

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

Show a current wait estimate, queue depth, status, and message from manual, public, or authenticated data.

Data: Manual, customer JSON/CSV, or encrypted Canvas Relay HTTP connector

Use/license: Customer-owned/authorized operational data

Refresh: Manual values are change-driven; remote sources have a one-minute hard minimum.

SettingTypeDefaultNotes
sourceenum (manual | json | csv | connector)"manual"
sourceUrlurlnull
connectorIdstring""
connectorPathstring""
titlestring"Current Wait"
valuenumber100–100000
peopleAheadnumber00–100000
statusstring"Open"
subtextstring""
prefixstring""
suffixstring" min"
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Authenticated Dashboard Snapshot

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku — unsupportedAndroid/Google TV: browserFire TV: browser

Securely fetch and display an image snapshot from a saved authenticated HTTP connector without storing credentials in the board.

Data: Canvas Relay encrypted HTTP connector

Use/license: Customer must be authorized to access and display the connected dashboard

Refresh: Five-minute cache by default with a one-minute hard minimum.

Limits: Snapshot endpoint must return an image. Credentials remain server-side and encrypted at rest.

SettingTypeDefaultNotes
connectorIdstring""
connectorPathstring""
titlestring"Dashboard"
fitenum (contain | cover)"contain"
backgroundcolor"#0A0F1C"

Inventory / Status

Pro plan and upOffline: keeps showing the last good data it fetched
Browser ✓Pi ✓Roku ✓ nativeAndroid/Google TV: browserFire TV: browser

TV-readable inventory, availability, equipment, room, or service status from manual, public, or authenticated data.

Data: Manual, customer JSON/CSV, or encrypted Canvas Relay HTTP connector

Use/license: Customer-owned/authorized operational data

Refresh: Manual values are change-driven; remote sources normally cache five minutes.

SettingTypeDefaultNotes
sourceenum (manual | json | csv | connector)"manual"
sourceUrlurlnull
connectorIdstring""
connectorPathstring""
titlestring"Inventory Status"
entriesrecord-list[{"name":"Example item","sku":"","quantity":"12","status":"In stock","detail":""}]Use Add item; no raw JSON needed.
columnsrecord-list[{"key":"name","label":"Item"},{"key":"quantity","label":"Qty"},{"key":"status","label":"Status"}]Use Add item; no raw JSON needed.
maxRowsnumber101–20
themeenum (transparent | dark | light)"dark"
accentcolor"#38BDF8"
textColorcolor"#FFFFFF"

Developer / Custom HTML

Pro plan and upOffline: fully static/local — no live network is required
Browser ✓Pi ✓Roku — unsupportedAndroid/Google TV: browserFire TV: browser

Sandboxed HTML/CSS for advanced browser signage. Scripts are opt-in and never receive same-origin access.

Data: Customer-authored sandboxed browser content

Use/license: Customer is responsible for code/content and third-party rights

Refresh: Change-driven; no Canvas Relay data polling.

Limits: Runs in an iframe sandbox. Script mode grants allow-scripts only, never allow-same-origin; Roku is unsupported.

SettingTypeDefaultNotes
htmlstring"<div class=\"card\">Custom HTML</div>"
cssstring"body{margin:0;font-family:system-ui;background:#111827;color:white}.card{padding:24px}"
javascriptstring""
allowScriptsbooleanfalse
backgroundcolor"#111827"