Skip to main content

Looking for a fully open-source alternative?

Check out st-rsuite — and try the sample app!


WARNING — MUI X Pro Licensing

MUI was contacted and asked to provide a development/demo license solely to run the showcase app without displaying a watermark. They refused.

I therefore strongly encourage everyone NOT to purchase a MUI X Pro license. Fully open-source replacements for the Pro time-range components will be added to this library in the near future.


st-mui

MUI X components for Streamlit, built with Components v2

PyPI version Downloads Python ≥3.10 License
Open in Streamlit


Components

Component Description License Streamlit equivalent
time_picker Clock UI, AM/PM toggle, min/max bounds MIT st.time_input
date_time_picker Combined date + time, AM/PM toggle, calendar popover MIT st.datetime_input
date_picker Calendar popover with format control MIT st.date_input
date_range_picker Date range selection with dual calendars Pro* st.date_input (range mode)
date_time_range_picker Datetime range with start/end time selection Pro* --
tree_view Hierarchical tree with checkboxes and multi-select MIT --

*Pro components work in evaluation mode without a license key (watermark shown). Set ST_MUI_LICENSE_KEY env var or pass license_key= to remove it.

Installation

uv add st-mui

or with pip:

pip install st-mui

Quick start

import streamlit as st
from datetime import time, datetime, date, timedelta
from st_mui import (
    time_picker, date_time_picker, date_picker,
    date_range_picker, date_time_range_picker,
    tree_view,
)

t = time_picker(label="Pick a time", value=time(9, 30), ampm=True, key="my_time")

dt = date_time_picker(label="Select date & time", value=datetime.now(), key="my_datetime")

d = date_picker(label="Pick a date", value=date.today(), key="my_date")

start, end = date_range_picker(
    label="Trip dates",
    value=(date.today(), date.today() + timedelta(days=7)),
    key="my_range",
)

start_dt, end_dt = date_time_range_picker(
    label="Event",
    value=(datetime.now(), datetime.now() + timedelta(hours=2)),
    key="my_dt_range",
)

selected = tree_view(
    items=[
        {"id": "docs", "label": "Documents", "children": [
            {"id": "resume", "label": "Resume.pdf"},
        ]},
        {"id": "photos", "label": "Photos"},
    ],
    checkbox_selection=True,
    multi_select=True,
    key="my_tree",
)

API

time_picker

time_picker(
    label="Select a time",
    value=None,           # time object or HH:MM string
    ampm=True,            # 12-hour vs 24-hour
    min_time=None,
    max_time=None,
    disabled=False,
    on_change=None,
    key=None,
) -> time | None

date_time_picker

date_time_picker(
    label="Select date & time",
    value=None,           # datetime object or ISO string
    min_datetime=None,
    max_datetime=None,
    ampm=True,
    disabled=False,
    on_change=None,
    key=None,
) -> datetime | None

date_picker

date_picker(
    label="Select a date",
    value=None,           # date object or YYYY-MM-DD string
    min_date=None,
    max_date=None,
    format="MM/DD/YYYY",  # MUI format tokens
    disabled=False,
    on_change=None,
    key=None,
) -> date | None

date_range_picker (Pro)

date_range_picker(
    label="Select date range",
    value=None,           # tuple of (date, date) or (str, str)
    min_date=None,
    max_date=None,
    calendars=2,          # 1 or 2 calendar panels
    disabled=False,
    license_key=None,     # or set ST_MUI_LICENSE_KEY env var
    on_change=None,
    key=None,
) -> tuple[date | None, date | None]

date_time_range_picker (Pro)

date_time_range_picker(
    label="Select date & time range",
    value=None,           # tuple of (datetime, datetime) or (str, str)
    min_datetime=None,
    max_datetime=None,
    ampm=True,
    disabled=False,
    license_key=None,     # or set ST_MUI_LICENSE_KEY env var
    on_change=None,
    key=None,
) -> tuple[datetime | None, datetime | None]

tree_view

tree_view(
    items=None,           # list of {"id", "label", "children": [...]}
    label=None,
    multi_select=False,
    checkbox_selection=True,
    default_expanded=None,
    default_selected=None,
    disabled=False,
    on_change=None,
    key=None,
) -> list[str]  # selected item IDs

MUI X Pro license

The date_range_picker and date_time_range_picker use MUI X Pro components. They work in evaluation mode without a license key (a watermark is displayed). To remove the watermark:

# Set as environment variable (recommended)
export ST_MUI_LICENSE_KEY="your-license-key"

Or pass directly:

date_range_picker(label="Dates", license_key="your-license-key")

Running the example

pip install st-mui
streamlit run examples/showcase.py

Development

# Clone and install
git clone https://github.com/lperezmo/st-mui.git
cd st-mui
uv sync --dev

# Build frontend
cd st_mui/frontend
npm install
npm run build
cd ../..

# Run showcase
uv run streamlit run examples/showcase.py

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

st_mui-0.3.6.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

st_mui-0.3.6-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file st_mui-0.3.6.tar.gz.

File metadata

  • Download URL: st_mui-0.3.6.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for st_mui-0.3.6.tar.gz
Algorithm Hash digest
SHA256 34a75173bcc23c0780f3adc8e8f7c5295958458c21cc0adec1dbc660078c88d8
MD5 caec6fe6aac58d95cbd671766682a0a0
BLAKE2b-256 9825b1aab492dab8f318c58a91c53a47e3e5da16ad0af257ce6eff38bac42ce1

See more details on using hashes here.

File details

Details for the file st_mui-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: st_mui-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for st_mui-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 afee1e259f424cf04fc94e6eddc01c0b7bd6e689336f686790deef516e682006
MD5 3d34cb4c585e3be9feb2e526e5da7dff
BLAKE2b-256 fdeeee21f2322517778043fe547fa74bdf41de87d8e6880be49efd8807242792

See more details on using hashes here.

Release history Release notifications | RSS feed

0.5.5

2 files

0.5.4

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.4.0

2 files

0.3.7

2 files

This release

0.3.6 This release

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.2.5

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page