Appearance
Slots
Slots define where your extension UI renders within the Stripchat interface. Each slot is an iframe managed by the platform. You declare which slots your extension uses in manifest.json under views.slots. The platform validates that every declared slot is allowed for your extension's category.

Available Slots by Extension Category
Games & Fun
Required
Optional
- None
Important notice for Games & Fun extensions
Either EXTENSION_SLOT_RIGHT_OVERLAY or EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY is required for Games & Fun extensions. You can use only one of these two slots.
Sex Toys
Required
Optional
Chat bots
Required
Optional
EXTENSION_SLOT_MAIN_GAME_FUN
The primary slot for Games & Fun extensions. It renders inside the "Send Tip" panel under the "Games & Fun" tab.
This slot has two views:
Preview card — shown in the extension list. Displays the "Extension image", "Extension name", and "Viewer summary" configured in the Extension Platform. The layout is fully controlled by Stripchat.

Tab view — when the viewer selects your extension, the platform renders your EXTENSION_SLOT_MAIN_GAME_FUN slot HTML page in the content area below the category header.

What to put here: game rules and participation UI, tipping controls, interactive challenges, spin wheels, quizzes, leaderboards — anything that drives viewer engagement through clear calls to action and fast feedback loops.
WARNING
This slot can be unmounted at any time (e.g. when the viewer closes the "Send Tip" panel). Do not place core application logic here — use the EXTENSION_SLOT_BACKGROUND slot instead.
EXTENSION_SLOT_MAIN_SEX_TOY
The primary slot for Sex Toys extensions. It works the same way as EXTENSION_SLOT_MAIN_GAME_FUN but appears under the "Sex Toy" tab in the "Send Tip" panel.
Preview card — shown in the extension list. Displays the "Extension image", "Extension name", and "Viewer summary" configured in the Extension Platform. The layout is fully controlled by Stripchat.

Tab view — when the viewer selects your extension, the platform renders your EXTENSION_SLOT_MAIN_SEX_TOY slot HTML page in the content area below the category header.

What to put here: toy connection status, vibration presets, control handover UI, intensity sliders, real-time feedback indicators — anything related to hardware interaction with clear state and model-side controls.
WARNING
This slot can be unmounted at any time (e.g. when the viewer closes the "Send Tip" panel). Do not place core application logic here — use the EXTENSION_SLOT_BACKGROUND slot instead.
EXTENSION_SLOT_RIGHT_OVERLAY
A floating slot located on the right side of the video stream. It is hidden by default and can be opened by clicking the extension icon.
The slot has two states:
- Collapsed (default) — only the extension icon (uploaded via the "Extension Icon" field in the Extension Platform) is visible over the video stream.
- Expanded — a panel opens on the right side of the video stream (50% width, 70% height) where the platform renders your HTML page.

What to put here: the main game interface, interactive elements, real-time feedback, progress bars, animation — anything that requires viewer attention during the stream without opening the "Send Tip" panel.
WARNING
This slot can be unmounted at any time (e.g. when the viewer collapses the overlay). Do not place core application logic here — use the EXTENSION_SLOT_BACKGROUND slot instead.
EXTENSION_SLOT_MOVEABLE_OVERLAY
A draggable overlay on the model's broadcast page, currently available only for Sex Toys extensions. Intended for model-facing controls and feedback.
To use this slot, you must also define a moveableSlot object in the manifest and include an icon.svg in the archive root.

Collapsed state
The default state shows your extension icon.svg with a status dot. It cannot be force-expanded by code — only user interaction can trigger expansion.

Expanded state
When expanded, your HTML page loads into the overlay container:
- Desktop/Web — constrained to the dimensions defined in
moveableSlot(max450x740px). - Mobile — renders full-viewport.

What to put here: model-facing controls — toy connection state, vibration intensity, control handover buttons, preset selectors, or any UI the model needs during a live broadcast.
WARNING
This slot can be unmounted at any time (e.g. when the model collapses the overlay). Do not place core application logic here — use the EXTENSION_SLOT_BACKGROUND slot instead.
EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY
A visual slot that renders on top of the video stream, but behind the EXTENSION_SLOT_RIGHT_OVERLAY and player controls. It becomes visible when the viewer requests activity by using v1.ext.activity.request.
It takes 100% of the video player dimensions. You should make sure your content scales well and works across different aspect ratios, both horizontal and vertical.

What to put here: animations, celebratory effects, gamified feedback — anything that adds fun and excitement to the stream.
This slot is not interactive.
The EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY slot does not receive pointer events and should not be used for interactive UI elements. Use the EXTENSION_SLOT_RIGHT_OVERLAY slot for any interactive features instead.
WARNING
This slot can be unmounted at any time. Do not place core application logic here — use the background slot instead.
EXTENSION_SLOT_BACKGROUND
A non-visual slot that runs in a hidden iframe. It does not render any UI to the user.
The EXTENSION_SLOT_BACKGROUND slot is available for all extension categories.
What to put here: long-running orchestration logic — timers, polling, state machines, centralized state management, cross-slot coordination via whisper messages.
Do Not Make Unconditional Backend Requests Here
Unlike other slots, the EXTENSION_SLOT_BACKGROUND slot is loaded automatically and immediately for every viewer who has the extension on their page — no user interaction required. This means that on a popular stream, thousands of viewers can have your EXTENSION_SLOT_BACKGROUND slot running at the same time.
Never call backend actions unconditionally from this slot. Doing so will send a request to your server from every viewer simultaneously, which can overwhelm your backend and cause an outage.
Only trigger backend actions in response to user interactions or meaningful events — never on initialization.