# streamlit-extras gathers the Streamlit pieces that never make the core

> streamlit-extras is a community collection of Streamlit components and utilities shipped as one PyPI package, with a documentation gallery to browse them, a uv based development loop, and a build that compiles the React frontends of some extras straight into the wheel. It is the place to look when the widget you want is close to Streamlit but not in it.

**arnaudmiribel/streamlit-extras** — Discover, try, install and share Streamlit re-usable bits we call "extras"!

- Repository: https://github.com/arnaudmiribel/streamlit-extras
- Website: https://extras.streamlit.app
- Stars: 974 · Forks: 172
- Language: Python
- License: Apache-2.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/arnaudmiribel-streamlit-extras

## The gap between Streamlit and what you need

streamlit-extras is described as a Python library putting together useful Streamlit bits of code, and the package metadata gives the longer version, a community-driven collection of useful Streamlit components and utilities that extend Streamlit's functionality. The framing is deliberately modest and it explains the project. Streamlit itself ships a small set of primitives, and there is a long tail of components that a particular application needs and that most applications do not, a date range picker, a nicer toggle, a specialised chart wrapper, a state helper. Each of those is a few dozen lines of Streamlit code that somebody has already written, and the extras package is where those implementations live so that they can be shared instead of copied. The name is the idea, since the project describes the components as extras and the documentation as the place to discover all of them.

## Install and import

Installation is the ordinary one, since the whole collection ships as a single PyPI package with all extras included:

```bash
pip install streamlit-extras
```

The project also documents uv as an alternative, and the development setup uses it throughout:

```bash
uv add streamlit-extras
```

Usage is a plain import of the specific extra you want, from a module named after it. The example in the documentation is stoggle, described as one of the easiest extras around, which takes a label and a block of additional content and reveals that content when the label is clicked. The general pattern is that each extra lives in its own module under the streamlit_extras namespace, so you import the one you need and nothing else is loaded. That is worth noticing for a package that bundles dozens of components, and the packaging configuration is written accordingly, with the package list including the streamlit_extras package from the src directory and excluding the gallery.

## The gallery is the catalogue

The documentation site is the front door, and it is a documentation site rather than a list of API pages. It is built with mkdocs, given the mkdocs.yml at the root of the repository, and there is a netlify.toml and an overrides/ directory, so the site is deployed as a static site with custom styling. The other half of the catalogue is the gallery application inside the repository, a Streamlit app under gallery/ that runs the extras against sample data so you can see what they do rather than read about them. That matters for a component library, because a toggle or a chart wrapper is much easier to evaluate in motion than in a screenshot. The development section gives the command that starts it, and the same loop runs the tests, which means the gallery is also the manual test surface for a change to an extra.

## Contributing an extra is a pull request

The sharing model is the second of the three highlights, and it is stated plainly: go ahead and share your own extras, it is just a pull request away. The contributing guidelines live in the documentation, and the repository has a CONTRIBUTING.md, a pre-commit configuration and a scripts/ directory, so the path for a new component is the ordinary one for a Python project. The authors listed in the package metadata give a sense of who maintains it, with Arnaud Miribel, Zachary Blackwood from Streamlit and Lukas Masuch, and the README itself is built from a template taken from the streamlit-pydantic project, which is a small sign of a community that reuses each other's scaffolding.

## Some extras ship compiled JavaScript

The build configuration is the part of this project that is not obvious from the outside. Some extras are built on React, and for those the wheel is assembled by a custom Hatch build hook at scripts/hatch_build.py, which compiles the frontends during wheel packaging. The exclusion rules make the intent clear, since the frontend source is kept out of the wheel and only the built bundles are kept:

```toml
[tool.hatch.build.targets.wheel]
# For react-based CCv2 extras: exclude everything under frontend/ except the build/ folder
# This keeps only the compiled JS bundles, not the React/TypeScript source
exclude = [
  "src/streamlit_extras/*/frontend/*",
  "!src/streamlit_extras/*/frontend/build",
  "!src/streamlit_extras/*/frontend/build/**",
]
```

So a React based extra behaves like a native Streamlit component to the user, since the compiled bundle is loaded at runtime, while the source stays in the repository for maintainers. The comment refers to these as the CCv2 extras, which suggests a generation of the component API, and the practical consequence for a user is simply that pip install gives you a working component without a JavaScript toolchain of your own.

## Dependencies, tooling and the release state

The runtime dependencies are short, with plotly at 5.23.0 or newer and streamlit at 1.54.0 or newer, and the package requires Python 3.10 or newer and is built with hatchling. The development group is where the interesting tooling is: pytest for the tests, mypy pinned at 1.20.2, a tool called ty pinned at 0.0.38, ruff pinned at 0.15.13, pre-commit, and a set of type stub packages for requests, dateutil, pytz, PyYAML and toml, plus pandas stubs. Pinning the linters and the type checkers exactly is the practice of a project that wants its checks reproducible on any machine, and having both mypy and the newer ty in the list suggests the team is running two type checkers. The release history is steady, with 1.6.0 published on 2026-05-15, 1.5.0 on 2026-04-21 and 1.4.1 on 2026-04-10, and the last push to the repository on 2026-08-31. The licence is Apache-2.0, and the repository also carries AGENTS.md and CLAUDE.md files for coding agents.

## Conclusion

streamlit-extras fits a Streamlit developer who needs a widget the core does not have and would rather not vendor a component into their own repository, since the package installs with pip and the gallery shows what is there before you commit to it. It does not fit a project that wants to avoid the dependency, since plotly and streamlit itself are pulled in, and it does not fit a team that needs a stable API, because extras are contributed by the community and the version numbers move. Before you adopt it, check the gallery for the specific extra you need and read its page, since the individual components are documented separately, and note the release state, where 1.6.0 was published on 2026-05-15 and the last push was on 2026-08-31.

## FAQ

### What is streamlit-extras?

It is a Python library and PyPI package that collects useful Streamlit components and utilities into one place, described as a community-driven collection that extends Streamlit's functionality, with the individual extras documented in the project documentation.

### How do I install and use streamlit-extras?

With pip install streamlit-extras or uv add streamlit-extras, then import the extra you need from the streamlit_extras namespace, for example from streamlit_extras.stoggle import stoggle.

### How do I see what extras exist?

The documentation site at the project pages lists all of them, and the repository also ships a gallery Streamlit app under gallery/ that runs the extras against sample data so you can try them in motion.

### Do the extras need a JavaScript toolchain?

No. The React based extras have their frontends compiled during wheel packaging by a custom Hatch build hook, and the wheel ships only the built bundles rather than the React and TypeScript source.

### Is streamlit-extras still updated?

The repository is not archived and the last push was on 2026-08-31, with 1.6.0 published on 2026-05-15 after 1.5.0 in April 2026 and 1.4.1 earlier that month, under the Apache-2.0 licence.

## Sources

- [arnaudmiribel/streamlit-extras on GitHub](https://github.com/arnaudmiribel/streamlit-extras)
- [License: Apache-2.0](https://github.com/arnaudmiribel/streamlit-extras/blob/main/LICENSE)
- [Project website](https://extras.streamlit.app)
- [README](https://github.com/arnaudmiribel/streamlit-extras/blob/main/README.md)
- [Releases](https://github.com/arnaudmiribel/streamlit-extras/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/arnaudmiribel-streamlit-extras
