discord.js Guide
Interactive components

Action rows

Action rows are a layout component with five "slots" that can be filled with other components. At the time of writing this guide, buttons take up one slot and select menus take up five "slots". Accordingly, each ActionRow can hold up to 5 buttons or a single select menu. A message can have up to five rows without providing the IsComponentsV2 message flag. If you want to place buttons or action rows into the message body, they have to be wrapped inside rows.

Read our guide section on display components if you want to learn more about those.

Building action rows

To create an action row, use the ActionRowBuilder class and the ActionRowBuilder#addComponents method to add buttons or a select menu.

const row = new ActionRowBuilder().addComponents(component);

If you're using TypeScript, you'll need to specify the type of components your action row holds. This can be done by specifying the component builder you will add to it using a generic parameter in ActionRowBuilder.

new ActionRowBuilder() 
new ActionRowBuilder<ButtonBuilder>() 

Sending action rows

Once one or many components are inside your row(s), send them in the components property of your InteractionReplyOptions (extends BaseMessageOptions).

const row = new ActionRowBuilder().addComponents(component);

await interaction.reply({ components: [row] });

To learn how to create the buttons and select menus that will go inside your row, including more detailed examples on how you might use them, continue on to the other pages in this section.