Add from: Widgets → Add widget → YouTube / embed
What an entry can be
The unified embed widget accepts fiveEMBED_ENTRY_KINDS:
| Kind | URL example | Renders as |
|---|---|---|
youtube | https://www.youtube.com/watch?v=… | Embedded YouTube player. |
iframe | Any https:// URL | Sandboxed iframe with allow-scripts allow-same-origin allow-popups allow-presentation. |
discord_invite | https://discord.gg/… | Server invite card with online count, fetched from the public guild widget. |
telegram | https://t.me/… | A CTA link tile — not an iframe. Tapping opens Telegram in a new tab. |
link | Any https:// URL | Plain button — opens in a new tab (no modal). |
youtube literal is kept on disk for backwards compatibility — the widget itself is named “YouTube / embed” in the dashboard and any entry kind is allowed inside it.
Per-entry fields
| Field | What it does |
|---|---|
| Kind | Picks one of the five types above. Defaults to youtube for legacy videos[] rows. |
| URL | The link. Required at save time. Up to 2,048 chars. |
| Label | Pill / card title (max 80 chars). |
| Description (optional) | Subtitle text under the label (max 400 chars, plain text — markdown is not parsed here). |
| Thumbnail URL (optional) | Override the auto-generated thumbnail (only used in button mode card placement; embed mode renders the live iframe). |
Display modes
Each widget has one mode for all its entries:Button mode (embedRender: "button", default)
Every entry is a card with thumbnail + label + description. Tapping opens the content in a modal centered in your card (so visitors don’t navigate away).
Telegram and link entries skip the modal — they open in a new tab directly.
Best for:
- Mixed embeds (YouTube videos + a Discord invite + an external website).
- Pages where you want a clean grid and don’t want auto-playing iframes loading on first paint.
Embed mode (embedRender: "embed")
Each entry renders inline:
youtube/iframe— live iframe.discord_invite— full server invite card.telegram/link— still a CTA link tile (no inline iframe —t.medoesn’t allow embedding).
- A single hero video.
- Always-visible content like a Twitch player or a Spotify playlist.
Grid columns
youtubeGridColumnsPerRow accepts 1–4 (or omit for auto-fit).
Limits
- 12 entries per widget (
entries.max(12)). - 16 widgets per profile.
- URLs capped at 2,048 chars; labels at 80; descriptions at 400.
- Iframe sandbox:
allow-scripts allow-same-origin allow-popups allow-presentation.
Common questions
My YouTube video isn't loading
My YouTube video isn't loading
Check the URL is the standard
youtube.com/watch?v= or youtu.be/ form. Live streams sometimes need to be public (not unlisted) for embedding.The iframe shows 'refused to connect'
The iframe shows 'refused to connect'
Some sites block being embedded (X-Frame-Options / CSP). There’s nothing we can do — the site’s owner has to allow embedding. Use a link button kind instead.
Can I embed a SoundCloud / Spotify playlist?
Can I embed a SoundCloud / Spotify playlist?
Yes — paste their
https://open.spotify.com/embed/... or https://w.soundcloud.com/player?... URL into an iframe entry.Why doesn't my Telegram entry render inline?
Why doesn't my Telegram entry render inline?
Telegram doesn’t allow
t.me URLs to be iframed. The telegram kind always renders as a CTA link tile that opens Telegram in a new tab.My Discord invite doesn't show online members
My Discord invite doesn't show online members
Make sure the invite is permanent (set to never expire in Discord) and the Server Widget is enabled in the server’s settings → Widget.