Show API reference for

Display a feedback widget.

A feedback widget is an icon-based button group available in three styles, as described in options. It is commonly used in chat and AI apps to allow users to rate responses.

Function signature[source]

st.feedback(options="thumbs", *, key=None, default=None, disabled=False, on_change="rerun", args=None, kwargs=None, width="content")

Parameters

options ("thumbs", "faces", or "stars")

The feedback options displayed to the user. options can be one of the following:

  • "thumbs" (default): Streamlit displays a thumb-up and thumb-down button group.
  • "faces": Streamlit displays a row of five buttons with facial expressions depicting increasing satisfaction from left to right.
  • "stars": Streamlit displays a row of star icons, allowing the user to select a rating from one to five stars.

key (str, int, or None)

An optional string or integer to use as the unique key for the widget. If this is None (default), a key will be generated for the widget based on the values of the other parameters. No two widgets may have the same key. Assigning a key stabilizes the widget's identity and preserves its state across reruns even when other parameters change.

Note

Changing options resets the widget even when a key is provided.

A key lets you read or update the widget's value via st.session_state[key]. For more details, see Widget behavior.

Additionally, if key is provided, it will be used as a CSS class name prefixed with st-key-.

default (int or None)

Default feedback value. This must be consistent with the feedback type in options:

  • 0 or 1 if options="thumbs".
  • Between 0 and 4, inclusive, if options="faces" or options="stars".

disabled (bool)

An optional boolean that disables the feedback widget if set to True. The default is False.

on_change (callable, "rerun", "ignore", or None)

How the feedback widget should respond to value changes. This controls whether or not Streamlit reruns the app when the user interacts with the feedback widget. on_change can be one of the following:

  • "rerun" (default): Streamlit will rerun the app when the user commits a new value (clicking an option or clearing the selection).
  • "ignore": Streamlit will not rerun the app when the user commits a new value. The feedback widget still updates in the UI. The new value is available on the next rerun triggered by something else, such as another widget interaction. Ignored commits are held in the browser and are lost if the page is refreshed before that rerun. Inside st.form, this has no effect: the form already defers all commits until submit.
  • A callable: Streamlit will rerun the app and execute the callable as a callback function before the rest of the app.
  • None: This is the same as on_change="rerun". This value exists for backwards compatibility and shouldn't be used.

args (list or tuple)

An optional list or tuple of args to pass to the callback.

kwargs (dict)

An optional dict of kwargs to pass to the callback.

width ("content", "stretch", or int)

The width of the feedback widget. This can be one of the following:

  • "content" (default): The width of the widget matches the width of its content, but doesn't exceed the width of the parent container.
  • "stretch": The width of the widget matches the width of the parent container.
  • An integer specifying the width in pixels: The widget has a fixed width. If the specified width is greater than the width of the parent container, the width of the widget matches the width of the parent container.
Returns

(int or None)

An integer indicating the user's selection, where 0 is the lowest feedback. Higher values indicate more positive feedback. If no option was selected, the widget returns None.

  • For options="thumbs", a return value of 0 indicates thumbs-down, and 1 indicates thumbs-up.
  • For options="faces" and options="stars", return values range from 0 (least satisfied) to 4 (most satisfied).

Examples

Display a feedback widget with stars, and show the selected sentiment:

import streamlit as st

sentiment_mapping = ["one", "two", "three", "four", "five"]
selected = st.feedback("stars")
if selected is not None:
    st.markdown(f"You selected {sentiment_mapping[selected]} star(s).")

Display a feedback widget with thumbs, and show the selected sentiment:

import streamlit as st

sentiment_mapping = [":material/thumb_down:", ":material/thumb_up:"]
selected = st.feedback("thumbs")
if selected is not None:
    st.markdown(f"You selected: {sentiment_mapping[selected]}")
star

Tip

Want a new st.feedback feature or found a bug? Browse open issues and react with a 👍 on the initial post of the ones that matter to you. Your votes help us prioritize what to work on next.

forum

Still have questions?

Our forums are full of helpful information and Streamlit experts.