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

import panel as pn

The Progress widget displays the progress towards some target based on the current value and the max value. If no value is set or a value of -1 is set the Progress widget is in indeterminate mode and will animate if active is set to True.

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.

  • active (boolean): Whether to animate the bar when in indeterminate mode

  • bar_color (str): The color of the bar, one of ‘primary’, ‘secondary’, ‘success’, ‘info’, ‘warning’, ‘danger’, ‘light’, ‘dark’

  • max (int): The maximum progress value

  • style (dict): A dictionary of CSS to apply to the progress bar

  • value (int): The current value towards the progress, set to -1 for an indeterminate state

The Progress widget can be instantiated with and without a value. If given a value the progress bar will fill according to the progress to the max value which is 100 by default:

progress = pn.indicators.Progress(name='Progress', value=20, width=200)

The progress value can be updated from Python:

progress.value = 80

The Progress can also be instantiated without a value:

indeterminate = pn.indicators.Progress(name='Indeterminate Progress', active=True, width=200)

The Progress widget also supports a range of bar colors:

running = pn.Column(*[
    pn.Row(pn.panel(bs, width=100), pn.indicators.Progress(width=300, value=10+i*10, bar_color=bs))
        for i, bs in enumerate(pn.indicators.Progress.param.bar_color.objects)


The Progress widget exposes a number of options which can be changed from both Python and Javascript. Try out the effect of these parameters interactively:

pn.Row(progress.controls(jslink=True), progress, indeterminate.controls(jslink=True), indeterminate)

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