SfSkills Domains Docs GitHub

Home / flow / screen-flow-choice-component-selection

screen-flow-choice-component-selection

Use when picking which Screen Flow component collects a choice from users — Picklist, Radio Buttons, Radio Button Group (Summer '26), Multi-Select Picklist, Checkbox Group, Choice Lookup, Dependent Picklists, or Data Table — and which Choice resource (Choice, Record Choice Set, Picklist Choice Set) populates it.

Open the skill folder on GitHub


Screen Flow Choice Component Selection

This skill activates when a builder must pick which Screen Flow component presents a set of options — and which Choice resource feeds it. Salesforce ships at least seven choice-oriented screen components plus a record-selection Data Table, each with different single/multi-select semantics, downstream compatibility, and set-size ergonomics. Salesforce maintains a dedicated decision-guide article for exactly this call, and Flow Builder even lets you swap between choice components after the fact — evidence that builders regularly pick the wrong one. Use this skill to make the choice deliberately instead of reaching for a Picklist by reflex.


Before Starting

Gather this context before working on anything in this domain:


Core Concepts

The component catalog

Every choice-collection decision resolves to one row of this catalog. Cardinality and Loop/Transform compatibility are the two properties that most often force the choice:

ComponentSelectionBest whenLoop / Transform
Picklist (dropdown)SingleMedium list; save vertical spaceCompatible
Radio ButtonsSingleShort list; show all options at onceCompatible
Radio Button Group (Summer '26)SingleShort list; compact stacked layoutCompatible
Choice LookupSingleLarge list; user searches then picks oneIncompatible
Dependent PicklistsSingle (chained)Options depend on a prior picklist valueCompatible
Checkbox GroupMultipleFew options; show all as checkboxesIncompatible
Multi-Select PicklistMultipleMany options; compact multi-selectIncompatible
Data TableSingle or multiple rowsSelect record(s) from a record collectionCollection output is Loop-friendly

Choice resources — what populates a component

A component is the widget; a Choice resource is the data. You mix and match:

The same Record Choice Set can back a Picklist, Radio Buttons, or a Checkbox Group — the resource and the component are independent decisions. Dependent Picklists and Choice Lookup are the exceptions: Dependent Picklists reads an org field dependency directly, and Choice Lookup draws from a choice source you configure on the component.

Single-select layout is a UX choice, not a behavior change

Picklist, Radio Buttons, and Radio Button Group are behaviorally identical — the user picks exactly one value. They differ only in layout. Radio Buttons render a vertical list where every option is visible; Radio Button Group "presents horizontally (desktop) or vertically (mobile devices) stacked choices that are compact and easier to scan" and "functions like the traditional Radio Buttons component where users select a single option at run time." A Picklist collapses the list into a dropdown to save space. Choice Lookup adds typeahead search for cases where even a dropdown is unwieldy. Because these are interchangeable at the data layer, Flow Builder lets you switch between choice components (the "Let Users Select Multiple Options" toggle also flips a single-select component to its multi-select equivalent) without rebuilding the screen.


Common Patterns

Right-size the single-select widget to the set size

When to use: the user picks exactly one value and you're deciding between Radio Buttons, Radio Button Group, Picklist, and Choice Lookup.

How it works: scale the widget to the number of options. A handful of options → Radio Buttons or Radio Button Group so every choice is visible at a glance (Radio Button Group when horizontal/compact scanning matters). A medium list → Picklist to reclaim vertical space. Dozens or hundreds of options → Choice Lookup, which "lets users search for and select one option from a set of choices on a flow screen" instead of forcing a scroll.

Why not the alternative: a Radio Buttons list of 40 options is unscannable and pushes the rest of the screen below the fold; a Picklist of 200 options is a scroll marathon. Matching widget to set size is the core of this skill.

Choose the multi-select component by downstream needs, not looks

When to use: the user selects several values and you're deciding between Checkbox Group and Multi-Select Picklist.

How it works: if the choice set is small and you want every option visible, use Checkbox Group; if it's long and you want a compact control, use Multi-Select Picklist. But first check what happens to the selection: all three multi-value components (Checkbox Group, Multi-Select Picklist, Choice Lookup) are incompatible with Loop and Transform elements. If a later Loop or Transform must process each selected value, neither multi-select component works — restructure around a Data Table over a record collection, whose selected-rows output is a collection a Loop can iterate.

Why not the alternative: teams pick Multi-Select Picklist for the compact UI, wire a Loop to the selection, and only discover at build time that the Loop can't reference it. Deciding on iteration before the component avoids a rebuild.

Reuse an existing field dependency instead of hand-building cascades

When to use: the value list for one picklist depends on the value chosen in another (Country → State, Product Family → Product).

How it works: the Dependent Picklists component "displays picklists in a flow screen where the options for one picklist depend on the selected value of another picklist using an existing field dependency in your org." Define the field dependency in Setup first, then drop the component on the screen — it reads the dependency automatically. The controlling field must be a picklist (with at least one and fewer than 300 values) or a checkbox on the same object.

Why not the alternative: simulating the cascade with two independent Picklists plus Decision elements or reactive formulas re-implements logic the platform already maintains, and drifts whenever the field dependency changes.


Decision Guidance

SituationRecommended ApproachReason
Pick exactly one, short list (~2–7)Radio Buttons or Radio Button GroupEvery option visible; Radio Button Group stacks compactly (Summer '26)
Pick exactly one, medium listPicklist (dropdown)Compact; reclaims vertical screen space
Pick exactly one, large/searchable listChoice LookupTypeahead search for one option among many
Options depend on a prior picklist valueDependent PicklistsReuses an existing org field dependency
Pick several, few optionsCheckbox GroupCheckbox layout shows all options
Pick several, many optionsMulti-Select PicklistCompact multi-select control
Selection must feed a Loop or TransformData Table over a record collection — not Checkbox Group / Multi-Select Picklist / Choice LookupThose three are incompatible with Loop and Transform
Select one or more records (rows)Data TableRow selection with a Loop-friendly collection output
Choices are filtered recordsAny component + Record Choice SetPresents a filtered set of records (respect record/FLS access)
Choices mirror an existing picklist fieldAny component + Picklist Choice SetTracks the field's values instead of a copy
Choices are a small fixed listAny component + Choice resourceManually entered values
Choices contain rich text or markupCheckbox Group, not Multi-Select PicklistMulti-Select Picklist doesn't support rich text and hides text between < and >

Step-by-step instructions for an AI agent or practitioner working on this task:

  1. Characterize the requirement — confirm single vs multiple selection, where the choices originate (static list, filtered records, an existing picklist field, or a field dependency), the expected set size, and whether the selection must be iterated in a Loop or Transform.
  2. Pick the cardinality lane — single-select (Picklist, Radio Buttons, Radio Button Group, Choice Lookup, Dependent Picklists), multi-select (Checkbox Group, Multi-Select Picklist), or record-row selection (Data Table).
  3. Choose the component within the lane — apply the Decision Guidance table, weighting set size, scannability, search, dependency, and target surface (desktop vs mobile).
  4. Choose the Choice resource — Choice, Record Choice Set, or Picklist Choice Set (or a field dependency for Dependent Picklists) to populate the component. Confirm a Record Choice Set exposes only records/fields the running user may see.
  5. Check downstream compatibility — if a Loop or Transform must process the selection, reject Checkbox Group / Multi-Select Picklist / Choice Lookup and redesign around a Data Table + record collection.
  6. Validate on target surfaces — verify layout on desktop and mobile, confirm no unstated maturity assumption for Radio Button Group, and run scripts/check_screen_flow_choice_component_selection.py against the flow metadata to catch Loop/Transform incompatibilities and oversized single-select lists.

Review Checklist

Run through these before marking work in this area complete:


Salesforce-Specific Gotchas

Non-obvious platform behaviors that cause real production problems:

  1. Multi-select components can't feed Loops or Transforms — Checkbox Group, Multi-Select Picklist, and Choice Lookup are incompatible with Transform and Loop elements. You discover this only when you try to wire the Loop, after the screen is built. Decide on iteration first.
  2. Multi-Select Picklist silently swallows markup — it doesn't support rich text and "doesn't show text between the < and > characters," so choice labels containing angle brackets render blank or truncated. Use Checkbox Group when labels carry markup.
  3. Dependent Picklists needs the dependency defined first — the component reads an existing org field dependency; without one defined in Setup it has nothing to display. Also, hidden picklists inside a Dependent Picklists component aren't set to null on conditional visibility unless the whole component is hidden — unlike other screen inputs.

Output Artifacts

ArtifactDescription
Component + resource recommendationThe chosen screen component and the Choice resource (or field dependency) that populates it, with the reason
Downstream-compatibility noteWhether the selection can feed a Loop/Transform, and the Data Table fallback design if not
templates/screen-flow-choice-component-selection-template.mdA selection worksheet that walks the cardinality → source → size → iteration decision to a recommendation
scripts/check_screen_flow_choice_component_selection.pyStdlib checker that flags multi-select components fed to Loop/Transform and oversized single-select choice lists in flow metadata

Package files