> ## Documentation Index
> Fetch the complete documentation index at: https://buttercms.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# The Component Picker

> Use the ButterCMS Component Picker to build flexible page layouts by selecting, adding, and reordering Components from an allowlist of predefined blocks.

The **Component Picker** field allows you to build dynamic landing pages.

Here's how it works in a nutshell:

1. Add a Component Picker field to a Page or Page Type.
2. Create an allowlist of Components to be used in the field - you can choose from existing Components, or create new ones.
3. When someone creates an instance of that Page or Page Type, they can select Components from that list.

<Tip>
  When someone adds Components from a Picker, they can add multiple instances of each Component, and they can add Components in any order.
</Tip>

In the below example, someone has set up a "Page Body" Component Picker field in a Page Schema. They've added two Components to the allowlist: a "Left content block", and a "Right content block".

{/* IMAGE_SOURCE: file_path="knowledge-base/content-modeling-basics/content-fields.md" */}

![Component Picker](https://cdn.buttercms.com/dTlwma0xS6WB1osbWCHS)

<Note>
  If a content creator were creating an instance of this Page Type, they might select Components to create a Page body like this:

  * Right content block
  * Left content block
  * Left content block
  * Right content block
</Note>

## Field at a glance

### Input and output

<CardGroup cols={2}>
  <Card title="Input type" icon="arrow-right-to-bracket">
    Component Picker field defined in the Page schema with your choice of field types
  </Card>

  <Card title="API output" icon="arrow-right-from-bracket">
    `array`
  </Card>
</CardGroup>

### API response

<Card title="Fetching Components from the API" icon="code" href="../../../build-your-app/rendering-complex-field-types/fetching-components#component-picker-dynamic-sections">
  Learn more about how Components are returned by the API, and how to model Component content in your app.
</Card>

### Field configuration and validation options

<Tip>
  Component fields don't have any configuration options of their own (except for the usage of [conditional fields](./conditional-fields-components)). Instead, each field you add to a component has its own [validation and configuration options](../fields-basics/configuring-and-validating-fields).
</Tip>

## Adding a Component Picker

<Steps>
  <Step title="Add the Component Picker Field">
    Click on the **Component Picker** option in the Page Type configuration sidebar:

    {/* IMAGE_SOURCE: file_path="knowledge-base/how-to/how-to-migrate-your-buttercms-blog-to-a-custom-page-type.md" */}

    ![Component picker field option](https://cdn.buttercms.com/0nxWV0UTSZqLb7BpZqJb)

    This will add the Component Picker to your page schema:

    {/* IMAGE_SOURCE: file_path="knowledge-base/how-to/how-to-migrate-your-buttercms-blog-to-a-custom-page-type.md" */}

    ![Page schema component picker field](https://cdn.buttercms.com/6HaP0GLTRuLFqJP7wgSA)
  </Step>

  <Step title="Name the Component Picker">
    Give the field a descriptive name. Common names include "Body", "Sections", or "Content Blocks".
  </Step>

  <Step title="Add Components to the Picker">
    Click on the **Add from Library** button and select the components that content editors should be able to use:

    {/* IMAGE_SOURCE: file_path="knowledge-base/how-to/how-to-migrate-your-buttercms-blog-to-a-custom-page-type.md" */}

    ![Component picker with components](https://cdn.buttercms.com/UPKu1G63TXu8A0PRNxKY)

    Or, you can define Components directly from inside the Component Picker.
  </Step>
</Steps>

## Using the Component Picker

### Adding Components

<Steps>
  <Step title="Open the Component Picker">
    In your Page, look for the Component Picker section. Pickers can be identified by the **Component Picker** button.

    Click on the button to add components:

    ![Select the Body component picker icon](https://cdn.buttercms.com/LBV4HhsQvW5BRJQ2EpA3)

    This opens a **Component Library** modal of Components that have been filtered to those in the Picker's allowlist.

    ![Select components from the Component Library](https://cdn.buttercms.com/tOeTiMqQGpZfdgqJ2NjA)
  </Step>

  <Step title="Choose a Component">
    Select from the available components, and a new component section will appear.
  </Step>

  <Step title="Fill in the Component Fields">
    Fill in the fields on the individual Components, and then Save or Publish the Page.

    ![Text Component](https://cdn.buttercms.com/P12yvhEZTbef6RcTjb76)

    ![Text Component](https://cdn.buttercms.com/GAwh6yt2SFm0QnQRGOiS)
  </Step>
</Steps>

### Cloning Components

You can clone Components within a picker with the <Icon icon="clone" /> ***clone icon***.

![Cloning components in picker](https://cdn.buttercms.com/FCI8jPgPTxm4pkYBSb9f)

### Expanding and collapsing Components

Click on the name of any Component in the Picker to expand or collapse it. You can also click on the **Expand All** button to expand all Components simultaneously.

{/* IMAGE_SOURCE: file_path="blog-posts/butter-updates/november-dashboard-enhancements.md" */}

![Expand Collapse Components](https://cdn.buttercms.com/foSRNdbNRamzl3TtpwEg)

<Tip>
  **Tip**: Collapse components you're not actively editing to keep your page easier to navigate, especially for pages with many components.
</Tip>

### Reordering Components

{/* IMAGE_SOURCE: file_path="knowledge-base/content-modeling-basics/create-dynamic-landing-pages-using-components.md" */}

{/* SOURCE: file_path="knowledge-base/how-to/how-to-build-components-and-manage-your-component-library.md" section="Re-ordering Components within a Component Picker" */}

To re-order Components, you simply have to drag & drop a Component up or down your content layout.

![Reordering components](https://cdn.buttercms.com/zYTngbcJQFi04gWmyBp9)

#### Using arrow controls

If you prefer not to drag, you can also use the arrow buttons:

1. **Locate the up/down arrows** next to the component name
2. **Click the up arrow** to move the component higher on the page
3. **Click the down arrow** to move the component lower
4. The page preview will reflect the new order

<Tip>
  Arrow controls are especially useful when you need to move a component just one or two positions, or when using a trackpad where drag-and-drop can be challenging.
</Tip>

<Info>
  **Pro Tip**: Collapse all components before reordering. This gives you a cleaner view of your page structure and makes drag-and-drop easier, especially for pages with many components.
</Info>

## Best practices

<AccordionGroup>
  <Accordion title="Limit available Components">
    Only include components that make sense for each Page Type. A careers page doesn't need a product pricing component.
  </Accordion>

  <Accordion title="Establish content guidelines">
    Document which components to use in which situations. Create a style guide for content editors.
  </Accordion>

  <Accordion title="Plan page structure">
    Before adding components, plan the page layout. Consider the user journey and information hierarchy.
  </Accordion>

  <Accordion title="Preview before publishing">
    Always preview the page to see how components render together before publishing.
  </Accordion>

  <Accordion title="Use consistent naming">
    Name Component Picker fields consistently across Page Types (e.g., always "Body" or always "Sections").
  </Accordion>
</AccordionGroup>

## Related topics

<CardGroup cols={2}>
  <Card title="Components: overview" icon="puzzle-piece" href="components-overview" />

  <Card title="Component Library overview" icon="book" href="component-library-overview" />

  <Card title="Conditional fields in Components" icon="sliders" href="conditional-fields-components" />

  <Card title="The Component Picker" icon="layer-plus" href="using-component-picker" />

  <Card title="Components: fetching via API and adding to the application" icon="download" href="../../../build-your-app/rendering-complex-field-types/fetching-components" />
</CardGroup>
