Anas Bouzid
← All work

Since 2023 · Creator and maintainer

Streamlit components

Python packages that put React components into Streamlit apps. streamlit-code-editor and streamlit-float are the most used.

Together, these four packages had 155,066 downloads from PyPI in the last 30 days. I recorded the clips on this page from the packages running on my machine, in Streamlit’s dark theme.

streamlit-code-editor

streamlit-code-editor is a code editor component for Streamlit apps, built on react-ace. Python passes in the code, the language, the theme and a layout of custom buttons and info bars. The React side sends back the edited text and the button that was pressed, as in the clip above. PyPI counted 134,513 downloads in the last 30 days, and the repository has 167 stars on GitHub.

Some fixes belonged in react-ace itself. I kept a fork of react-ace for them, and react-ace merged my fix for its foldStyle option in pull request #1804.

streamlit-float

Streamlit lays out containers one after another down the page and has no option to fix one in place. streamlit-float fixes a container to the viewport instead, so it stays in view while the page scrolls. You call float() on a container, or float_parent() inside one, and pass CSS to place and style it. float_css_helper returns that CSS from arguments like bottom and background. PyPI counted 14,409 downloads in the last 30 days, and the repository has 91 stars.

streamlit-dnd

streamlit-dnd adds drag-and-drop reordering to the keyed children of Streamlit containers, inside one container or between several. You can put headings and controls between the cards without breaking the list’s indices. I first released it in June 2026 and test it against Streamlit 1.58 through 1.63. PyPI counted 5,911 downloads in the last 30 days.

streamlit-reveal-slides

streamlit-reveal-slides renders reveal.js presentations inside a Streamlit app. You write the slides in Markdown and pass them to one function, with reveal.js themes, transitions and fragments. PyPI counted 233 downloads in the last 30 days.