st.query_params provides a dictionary-like interface to access query parameters in your app's URL and is available as of Streamlit 1.30.0. It behaves similarly to st.session_state with the notable exception that keys may be repeated in an app's URL. Handling of repeated keys requires special consideration as explained below.

st.query_params can be used with both key and attribute notation. For example, st.query_params.my_key and st.query_params["my_key"]. All keys and values will be set and returned as strings. When you write to st.query_params, key-value pair prefixed with ? is added to the end of your app's URL. Each additional pair is prefixed with & instead of ?. Query parameters are cleared when navigating between pages in a multipage app.

For example, consider the following URL:

The parameters in the URL above will be accessible in st.query_params as:

{ "first_key" : "1", "second_key" : "two", "third_key" : "true" }

This means you can use those parameters in your app like this:

# You can read query params using key notation if st.query_params["first_key"] == "1": do_something() # ...or using attribute notation if st.query_params.second_key == "two": do_something_else() # And you can change a param by just writing to it st.query_params.first_key = 2 # This gets converted to str automatically

When a key is repeated in your app's URL (?a=1&a=2&a=3), dict-like methods will return only the last value. In this example, st.query_params["a"] returns "3". To get all keys as a list, use the .get_all() method shown below. To set the value of a repeated key, assign the values as a list. For example, st.query_params.a = ["1", "2", "3"] produces the repeated key given at the beginning of this paragraph.

st.query_params can't get or set embedding settings as described in Embed your app. st.query_params.embed and st.query_params.embed_options will raise an AttributeError or StreamlitAPIException when trying to get or set their values, respectively.

Clear all query parameters from the URL of the app.

Function signature[source]




No description

Set all of the query parameters from a dictionary or dictionary-like object.

This method primarily exists for advanced users who want to control multiple query parameters in a single update. To set individual query parameters, use key or attribute notation instead.

This method inherits limitations from st.query_params and can't be used to set embedding options as described in Embed your app.

To handle repeated keys, the value in a key-value pair should be a list.


.from_dict() is not a direct inverse of .to_dict() if you are working with repeated keys. A true inverse operation is {key: st.query_params.get_all(key) for key st.query_params}.

Function signature[source]



params (dict)

A dictionary used to replace the current query parameters.


import streamlit as st

st.query_params.from_dict({"foo": "bar", "baz": [1, "two"]})

Get a list of all query parameter values associated to a given key.

When a key is repeated as a query parameter within the URL, this method allows all values to be obtained. In contrast, dict-like methods only retrieve the last value when a key is repeated in the URL.

Function signature[source]



key (str)

The label of the query parameter in the URL.



A list of values associated to the given key. May return zero, one, or multiple values.

Get all query parameters as a dictionary.

This method primarily exists for internal use and is not needed for most cases. st.query_params returns an object that inherits from dict by default.

When a key is repeated as a query parameter within the URL, this method will return only the last value of each unique key.

Function signature[source]




A dictionary of the current query paramters in the app's URL.


Still have questions?

Our forums are full of helpful information and Streamlit experts.