Version 1.10.0

I am so excited to announce some special features in this release! Thank you so much for your help supporting us as we settle into our new home within Snowflake :snowflake:!

Highlights

  • Introducing native support for multipage apps! Check out our blog post and try out our new streamlit hello

Notable Changes

  • st.dataframe has been redesigned
  • st.radio has a horizontal keyword-only parameter to display options horizontally
  • Streamlit Cloud will support richer exception formatting
  • Get user information on private apps using st.experimental_user

Other Changes

Want to share a special shoutout to GitHub user harahu for many of the type annotation PRs!

9 Likes

Very exiting. I tried to upgrade but it sadly instantly broke my existing apps :frowning:. More specifcially I’m already using the old multipage library and happen to have a folder called “pages”. Can I change some set_page_config such that the new native multipage functions looks for a differently named folder with a custom name instead of having it hardcoded to “pages”? Had to roll back to 1.9.2 and cannot upgrade if this doesn’t get fixed.

2 Likes

@lorenzweb Can you tell me which multipage library you’ve been using?

Thank you for the new Streamlit version - the dataframe (df) enhancements are very nice. I have a few queries though:

  1. On my test, I found that the df is not editable a la aggrid - it would be really nice to have this functionality
  2. If the df / csv file has a boolean column, checkboxes appear in that column. It would be if I can change the checkbox value by clicking it. Additionally, how do I get images and bubbles?
  3. Is there is still no way to tell on which row my cursor is on?

Cheers

3 Likes

Hey @Shawn_Pereira, nice to hear back from you :wink:

1+2: There’s no way to edit data and/or click the checkboxes yet. But this release and the new library we are using for dataframes brings us A LOT closer to that functionality. We still need to figure out the best API to handle edits and selections but our goal is to ship something in summer or fall.

Images are not possible yet (again, coming later this year!). You can get the bubbles if you put a list in your dataframe (I assume by bubbles you mean the thing on the right in the screenshot below, correct?).

3: Don’t really get what you mean, can you clarify?

Appreciate your feedback!!

1 Like

Hi @jrieke , lovely to hear from you too. :slight_smile:

  • Yes, you deduced points 1 & 2 correctly. Eagerly waiting the future functionality you mentioned.
  • Point #3: if I have a df displayed onscreen with st.dataframe, and I click on any row of that df, is it possible for me to internally, in my code, get back which row index has been clicked on? Can st.dataframe have that functionality?

Eg. #2, Suppose I click on row #3, can st.dataframe return #2 back to me…?

Use case: basis the click, and a combination of data in the cells of that clicked row, I can run other code or show stuff onscreen (that is only relevant for that combination of data)

Cheers

1 Like

Fantastic @kmcgrady!!! Thanks to the team for all the efforts in making multipage apps a native reality! Will be upgrading later today! :star_struck:

Hey,

Nice to see multipage apps are a reality!
Is it possible to somehow configure which page runs programatically (and hide the current menu) ?
I would love to use a custom header with navigation, but still have the multipage support with URLs. :innocent:

3 Likes

Good day.
It is very cool feature :slight_smile:

In my opinion, though, it is not a best idea to use emojis in filenames. For example, I’ve got problems with “teradatasql” module. It seems, that driver sends filename via hidden parameters and teradata rejects the connection (“An illegally formed character string was encountered…”).
Is it possible to add some settings to pages: cuistom icon, page name and visibility (via set_page_config or smth similar)? We can set all pages settings inside every page, for example.

2 Likes

No kidding! I pointed this out during development. There are a million possible pitfalls in the shell and in consumer applications for the files. I think it would be much better to do this as a section in config.toml:

[pageicons]
page1 = "😀" # quoted since they are strings
page2 = "🌏"
page3 = "`:1st_place_medal:` " # also allow entry in colon delimited format

Ubuntu 22.04, Anaconda package (python 3.9.12)
streamlit version 1.9.x is running perfectly.
After successful install to version 1.10.0, run streamlit --version:

Traceback (most recent call last):
File “/home/charliechu/conda/bin/streamlit”, line 5, in
from streamlit.cli import main
File “/home/charliechu/conda/lib/python3.9/site-packages/streamlit/init.py”, line 48, in
from streamlit.proto.RootContainer_pb2 import RootContainer
File “/home/charliechu/conda/lib/python3.9/site-packages/streamlit/proto/RootContainer_pb2.py”, line 5, in
from google.protobuf.internal import enum_type_wrapper
ModuleNotFoundError: No module named ‘google.protobuf’

I don’t think I see anyone else commenting on this one, so let me say that #4696 – better wrapping of long text in markdown – is super appreciated by me, as a person who has a LOT of long text in markdown.

2 Likes

Yessss! So happy with the multipage solution! :smiley:

All of these changes are super helpful, thanks a lot team!

Hey @Ascetic168 Sorry for the delay. So that means the protobuf library wasn’t installed in Conda. You can fix this by running conda install protobuf=3.20.1 (the latest version 3) and hopefully that fixes the issue.

