Input widgets allow you to add parameters to your notebooks and dashboards. The widget API consists of calls to create various types of input widgets, remove them, and get bound values.

Widgets are best for:

  • Building a notebook or dashboard that is re-executed with different parameters

  • Quickly exploring results of a single query with different parameters


View the documentation for the widget API in Scala, Python, and R with the following command:


Widget types

There are 4 types of widgets:

  • text: Input a value in a text box.

  • dropdown: Select a value from a list of provided values.

  • combobox: Combination of text and dropdown. Select a value from a provided list or input one in the text box.

  • multiselect: Select one or more values from a list of provided values.

Widget dropdowns and text boxes appear immediately following the notebook toolbar.

Widget dropdown

Widget API

The widget API is designed to be consistent in Scala, Python, and R. The widget API in SQL is slightly different, but as powerful as the other languages. You manage widgets through the Databricks Utilities interface.

dbutils.widgets.dropdown("X123", "1", [str(x) for x in range(1, 10)])

dbutils.widgets.dropdown("1", "1", [str(x) for x in range(1, 10)], "hello this is a widget")

dbutils.widgets.dropdown("x123123", "1", [str(x) for x in range(1, 10)], "hello this is a widget")

dbutils.widgets.dropdown("x1232133123", "1", [str(x) for x in range(1, 10)], "hello this is a widget 2")

Widget example

Create a simple dropdown widget.

dbutils.widgets.dropdown("X", "1", [str(x) for x in range(1, 10)])

Interact with the widget from the widget panel.

Interact with widget

You can access the current value of the widget with the call:


Finally, you can remove a widget or all widgets in a notebook:




If you add a command to remove a widget, you cannot add a subsequent command to create a widget in the same cell. You must create the widget in another cell.

Widgets in Scala, Python, and R

To see detailed API documentation for each method, use dbutils.widgets.help("<method-name>"). The help API is identical in all languages. For example:


You can create a dropdown widget by passing a unique identifying name, default value, and list of default choices, along with an optional label. Once you create it, a dropdown input widget appears at the top of the notebook. These input widgets are notebook-level entities.

If you try to create a widget that already exists, the configuration of the existing widget is overwritten with the new options.

Widgets in SQL

The API to create widgets in SQL is slightly different but as powerful as the APIs for the other languages. The following is an example of creating a text input widget.


To specify the selectable values in a dropdown widget in SQL, you can write a sub-query. The first column of the resulting table of the sub-query determines the values.

The following cell creates a dropdown widget from a sub-query over a table.


The default value specified when you create a dropdown widget must be one of the selectable values and must be specified as a string literal. To access the current selected value of an input widget in SQL, you can use a special UDF function in your query. The function is getArgument(). For example:

SELECT COUNT(*) AS numChoices, getArgument("cuts") AS cuts FROM diamonds WHERE cut = getArgument("cuts")

You can also use the $<parameter> syntax to access the current value of a SQL input widget:

SELECT * FROM diamonds WHERE cut LIKE '%$cuts%'

You can remove the widget with a SQL command:



In general, you cannot use widgets to pass arguments between different languages within a notebook. You can create a widget arg1 in a Python cell and use it in a SQL or Scala cell if you run cell by cell. However, it will not work if you execute all the commands using Run All or run the notebook as a job. To work around this limitation, we recommend that you create a notebook for each language and pass the arguments when you run the notebook.

Legacy input widgets in SQL


Databricks will end support for rendering legacy SQL widgets on January 15, 2022. To ensure that your widgets continue to render in the UI, update your code to use the SQL widgets. You can still use $<parameter> in your code to get the parameters passed to a notebook using %run.

The old way of creating widgets in SQL queries with the $<parameter> syntax still works as before. Here is an example:

SELECT * FROM diamonds WHERE cut LIKE '%$cuts%'


To escape the $ character in a SQL string literal, use \$. For example, the string $1,000 can be expressed as "\$1,000". The $ character cannot be escaped for SQL identifiers.

Configure widget settings

You can configure the behavior of widgets when a new value is selected, whether the widget panel is always pinned to the top of the notebook, and change the layout of widgets in the notebook.

  1. Click the gear icon icon at the right end of the Widget panel.

  2. In the pop-up Widget Panel Settings dialog box, choose the widget’s execution behavior.

    Widget settings
    • Run Notebook: Every time a new value is selected, the entire notebook is rerun.

    • Run Accessed Commands: Every time a new value is selected, only cells that retrieve the values for that particular widget are rerun. This is the default setting when you create a widget.


      SQL cells are not rerun in this configuration.

    • Do Nothing: Every time a new value is selected, nothing is rerun.

  3. To pin the widgets to the top of the notebook or to place the widgets above the first cell, click pin icon. The setting is saved on a per-user basis.

  4. If you have Can Manage permission for notebooks, you can configure the widget layout by clicking edit icon. Each widget’s order and size can customized. To save or dismiss your changes, click accept and cancel icons.


    The widget layout is saved with the notebook.

    If the widget layout is configured, new widgets will be added out of alphabetical order.

  5. To reset the widget layout to a default order and size, click gear icon to open the Widget Panel Settings dialog and then click Reset Layout.


    The widget layout cannot be reset by the removeAll() command.


You can see a demo of how the Run Accessed Commands setting works in the following notebook. The year widget is created with setting 2014 and is used in DataFrame API and SQL commands.


When you change the setting of the year widget to 2007, the DataFrame command reruns, but the SQL command is not rerun.

Widget demo notebook

Open notebook in new tab

Widgets in dashboards

When you create a dashboard from a notebook that has input widgets, all the widgets display at the top of the dashboard. In presentation mode, every time you update value of a widget you can click the Update button to re-run the notebook and update your dashboard with new values.

Dashboard with widgets

Use widgets with %run

If you run a notebook that contains widgets, the specified notebook is run with the widget’s default values. You can also pass in values to widgets. For example:

%run /path/to/notebook $X="10" $Y="1"

This example runs the specified notebook and passes 10 into widget X and 1 into widget Y.