Skip to main content
All shared components are exported from src/components/index.ts. Import them from the stremio/components alias:
import { MetaItem, MetaRow, MetaPreview, Video } from 'stremio/components';
These components are internal to the application. They are not published as a standalone package.
File: src/components/MainNavBars/MainNavBars.tsx The primary application shell layout. Renders a HorizontalNavBar across the top, a VerticalNavBar on the left, and a content area for children.
<MainNavBars route="board" query="">
    {/* page content */}
</MainNavBars>
Props:
PropTypeDescription
classNamestringAdditional CSS class
routestringActive route ID used to highlight the correct vertical nav tab
querystringSearch query forwarded to the horizontal nav bar
childrenReactNodePage content rendered inside the nav layout
Vertical nav tabs defined in MainNavBars.tsx:
IDLabelHref
boardBoard#/
discoverDiscover#/discover
libraryLibrary#/library
calendarCalendar#/calendar
addonsADDONS#/addons
settingsSETTINGS#/settings

HorizontalNavBar / VerticalNavBar

File: src/components/NavBar/ Low-level navigation bar primitives consumed by MainNavBars. Can also be used independently for custom layouts. HorizontalNavBar props include route, query, backButton, searchBar, fullscreenButton, and navMenu. VerticalNavBar accepts a tabs array and a selected route ID. File: src/components/SearchBar/ Search input component used inside the horizontal nav bar. Manages its own local input state and debounces changes.

Media display

MetaItem

File: src/components/MetaItem/MetaItem.js A single content card — the fundamental unit for displaying movies, series, channels, and other media items in grids and rows.
<MetaItem
    type="movie"
    name="The Dark Knight"
    poster="https://..."
    posterShape="poster"
    progress={42}
    deepLinks={{ metaDetailsVideos: '#/metadetails/movie/tt0468569' }}
/>
Key props:
PropTypeDescription
typestringContent type (movie, series, channel, etc.) Used for fallback icon
namestringItem title displayed below the poster
posterstringPoster image URL
posterShape'poster' | 'landscape' | 'square'Aspect ratio of the poster container
posterChangeCursorbooleanShow a pointer cursor on the poster
progressnumberWatch progress percentage (0–100). Shows a progress bar
newVideosnumberCount of new unwatched videos. Shows a badge overlay
watchedbooleanWhether the item is fully watched. Shows a checkmark overlay
optionsarrayContext menu options shown in a three-dot menu
deepLinksobjectNavigation links. The component prefers metaDetailsStreams, then metaDetailsVideos, then player
datasetobjectArbitrary data passed back in optionOnSelect
optionOnSelectfunctionCalled when a context menu option is selected
onDismissClickfunctionRenders a dismiss (×) button when provided
onPlayClickfunctionRenders a play button when provided

MetaRow

File: src/components/MetaRow/MetaRow.js A labelled horizontal row of MetaItem cards, used to display a catalog preview on the Board and Discover screens.
<MetaRow
    title="Top movies"
    catalog={catalog}
    itemComponent={MetaItem}
/>
Key props:
PropTypeDescription
titlestringOverride for the row title. Defaults to the catalog’s own title
catalogobjectCatalog object from core state. Provides items, deep links, and title
itemComponentElementTypeComponent used to render each item (usually MetaItem)
messagestringReplaces the item list with a message string (e.g. for empty or error states)
notificationsobjectNotification counts forwarded to each item
Displays up to CONSTANTS.CATALOG_PREVIEW_SIZE items. Renders a “See all” button when the catalog has a deepLinks.discover or deepLinks.library URL.

MetaPreview

File: src/components/MetaPreview/MetaPreview.js The detail panel shown on the right side of the MetaDetails route — title, logo, background, description, links, ratings, and action buttons. Key props:
PropTypeDescription
compactbooleanRenders a compact layout without background image
namestringContent title
logostringLogo image URL
backgroundstringBackground image URL
runtimestringDuration string (e.g. "142 min")
releaseInfostringRelease year or year range
releasedstringISO date string
descriptionstringPlot description
deepLinksobjectNavigation links for the watch/play action
linksarrayStructured links (IMDB, genres, cast, etc.) rendered as MetaLinks
trailerStreamsarrayTrailer stream objects
inLibrarybooleanWhether the item is in the user’s library
toggleInLibraryfunctionCalled when the user clicks add/remove library
ratingInfoobjectRating data rendered by the Ratings sub-component

