How to design a Discord embed in the web panel, preview it live, post it to a channel, save it for reuse, and move embeds in and out as JSON.
The Embed Builder is a utility in the guild dashboard that lets you design a Discord embed — the rich, colored message card Discord bots can post — without writing any JSON by hand. You fill out a form that matches Discord's embed specification, see a live preview of exactly what Discord will render, and then either post the embed straight to one of your server's channels or save it under a name so you can load it again later.
The page lives at Embed Builder inside the Utility section of the guild dashboard sidebar. The whole feature is free — there is no Premium gate.
The Embed Builder is a privileged utility. Only the following can open the page:
Moderators and support team members do not see the Utility section and cannot reach the Embed Builder. See Dashboard Roles for how these roles relate.
The page is split into four areas, stacked vertically:
A row of action buttons sits at the bottom of the builder form: Clear, Import JSON, Export JSON, Save embed, and Post to Discord.
The form fields mirror Discord's embed specification one-to-one. Every field is optional except the channel picker, which is only required when you post. Leaving a field blank means that part of the embed is simply omitted — Mokito never sends empty blocks to Discord.
A searchable channel picker. Start typing a channel name and the list filters to matches from your server's text and announcement channels. You can also paste a channel ID directly. This is the channel the embed will be posted to when you click Post to Discord.
An optional text field (max 2000 characters) for the message body sent above the embed. Use this for a ping, an intro line, or any text you want shown outside the embed card itself. If you leave it blank, only the embed is posted — no message body.
A color picker plus a hex input, kept in sync. Pick a color visually or type a 3- or 6-digit hex code (with or without a leading #). The color becomes the thin vertical bar on the left edge of the embed on Discord. If you clear the hex field entirely, Discord uses its default blurple (#5865F2).
The author block sits at the very top of the embed. It has three fields:
If you supply only an icon or only a URL, the author block still renders with whichever parts you provided.
The title is the embed's headline (max 256 characters). The optional Title URL turns the title into a clickable link. Both are optional — an embed with only a description and no title is perfectly valid.
The main body text of the embed (max 4096 characters). Discord renders basic markdown here — bold, italics, links, code blocks, lists. This is where most of your content goes.
Fields are name/value pairs shown in the body of the embed, below the description. The form starts with no fields; click Add field to add one. Each field row has:
You can add up to 25 fields. Inline fields are grouped up to 3 per row, matching how Discord lays them out. Non-inline fields each take a full row.
Two image URL fields:
Both expect a direct image URL (https). Unsupported or broken URLs are hidden gracefully — the embed still posts, just without that image.
The footer sits at the bottom of the embed. It has three fields:
Setting a timestamp without footer text still shows the timestamp line in the footer.
The right-hand panel shows a Discord-styled render of the embed that updates as you type. It uses the same embed styles Discord itself uses, so what you see in the preview is what Discord will render when you post. The preview updates on every keystroke and field change.
The preview shows:
If the embed is completely empty, the preview area is blank. Add a title, description, or field to see it render.
Click Save embed to keep a copy of the current embed for later. A modal asks for a name (1–100 characters). The embed is saved to this server's saved-embeds list, along with the channel you had picked.
Saved embeds appear in the Saved embeds grid at the bottom of the page, most recently updated first. Each card shows the embed name, a "updated …" time, and the channel (if one was remembered).
If you save an embed with a name that already exists in this server, the existing embed is overwritten with the new content. This is intentional — it lets you iterate on a saved embed without collecting stale duplicates. There is no "duplicate name" error.
Click Load on any saved-embed card to drop that embed back into the builder form. The form fields, color, fields, footer, and remembered channel are all restored. The JSON textarea is also populated so you can see the underlying JSON.
Click the trash button on a saved-embed card to delete it. A confirmation modal appears before the delete is applied. Deleting a saved embed does not delete any messages you already posted to Discord — it only removes the saved copy from this server's list.
Click Post to Discord to send the current embed to the channel you picked. Mokito posts the message as the bot, in the chosen channel, in your server. On success, a toast appears with an Open in Discord link that jumps straight to the posted message.
If Discord rejects the message (for example, the channel was deleted, the bot lacks permission, or a URL is malformed), the actual error is shown in the toast so you know what to fix.
Click Export JSON in the builder to produce a JSON representation of the current form. The JSON is placed in the JSON textarea at the bottom of the page and copied to your clipboard. The shape is Discord's native message payload:
{
"content": "Optional message text above the embed",
"channel_id": "1234567890123456789",
"embeds": [
{
"title": "Embed title",
"url": "https://example.com",
"description": "Main body text.",
"color": 5793266,
"author": { "name": "Author", "icon_url": "https://…" },
"footer": { "text": "Footer text" },
"image": { "url": "https://…" },
"thumbnail": { "url": "https://…" },
"fields": [
{ "name": "Field 1", "value": "Value 1", "inline": true }
],
"timestamp": "2026-06-26T12:00:00+00:00"
}
]
}
The channel_id key is Mokito's addition — Discord's message payload does not include it, but Mokito keeps it so a saved embed remembers which channel you were targeting. The color value is a 24-bit integer (the hex value converted to decimal), which is how Discord represents embed colors on the wire.
You can also go the other way: paste JSON into the JSON textarea and click Apply to form. The builder reads the JSON and fills in every form field, adds the right number of field rows, sets the color, restores the channel, and re-renders the preview. The import accepts either the full Discord-shape payload (above) or a flat form shape — Mokito handles both.
Mokito enforces all of Discord's documented embed limits. The form fields have matching maxlength attributes, and the server validates again before posting or saving. If an embed is too long, you get a clear error telling you the current and maximum character counts.
| Part | Limit |
|---|---|
| Message content (above the embed) | 2000 characters |
| Embed title | 256 characters |
| Embed description | 4096 characters |
| Field name | 256 characters |
| Field value | 1024 characters |
| Footer text | 2048 characters |
| Author name | 256 characters |
| Number of fields | 25 per embed |
| Total embed characters | 6000 combined |
The 6000-character total is the sum of title, description, field names, field values, footer text, and author name. Discord silently truncates beyond this; Mokito refuses to post instead, so you know exactly how far over you are.
The two actions are fully independent:
You can save without posting, post without saving, or do both. A common workflow is to build an embed, save it, then post it — that way the saved copy stays available for next time.
#) is accepted. Invalid hex is ignored and Discord's default blurple is used.