Samsung TV (Tizen)
Samsung Tizen is a first-class Hosanna Web DOM target. It shares views, AppConfig, layout, storage, networking, and debugger protocol with Browser, while its initializer supplies Samsung remote input, lifecycle, Voice Guide, and AVPlay integration.
The production-ready target includes the native playback, PlayReady, captions, Voice Guide, persistence, lifecycle, packaging, and device workflows described below. The supported baseline is Tizen 5.5 (2020 TV, Chromium 69); older televisions are outside the supported range.
Run the target
Use desktop emulation for the fast feedback loop:
npx hst run tizen dev emulator
Build without contacting a television:
npx hst build tizen prod device --non-interactive \
--signing-profile samsung-tv-prod
After Samsung Developer Mode, device trust, and signing are configured, install and launch on a named device:
npx hst run tizen dev device --device "living-room-samsung" \
--signing-profile samsung-tv-dev
hst build returns the .wgt artifact and stops. hst run ... device adds
discovery, install, and launch through Samsung's CLI. Inspection and
termination are explicit operations:
npx hst device:inspect tizen --device "living-room-samsung"
npx hst device:terminate tizen --device "living-room-samsung"
The inspector command uses the manifest's full application ID, forwards Samsung's returned debug port to loopback through SDB, and opens the printed local URL. Inspector availability depends on Developer Mode and the selected TV model.
Runtime boundaries
| Concern | Implementation |
|---|---|
| Rendering | Shared Web DOM SceneGraph implementation |
| Input | TizenRemoteInputAdapter; browser preview uses WebKeyboardTizenInputAdapter |
| Video | Shared SGVideo semantics over a Samsung AVPlay slot |
| Captions | Shared Hosanna-rendered sidecar WebVTT overlay; in-stream tracks come from AVPlay |
| Audio guide | Samsung Voice Guide adapter and setting observation |
| Lifecycle | Visibility plus unload/before-unload signals normalized to Hosanna lifecycle state |
| Storage | Shared Web storage and package-relative filesystem implementation |
| Debugging | Existing Remote Debug/MCP WebSocket protocol over the TV-to-development-machine LAN route |
The Tizen target does not bundle Shaka, hls.js, or dash.js. Browser keeps its browser streaming engines; Tizen delegates adaptive playback and PlayReady translation to AVPlay. Applications should advertise PlayReady only when their content service, license configuration, privileges, and target models support it.
The PlayReady implementation maps static content.drmHeaders to AVPlay.
Callback-driven drmHttpAgent handling is not available on this slot and emits
a diagnostic instead of pretending the callback ran.
Input and Back
Directional keys, OK, and Back are normalized to HsInputEvent. Optional media and color keys are registered through tizen.tvinputdevice. Back key code 10009 enters the dedicated Tizen adapter directly; the old synthetic Roku event and delayed key-up workaround are not part of this target.
Long-press Back can be reserved by the TV operating system. Validate tap, hold, and app-exit behavior on every model family the application intends to claim.
Media and captions
The AVPlay slot implements playback state, current time, duration, seeking, audio/subtitle tracks, display rectangle, PlayReady translation, and suspend/restore. Hosanna keeps the public SGVideo content, control, playlist, state, and error contract. Desktop preview exercises the shared contract; device runs use AVPlay and the television's decoder and video plane.
Sidecar subtitle metadata uses content.subtitleTracks; TrackName contains the WebVTT URI. The shared caption renderer follows native player time. Verify the application's caption layout over Samsung's hardware video plane on its target models.
See TV video and sidecar captions.
Accessibility
The Tizen audio-guide adapter updates a retained focusable ARIA proxy for Samsung Voice Guide and observes the system Voice Guide setting through TV Info. Enable use.voiceguide metadata and the tvinfo privilege in config.xml.
Samsung does not expose the same arbitrary-utterance completion callback as browser speech synthesis. Hosanna uses bounded completion timing to keep its queue moving; listen for stale, clipped, or overlapping announcements on hardware.
Release checklist
For each application release, verify on representative target models:
- signed
.wgtinstall, launch, explicit HST terminate/inspect operations, and no-argument test relaunch through Tizen driver terminate/launch; - bounded same-file MCP query reload for test-rig navigation, without representing it as a Samsung launch-CLI deep link;
- relative
file://assets, fonts, AppConfig, localStorage, and IndexedDB after a cold restart; - remote press/release/repeat/long-press behavior;
- MP4, HLS MPEG-TS, HLS fMP4, track selection, configured PlayReady streams and license flow, and lifecycle recovery;
- WebVTT synchronization and overlay z-order;
- Voice Guide enabled before launch and toggled after launch;
- TV-to-Mac debugger/MCP connectivity under the exact development CSP, plus proof that production CSP excludes debugger origins; and
- the current Samsung certification checklist.
Continue with Building for Samsung TV.