It’s weird that this error occurs. The feedstock for Conda Forge, specifies the protobuf version as a dependency, so it should have been downloaded :thinking:.

Hi @kmcgrady

  • I upgraded Python to 3.9.13 from 3.9.7 using conda update python.
  • I had Streamlit 1.11.0 at the time. Streamlit 1.12.0 doesn’t work with Python 3.9.7.
  • Below is what conda reported as being REMOVED (and notice how it removes protobuf and a whole lot more!).
  • I upgraded Streamlit to 1.12.0 but it didn’t run due to the package removals made by conda.
  • I had to re-install protobuf==3.20.1 and cachetools==4.2.2 to get Streamlit 1.12.0 to run.
conda update python package plan
## Package Plan ##

  environment location: C:\ProgramData\Anaconda3

  added / updated specs:
    - python


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    anyio-3.6.1                |     pyhd8ed1ab_1          83 KB  conda-forge
    blas-1.0                   |              mkl           6 KB
    conda-4.14.0               |   py39hcbf5309_0         1.0 MB  conda-forge
    dataclasses-0.8            |     pyhc8e2a94_3          10 KB  conda-forge
    decorator-5.1.1            |     pyhd8ed1ab_0          12 KB  conda-forge
    joblib-1.1.0               |     pyhd8ed1ab_0         210 KB  conda-forge
    libffi-3.4.2               |       h8ffe710_5          41 KB  conda-forge
    markupsafe-2.1.1           |   py39hb82d6ee_1          25 KB  conda-forge
    openssl-1.1.1q             |       h8ffe710_0         5.8 MB  conda-forge
    python-3.9.13              |h9a09f29_0_cpython        17.9 MB  conda-forge
    scikit-learn-1.1.2         |   py39hfd4428b_0         7.6 MB  conda-forge
    setuptools-65.1.0          |   py39hcbf5309_0         1.4 MB  conda-forge
    tzdata-2022c               |       h191b570_0         119 KB  conda-forge
    urllib3-1.26.11            |     pyhd8ed1ab_0         102 KB  conda-forge
    werkzeug-2.2.2             |     pyhd8ed1ab_0         249 KB  conda-forge
    wheel-0.37.1               |     pyhd8ed1ab_0          31 KB  conda-forge
    wrapt-1.14.1               |   py39hb82d6ee_0          49 KB  conda-forge
    zipp-3.8.1                 |     pyhd8ed1ab_0          13 KB  conda-forge
    ------------------------------------------------------------
                                           Total:        34.6 MB

The following NEW packages will be INSTALLED:

  libffi             conda-forge/win-64::libffi-3.4.2-h8ffe710_5

The following packages will be REMOVED:

  aiohttp-3.8.1-py39h2bbff1b_1
  aiosignal-1.2.0-pyhd3eb1b0_0
  async-timeout-4.0.1-pyhd3eb1b0_0
  automat-20.2.0-py_0
  boto3-1.21.32-pyhd3eb1b0_0
  botocore-1.24.32-pyhd3eb1b0_0
  cachetools-4.2.2-pyhd3eb1b0_0
  colorcet-2.0.6-pyhd3eb1b0_0
  constantly-15.1.0-pyh2b92418_0
  cssselect-1.1.0-pyhd3eb1b0_0
  datashader-0.13.0-pyhd3eb1b0_1
  datashape-0.5.4-py39haa95532_1
  frozenlist-1.2.0-py39h2bbff1b_0
  gensim-4.1.2-py39hd77b12b_0
  google-api-core-1.25.1-pyhd3eb1b0_0
  google-auth-1.33.0-pyhd3eb1b0_0
  google-cloud-core-1.7.1-pyhd3eb1b0_0
  google-cloud-storage-1.31.0-py_0
  google-crc32c-1.1.2-py39h2bbff1b_0
  google-resumable-media-1.3.1-pyhd3eb1b0_1
  googleapis-common-protos-1.53.0-py39h2eaa2aa_0
  grpcio-1.42.0-py39hc60d5dd_0
  holoviews-1.14.8-pyhd3eb1b0_0
  hvplot-0.7.3-pyhd3eb1b0_1
  hyperlink-21.0.0-pyhd3eb1b0_0
  incremental-21.3.0-pyhd3eb1b0_0
  intake-0.6.5-pyhd3eb1b0_0
  itemadapter-0.3.0-pyhd3eb1b0_0
  itemloaders-1.0.4-pyhd3eb1b0_1
  jmespath-0.10.0-pyhd3eb1b0_0
  jq-1.6-haa95532_1
  markdown-3.3.4-py39haa95532_0
  multidict-5.1.0-py39h2bbff1b_2
  panel-0.13.0-py39haa95532_0
  param-1.12.0-pyhd3eb1b0_0
  parsel-1.6.0-py39haa95532_0
  plotly-5.6.0-pyhd3eb1b0_0
  protego-0.1.16-py_0
  protobuf-3.20.1-py39hcbf5309_0
  pyasn1-0.4.8-pyhd3eb1b0_0
  pyasn1-modules-0.2.8-py_0
  pyct-0.4.6-py39haa95532_0
  pydispatcher-2.0.5-py39haa95532_2
  pyhamcrest-2.0.2-pyhd3eb1b0_2
  python-snappy-0.6.0-py39hd77b12b_3
  pyviz_comms-2.0.2-pyhd3eb1b0_0
  queuelib-1.5.0-py39haa95532_0
  requests-file-1.5.1-pyhd3eb1b0_0
  rsa-4.7.2-pyhd3eb1b0_1
  s3transfer-0.5.0-pyhd3eb1b0_0
  scrapy-2.6.1-py39haa95532_0
  service_identity-18.1.0-pyhd3eb1b0_1
  smart_open-5.1.0-pyhd3eb1b0_0
  tabulate-0.8.9-py39haa95532_0
  tenacity-8.0.1-py39haa95532_0
  tldextract-3.2.0-pyhd3eb1b0_0
  twisted-22.2.0-py39h2bbff1b_0
  twisted-iocpsupport-1.0.2-py39h2bbff1b_0
  w3lib-1.21.0-pyhd3eb1b0_0
  xarray-0.20.1-pyhd3eb1b0_1
  yarl-1.6.3-py39h2bbff1b_0

