
{"id":10266,"date":"2022-06-21T09:11:43","date_gmt":"2022-06-21T09:11:43","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/"},"modified":"2024-12-04T14:10:49","modified_gmt":"2024-12-04T14:10:49","slug":"rdkshell","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/","title":{"rendered":"RDKShell"},"content":{"rendered":"\n <div class=\"toc-macro client-side-toc-macro  conf-macro output-block\" data-headerelements=\"H1,H2,H3,H4,H5,H6,H7\" data-hasbody=\"false\" data-macro-name=\"toc\"> <\/div><h2 class=\"wp-main-header wp-block-heading\">Introduction<\/h2><ul><li>RDKShell is a native component that provides application management, composition, and advanced key handling.&nbsp;&nbsp;<\/li><li>Lightning\/RDKShell solution replaces the existing Spark\/Optimus based app launcher on RDK Firebolt &reg; builds.<\/li><li>RDKShell will be able to launch \/ suspend \/ resume \/ kill native apps, web apps and Lightning apps.<\/li><\/ul><h2 class=\"wp-main-header wp-block-heading\"><span>Architecture<\/span><\/h2><p class=\"with-breadcrumbs\">The RDKShell component has dependencies on Westeros, Essos, and OpenGL ES 2.0.RDKShell uses Westeros to create a Wayland surface or display for applications to connect itself to.<\/p><p class=\"with-breadcrumbs\">RDKShell provides a set of APIs for the system or applications to control the display and the positioning of the application windows on screen.&nbsp;&nbsp;<\/p><p class=\"with-breadcrumbs\">RDKShell connects to either the native windowing system or to a Wayland compositor.It achieves this flexibility and functionality by using Essos.<\/p><p class=\"with-breadcrumbs\">By default, RDKShell will render its display to a native window (EGL).<\/p><p class=\"with-breadcrumbs\">RDKShell also provides a Thunder API.This API allows applications to communicate with RDKShell using JSON-RPC if desired.Alternatively,there are C++ APIs to interact with RDKShell directly in native code.<\/p><p>    \n\n<\/p><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2023\/09\/RDKShell%20Architecture.drawio.png\"><br><strong>Key Handling Sequence<br><br><\/strong>RDKShell allows for applications to register for key events that they may be interested in even if they are not the focused application.By default, all key events go to the currently focused application.However, an application can request to intercept a key if desired. If the key is intercepted then the focused app will not receive the key event unless if it intercepts the key as well.&nbsp;&nbsp;<strong><br><br><\/strong>    \n\n<img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2023\/09\/Keyhandlingsequence.drawio.png\"><h2 class=\"wp-main-header wp-block-heading\"><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\">RDKShell API<\/span><\/h2><p>RDKShell controls the management of composition, layout, Z order, and key handling.<\/p><p><span>It is accessible through a Thunder API:&nbsp;<span>&nbsp;<\/span><\/span>RDKShell<\/p><ul><li>For API information please refer&nbsp;<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><a href=\"https:\/\/rdkcentral.github.io\/rdkservices\/#\/api\/RDKShellPlugin\" rel=\"nofollow\">RDKShell API<\/a><\/span><\/li><\/ul><p><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction RDKShell is a native component that provides application management, composition, and advanced key handling.&nbsp;&nbsp; [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":10264,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-10266","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RDKShell - RDK Documentation Portal | Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RDKShell - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"Introduction RDKShell is a native component that provides application management, composition, and advanced key handling.&nbsp;&nbsp; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-04T14:10:49+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/\",\"name\":\"RDKShell - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"datePublished\":\"2022-06-21T09:11:43+00:00\",\"dateModified\":\"2024-12-04T14:10:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Documentation\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"RDK Video\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Sub-Systems\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/?page_id=10158\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Application Management\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"RDKShell\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/\",\"name\":\"RDK Documentation Portal | Documentation\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RDKShell - RDK Documentation Portal | Documentation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/","og_locale":"en_US","og_type":"article","og_title":"RDKShell - RDK Documentation Portal | Documentation","og_description":"Introduction RDKShell is a native component that provides application management, composition, and advanced key handling.&nbsp;&nbsp; [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2024-12-04T14:10:49+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/","name":"RDKShell - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"datePublished":"2022-06-21T09:11:43+00:00","dateModified":"2024-12-04T14:10:49+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/rdkshell\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":2,"name":"Documentation","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":3,"name":"RDK Video","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/"},{"@type":"ListItem","position":4,"name":"Sub-Systems","item":"https:\/\/developer.rdkcentral.com\/documentation\/?page_id=10158"},{"@type":"ListItem","position":5,"name":"Application Management","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/application_management\/"},{"@type":"ListItem","position":6,"name":"RDKShell"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website","url":"https:\/\/developer.rdkcentral.com\/documentation\/","name":"RDK Documentation Portal | Documentation","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/comments?post=10266"}],"version-history":[{"count":3,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10266\/revisions"}],"predecessor-version":[{"id":11851,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10266\/revisions\/11851"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10264"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=10266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}