Open this notebook in Jupyterlite | Download this notebook from GitHub (right-click to download).

import panel as pn


The CrossSelector widget allows selecting multiple values from a list of options by moving items between two lists. It falls into the broad category of multi-option selection widgets that provide a compatible API and include the MultiSelect, CheckBoxGroup and CheckButtonGroup widgets.

Discover more on using widgets to add interactivity to your applications in the how-to guides on interactivity. Alternatively, learn how to set up callbacks and (JS-)links between parameters or how to use them as part of declarative UIs with Param.


For details on other options for customizing the component see the layout and styling how-to guides.


  • definition_order (boolean, default=True): Whether to preserve definition order after filtering. Disable to allow the order of selection to define the order of the selected list.

  • filter_fn (function): The filter function applied when querying using the text fields, defaults to Function is two arguments, the query or pattern and the item label.

  • options (list or dict): List or dictionary of available options

  • value (boolean): Currently selected options


  • disabled (boolean): Whether the widget is editable

  • name (str): The title of the widget

The CrossSelector is made up of a number of components:

  • Two lists for the unselected (left) and selected (right) option values

  • Filter boxes that allow using a regex to match options in the list of values below

  • Buttons to move values from the unselected to the selected list (>>) and vice versa (<<)

cross_selector = pn.widgets.CrossSelector(name='Fruits', value=['Apple', 'Pear'], 
    options=['Apple', 'Banana', 'Pear', 'Strawberry'])


CrossSelector.value returns a list of the currently selected options:

['Apple', 'Pear']

Open this notebook in Jupyterlite | Download this notebook from GitHub (right-click to download).