Skip to content

Latest commit

ย 

History

814 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“บ TizenPortal

Tizen License

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).


โœจ Features

๐Ÿš€ Portal Launcher

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

๐Ÿ”ง Site Enhancement

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)

๐ŸŽฎ Remote Control Support

  • 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

๐Ÿ“ฅ Installation

This project is designed to be loaded via TizenBrew on your Samsung TV.

  1. Open TizenBrew on your Samsung TV
  2. Add Module: axelnanol/tizenportal
  3. Launch TizenPortal from your TizenBrew dashboard

TizenBrew will open the portal and inject the runtime into all navigated pages.


๐ŸŽฎ Usage

Adding Sites

  1. Press Enter on the "+" card
  2. Fill in the site details:
    • Name: Display name for the card
    • URL: Full URL including http:// or https://
  • Site-specific Bundle: Select a compatibility bundle
  • Icon: Optional - click "Fetch Favicon" or enter a custom URL

Editing Sites

  • Focus a site card and long-press Enter to open the editor
  • Changes auto-save; press Close when finished

Navigating Sites

  1. Select a site card and press Enter to open
  2. Use D-pad for navigation or press ๐ŸŸข Green for mouse mode
  3. Press ๐ŸŸก Yellow to return to the portal

Address Bar

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

Preferences

  • 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

Color Button Reference

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

๐Ÿ—๏ธ Architecture

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)           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key Points

  • 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

๐Ÿ†• Recent Updates

  • 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)

๐Ÿ“š Documentation

Additional Resources


๐Ÿ”’ Security

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.


๐Ÿค Compatibility

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

๐Ÿ™ Acknowledgments

This project uses code and inspiration from the following sources:


๐Ÿ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A browser shell for Samsung Smart TVs running Tizen OS

Topics

Resources

Contributing

Security policy

Stars

8 stars

Watchers

0 watching

Forks

Sponsor this project

Used by

Contributors

Languages