The following packages will be UPDATED:

  anyio              pkgs/main/win-64::anyio-3.5.0-py39haa~ --> conda-forge/noarch::anyio-3.6.1-pyhd8ed1ab_1
  blas                                          conda-forge --> pkgs/main
  conda                               4.13.0-py39hcbf5309_1 --> 4.14.0-py39hcbf5309_0
  markupsafe         pkgs/main::markupsafe-2.0.1-py39h2bbf~ --> conda-forge::markupsafe-2.1.1-py39hb82d6ee_1
  openssl                                 1.1.1p-h8ffe710_0 --> 1.1.1q-h8ffe710_0
  python                 pkgs/main::python-3.9.7-h6244533_1 --> conda-forge::python-3.9.13-h9a09f29_0_cpython
  scikit-learn       pkgs/main::scikit-learn-1.0.2-py39hf1~ --> conda-forge::scikit-learn-1.1.2-py39hfd4428b_0
  setuptools         pkgs/main::setuptools-61.2.0-py39haa9~ --> conda-forge::setuptools-65.1.0-py39hcbf5309_0
  tzdata                 pkgs/main::tzdata-2022a-hda174b7_0 --> conda-forge::tzdata-2022c-h191b570_0
  urllib3            pkgs/main/win-64::urllib3-1.26.9-py39~ --> conda-forge/noarch::urllib3-1.26.11-pyhd8ed1ab_0
  werkzeug           pkgs/main::werkzeug-2.0.3-pyhd3eb1b0_0 --> conda-forge::werkzeug-2.2.2-pyhd8ed1ab_0
  wrapt              pkgs/main::wrapt-1.12.1-py39h196d8e1_1 --> conda-forge::wrapt-1.14.1-py39hb82d6ee_0
  zipp                   pkgs/main::zipp-3.7.0-pyhd3eb1b0_0 --> conda-forge::zipp-3.8.1-pyhd8ed1ab_0

The following packages will be SUPERSEDED by a higher-priority channel:

  dataclasses        pkgs/main::dataclasses-0.8-pyh6d0b6a4~ --> conda-forge::dataclasses-0.8-pyhc8e2a94_3
  decorator          pkgs/main::decorator-5.1.1-pyhd3eb1b0~ --> conda-forge::decorator-5.1.1-pyhd8ed1ab_0
  joblib               pkgs/main::joblib-1.1.0-pyhd3eb1b0_0 --> conda-forge::joblib-1.1.0-pyhd8ed1ab_0
  requests           conda-forge::requests-2.27.1-pyhd8ed1~ --> pkgs/main::requests-2.27.1-pyhd3eb1b0_0
  wheel                pkgs/main::wheel-0.37.1-pyhd3eb1b0_0 --> conda-forge::wheel-0.37.1-pyhd8ed1ab_0

Hey @asehmi

I believe 1.12.0 was not added to conda-forge. I just added it and perhaps that will fix things. The meta.yml very specifically requests for protobuf, so I am unsure why it might be removed :person_shrugging:.

1 Like

@kmcgrady Are there any updates on hiding row indices with st.dataframe as of streamlit>=1.10.0. I haven’t upgraded yet due to to this missing feature.

Hey @R_D,

No clear plan on removing indices yet. I will tag @lukasmasuch in this as he has been working a lot on dataframes. Hopefully we can think of a solution.

2 Likes

@lukasmasuch @kmcgrady @randyzwitch Any plans in the near future on hiding row indices with st.dataframe as of streamlit>=1.10.0. I haven’t upgraded yet due to to this missing feature.

1 Like

do you think there is a way around it in the mean time?
This doesn’t seem to be working anymore.

<style .row_heading.level0 {display:none} .blank {display:none} </style