Video

File: src/components/Video/Video.js An episode/video list item used inside the MetaDetails route. Handles spoiler blurring, watched state, progress, and a context menu for per-video and per-season actions. Key props:
PropTypeDescription
idstringVideo identifier
titlestringVideo title
thumbnailstringThumbnail URL
seasonnumberSeason number
episodenumberEpisode number
releasedstringRelease date
upcomingbooleanWhether the episode has not aired yet
watchedbooleanWatched state
progressnumberWatch progress (0–100)
scheduledbooleanWhether the episode is in the user’s calendar
seasonWatchedbooleanWhether the entire season is watched
selectedbooleanWhether this video is the currently selected one (scrolls into view)
deepLinksobjectLinks for player and meta details navigation
onMarkVideoAsWatchedfunctionCalled with (id, released, watched)
onMarkSeasonAsWatchedfunctionCalled with (season, seasonWatched)
Thumbnail spoiler blurring is controlled by profile.settings.hideSpoilers — thumbnails are blurred for unwatched episodes when the setting is enabled.

LibItem

File: src/components/LibItem/ Library item card. Similar to MetaItem but with library-specific actions and layout.

ContinueWatchingItem

File: src/components/ContinueWatchingItem/ Variant of a media card used in the Continue Watching section. Includes dismiss and play actions.

Image

File: src/components/Image/ Image component with a renderFallback prop. Renders the fallback when the image fails to load or is absent.

Input

Button

File: src/components/Button/ Base interactive element. Renders as an <a> when href is provided, otherwise as a <div> with keyboard and pointer event handling.

TextInput

File: src/components/TextInput/ Styled text input with change and submit handlers.

NumberInput

File: src/components/NumberInput/ Numeric input with increment/decrement controls.

Checkbox

File: src/components/Checkbox/ Boolean toggle rendered as a checkbox.

RadioButton

File: src/components/RadioButton/ Single-selection radio button.

Toggle

File: src/components/Toggle/ On/off switch rendered as a sliding toggle.

Slider

File: src/components/Slider/ Horizontal range slider.

ColorInput

File: src/components/ColorInput/ Color picker input.

Multiselect

File: src/components/Multiselect/ Dropdown menu that supports single or multi-selection. Used for context menus on MetaItem and Video.

MultiselectMenu

File: src/components/MultiselectMenu/ The dropdown panel rendered by Multiselect.

Chips

File: src/components/Chips/ Horizontal list of selectable filter chips.

Overlay and modal

ModalDialog

File: src/components/ModalDialog/ General-purpose modal dialog with a title and close button. Renders via the Modal portal system, locking focus inside the dialog. File: src/components/Popup/ Anchored popup panel. Used for context menus and dropdowns that must appear near a trigger element.

BottomSheet

File: src/components/BottomSheet/ Mobile-style bottom sheet that slides up from the bottom of the screen.

ContextMenu

File: src/components/ContextMenu/ Right-click context menu rendered at the cursor position.

AddonDetailsModal

File: src/components/AddonDetailsModal/ Modal that shows full details for an addon — description, version, catalogs, and install/remove actions.

EventModal

File: src/components/EventModal/ Modal variant for calendar events.

SharePrompt

File: src/components/SharePrompt/ Modal prompt for sharing a content link.

Layout and utility

HorizontalScroll

File: src/components/HorizontalScroll/ Container that enables horizontal scrolling with mouse wheel and pointer drag support.

DelayedRenderer

File: src/components/DelayedRenderer/ Defers rendering of its children until after a configurable delay. Used to avoid rendering off-screen content on initial mount.

Transition

File: src/components/Transition/ CSS transition wrapper for mount/unmount animations.

ShortcutsGroup

File: src/components/ShortcutsGroup/ Displays a labelled group of keyboard shortcuts. Used inside the shortcuts modal opened by the shortcuts keyboard action.

Build docs developers (and LLMs) love