Skip to main content
Embeds are fine, but they’re rigid. Containers are Discord’s newer layout system: a bordered block with a coloured accent bar that you fill with headers, text, images, thumbnails and buttons in whatever order you like. Anywhere you can write an embed script, you can write a container instead.

Opening a container

Everything after it that starts with container. (or box., etc.) belongs to that container. Open a second {box} to start a new one.

What goes inside

Both support full Discord markdown, including -# subtext and > quotes.
Aliases: sep, divider, hr. Pass large (or lg / big) for more breathing room; anything else gives the small spacing.
Aliases: img, gallery, media, photo, pic. Multiple URLs separated by | become a media gallery — Discord lays them out as a grid.
A section is text with a thumbnail floated beside it.
Aliases: sec, row. The text part accepts text, label, description, desc, content or body; the image part accepts thumbnail, thumb, image, img or icon.{box.thumbnail: <url>} is the shorthand for a thumbnail with no text next to it.
Identical to top-level buttons, just scoped inside the container:
Set on the opening node, or separately afterwards:
{box.dominant} pulls the colour from the first Discord-hosted image in the container.

Container vs embed

Neither is better — they’re for different shapes of message. You can use both in one message — a container plus an embed plus plain content all render together.

A worked example

A welcome message that actually looks designed:
Build it with !embed first so you can see it, tweak it, and only paste it into !welcome add once you’re happy. !copyembed on the result gives you the script back if you lose it.

Limits

Discord enforces these, not the bot:
  • 40 components total per message
  • 10 buttons, across a maximum of 5 rows
  • 4000 characters across all text in the message
  • Media gallery items must be reachable image URLs
Going over any of these means the message won’t send. If a script silently fails to appear, this is usually why — trim it down and try again.