On this page
JavaScript API

discord.js builders

Allowed discord.js builder exports for embeds, buttons, selects, and modals in sandbox scripts.

Import builders via require('discord.js'). Only builder classes and constants are allowed — not Client, REST, or WebhookClient.

Allowed builders

Export Use
EmbedBuilder Rich embed messages
AttachmentBuilder File attachments
ActionRowBuilder Component row container
ButtonBuilder Interactive buttons
StringSelectMenuBuilder Text dropdown
UserSelectMenuBuilder User picker
ChannelSelectMenuBuilder Channel picker
RoleSelectMenuBuilder Role picker
MentionableSelectMenuBuilder User or role picker
ModalBuilder Popup forms
TextInputBuilder Modal text fields
SlashCommandBuilder Slash command definitions
ContextMenuCommandBuilder Context menu definitions

Constants

ChannelType, ButtonStyle, ComponentType, TextInputStyle, PermissionFlagsBits, ActivityType

Embed example

const { EmbedBuilder } = require('discord.js');

const embed = new EmbedBuilder()
  .setTitle('Stats')
  .setColor(0x5865f2)
  .addFields({ name: 'Coins', value: '100', inline: true });

await interaction.reply({ embeds: [embed] });

Button row example

const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');

const row = new ActionRowBuilder().addComponents(
  new ButtonBuilder()
    .setCustomId('yes')
    .setLabel('Yes')
    .setStyle(ButtonStyle.Success),
  new ButtonBuilder()
    .setCustomId('no')
    .setLabel('No')
    .setStyle(ButtonStyle.Danger),
);

await interaction.reply({ content: 'Confirm?', components: [row] });

Blocked exports

These throw at runtime:

  • Client — use the global client object instead
  • ShardingManager
  • WebhookClient
  • REST