TizenPortal is a browser shell for Samsung Smart TVs running Tizen OS. It provides a launcher for managing any websites and injects site-specific fixes for TV compatibility (self-hosted apps like Audiobookshelf are a great fit, but not required).
A TV-friendly launcher with customizable themes to manage your sites in one place.
- Grid-based layout optimized for TV remote navigation
- TizenPortal branding with Portal-inspired icon and themes
- Site editor for adding/editing apps with custom names and icons
- Bundle selector for choosing compatibility fixes per-site
Runs as a TizenBrew module to inject fixes into any site.
- Unified Registry System - Features and userscripts managed through a consistent registry-based API
- Declarative bundle system - Bundles are primarily configuration, which can significantly reduce repetitive DOM manipulation code
- Bundle CSS/JS applied automatically
- Element registration API for focusable elements, styling, and DOM manipulation
- Card registration for multi-element interactive cards
- Viewport locking and focus tooling for responsive sites
- Cross-origin safe (iframe access is limited; runtime guards access)
- D-pad navigation with spatial focus
- Color buttons for quick actions:
- ๐ด Red: Address bar overlay
- ๐ข Green: Mouse mode toggle
- ๐ก Yellow: Preferences (portal) / Return to portal (sites)
- ๐ต Blue: Diagnostics panel
This project is designed to be loaded via TizenBrew on your Samsung TV.
- Open TizenBrew on your Samsung TV
- Add Module:
axelnanol/tizenportal - Launch TizenPortal from your TizenBrew dashboard
TizenBrew will open the portal and inject the runtime into all navigated pages.
- Press Enter on the "+" card
- Fill in the site details:
- Name: Display name for the card
- URL: Full URL including
http://orhttps://
- Site-specific Bundle: Select a compatibility bundle
- Icon: Optional - click "Fetch Favicon" or enter a custom URL
- Focus a site card and long-press Enter to open the editor
- Changes auto-save; press Close when finished
- Select a site card and press Enter to open
- Use D-pad for navigation or press ๐ข Green for mouse mode
- Press ๐ก Yellow to return to the portal
Press ๐ด Red to open the address bar overlay with browser controls:
- โ Return to portal ย ๐ Site home ย โ Back ย โ Forward ย โป Reload
- URL field โ Press Enter to edit, type a new address
- โ Go โ Navigate to the entered URL
- โน Info โ Open TizenPortal documentation
- Press ๐ก Yellow on the portal to open Preferences
- Theme modes: Light, Dark, Automatic (Sunset), Portal (Blue & Orange), Custom Backdrop, Custom Colours
- Debug HUD position: Off / Top Right / Top Left / Bottom Right / Bottom Left
- Portal hints (color button labels)
- Viewport lock mode, focus outline mode, and user agent mode
- Auto-focusable elements, scroll-into-view, safe area inset
- GPU hints, CSS normalization, hide scrollbars
- Text input protection: prevents the TV keyboard from opening until Enter is pressed
| Button | Short Press | Long Press |
|---|---|---|
| ๐ด Red | Address Bar | Reload Page |
| ๐ข Green | Toggle Mouse | Edit Card (portal) / Focus Highlight (sites) |
| ๐ก Yellow | Preferences (portal) / Return to portal (sites) | Add Site (portal) / Return to portal (sites) |
| ๐ต Blue | Diagnostics | Safe Mode |
TizenPortal uses a Universal Runtime architecture:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TizenBrew โ
โ 1. Loads module from GitHub tag โ
โ 2. Opens websiteURL (portal) in browser โ
โ 3. Injects tizenportal.js into ALL pages โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Portal Page โ
โ - Runtime detects it's on the portal โ
โ - Renders site card grid โ
โ - User selects card โ navigates with #tp= payload โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Target Site โ
โ - Runtime detects it's NOT on portal โ
โ - Reads #tp= payload for bundle name โ
โ - Applies bundle CSS/JS โ
โ - Provides overlay UI (address bar, diagnostics) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Single runtime (
tizenportal.js) on all pages - Cross-origin safe โ Payload passed via URL hash; iframe access is guarded
- Full DOM access โ Runtime runs in page context
- Bundles compiled in โ All bundles included in runtime
- Unified Registry System โ Features and userscripts now share a consistent registry-based architecture
- Manifest System โ Bundle metadata now defined in manifest.json with validation
- Bundle Options โ Bundles can declare per-site options (with URL fetch support)
- Preferences Overhaul โ Theme modes, custom colours, backdrop, and HUD position
- Adblock Enhancements โ Strict mode, allowlist, cookie/inline heuristics
- Text Input Protection โ Prevents OSK auto-popup (toggle in Preferences)
- User Guide โ Complete feature walkthrough
- Security Guide โ Security features and best practices
- Bundle Authoring โ How to create site-specific bundles
- Unified Registry โ Registry system for features and userscripts
- Manifest Schema โ Bundle manifest.json reference
- API Reference โ TizenPortal JavaScript API
- Architecture โ System design and structure
- Getting Started โ Quick start guide for new users
- FAQ โ Frequently asked questions
- Troubleshooting โ Common issues and solutions
- Contributing โ How to contribute or fork the project
- Adblock Bundle โ Usage guide and performance benchmarks
- Audiobookshelf Bundle โ Bundle documentation
TizenPortal is designed with security as a priority:
- โ Zero vulnerabilities in dependencies (npm audit)
- โ Comprehensive input sanitization (XSS prevention)
- โ Secure URL handling (blocks javascript:, data:, etc.)
- โ Safe DOM manipulation (no eval or innerHTML with user data)
- โ Regular security audits (see Security Guide)
Important: Userscripts run with full page access. Only enable scripts you trust and have reviewed. See the Security Guide for details.
| Feature | Support Level |
|---|---|
| Target OS | Samsung Tizen 3.0 - 6.5 |
| Browser Engine | Chrome 47 - 69 (Tizen's Chromium) |
| Tested Apps | โ Audiobookshelf |
| Built-in Bundles | default, audiobookshelf, adblock |
This project uses code and inspiration from the following sources:
- WICG/spatial-navigation โ Spatial navigation polyfill (
spatial-navigation-polyfillnpm package), modified with cross-origin guards and UMD wrapper fix - Financial-Times/polyfill-library โ DOMRect polyfill
- TizenTube โ Inspiration and approach for Tizen TV compatibility
- TizenBrew โ Module loading platform
This project is licensed under the MIT License - see the LICENSE file for details.