Skip to main content

Dash MUI Scheduler

Event calendar, resource timeline & radial chart components for Plotly Dash, wrapping the MUI X Scheduler.

Drag & drop scheduling · recurrence · resources · timezones · automatic dark mode · full Dash callback interoperability.

PyPI version Python Dash 4.2+ License: MIT Discord YouTube

Documentation · Discord · YouTube · GitHub


dash-mui-scheduler

Maintained by Pip Install Python LLC.


Overview

dash-mui-scheduler wraps the MUI X Scheduler and the MUI X Premium radial charts as a Plotly Dash component library. Build event calendars, Gantt-style resource timelines, and polar charts in pure Python — events cross the Dash ↔ Python boundary as plain dictionaries with ISO-string dates, and every user interaction (create / move / resize / edit / delete) round-trips straight back into your callbacks.

  • Event calendar — day / week / month / agenda views, drag-and-drop, resizing, an editing dialog, and a resource side panel
  • Recurring events (Premium) — RFC 5545 rrule strings with per-occurrence exceptions
  • Resource timeline (Premium) — resource-row Gantt view across time / days / weeks / months / years zoom presets
  • Radial charts (Premium, preview) — polar line/area and bar charts for periodic data
  • Plain-dict data boundary — events is both input and output; lastAction tells you exactly what the user changed
  • Automatic dark mode — follows the surrounding Dash Mantine Components color scheme
  • Dash 4.2+ compatible (works on Dash ≥ 2.11)

⚠️ The upstream MUI X Scheduler is in beta (@mui/x-scheduler@9.0.0-beta.0, pinned exactly). This wrapper's API is stable per release, but the upstream API may change before MUI's stable cut.

Installation

pip install dash-mui-scheduler

Quick Start

import dash
from dash import Dash, html, Input, Output, callback
import dash_mui_scheduler as dms

app = Dash(__name__)

events = [
    {"id": "1", "title": "Team Meeting",   "start": "2024-01-15T10:00:00", "end": "2024-01-15T11:00:00", "color": "blue"},
    {"id": "2", "title": "Project Review", "start": "2024-01-16T14:00:00", "end": "2024-01-16T15:30:00", "color": "purple"},
    {"id": "3", "title": "Client Call",    "start": "2024-01-17T09:00:00", "end": "2024-01-17T10:00:00", "color": "green"},
]

app.layout = html.Div(
    dms.EventCalendar(id="cal", events=events, defaultVisibleDate="2024-01-15", height=600),
    style={"maxWidth": 1000, "margin": "2rem auto"},
)

@callback(Output("cal", "events"), Input("cal", "lastAction"), prevent_initial_call=True)
def on_change(last_action):
    print("user did:", last_action)   # {'type': 'move', 'event': {...}, 'event_timestamp': ...}
    return dash.no_update

if __name__ == "__main__":
    app.run(debug=True)

Documentation

Full documentation, with a live, editable demo and source for every example, lives at the open-source documentation index maintained by Pip Install Python LLC:

📚 pip-install-python.com

You can also run the docs site locally — it is a markdown-driven Dash app served by run.py:

pip install -r requirements.txt
pip install -e .          # install the built components
python run.py             # open http://localhost:8560

Pages cover Quickstart, the Event Calendar, a Playground, Events, Resources, Views, Navigation, Responsive behavior, Drag & Resize, Editing, Preferences, Recurrence (Premium), the Event Timeline (Premium), Localization & Timezones, and the three radial chart pages — each with live demos, the matching source, and an auto-generated prop table. The app supports Dash 4.1+ pluggable backends via DASH_BACKEND=flask|fastapi.

Components

Component Plan What it is
EventCalendar Community (MIT) Day / week / month / agenda calendar with drag-and-drop, resizing, resources, and an editing dialog. No license key.
EventCalendarPremium Premium The calendar plus the recurrence engine (RRULE events + exception dates).
EventTimeline Premium A resource-row, Gantt-style timeline across configurable zoom presets.
RadialLineChart Premium (preview) Polar line/area charts (@mui/x-charts-premium) for trends along periodic values.
RadialBarChart Premium (preview) Polar bar charts for comparing values along periodic categories.

All five load from a single bundled JS file — no extra external_scripts, CSS, or React setup.

Premium licensing

The Premium components wrap @mui/x-scheduler-premium (scheduler) and @mui/x-charts-premium (radial charts); without a valid MUI X Premium license key they render a watermark. Both share the same @mui/x-license@9 singleton, so a single key covers everything — pass it from the environment, never hard-coded:

import os
import dash_mui_scheduler as dms

dms.EventTimeline(id="tl", licenseKey=os.environ["MUI_X_LICENSE_KEY"], ...)

The Dash wrapper code in this package is MIT-licensed; the underlying MUI X Premium libraries are not. The radial charts are Unstable_ previews — production-ready, but their API may shift.

The data boundary

  • events is a list of dicts and is both an input and an output. Seed it with your data; the component writes the full new array back whenever the user creates, moves, resizes, edits, or deletes an event.
  • Event dicts need id, title, start, end; optional keys include color, resource, allDay, description, readOnly, and (Premium calendar) rrule / exDates.
  • Dates are ISO strings ("2024-01-15T10:00:00", or "...Z" for UTC). No Python datetime objects cross the boundary.
  • lastAction (output) tells you exactly what changed — {"type": "create" | "update" | "delete" | "move" | "resize", "event": {…}, "event_timestamp": …}.
  • Controlled + uncontrolled pairs — stateful concepts (view, visibleDate, preset, preferences, visibleResources) each come as a controlled prop plus a defaultX uncontrolled variant, and are written back on change.

Recurring events (Premium)

import os
import dash_mui_scheduler as dms

dms.EventCalendarPremium(
    id="cal",
    licenseKey=os.environ["MUI_X_LICENSE_KEY"],
    events=[{
        "id": "1", "title": "Standup",
        "start": "2024-01-15T09:00:00", "end": "2024-01-15T09:15:00",
        "rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
        "exDates": ["2024-01-17T09:00:00"],
    }],
    defaultVisibleDate="2024-01-15",
)

Dragging a single occurrence prompts the user for "this event" vs "all events"; the outcome lands in events / lastAction like any other edit.

Radial charts (Premium, preview)

Row-oriented dataset + series referencing columns by dataKey. rotationAxis is the angular (x-like) axis, radiusAxis the radial (y-like) one:

import os
import dash_mui_scheduler as dms

dms.RadialLineChart(
    id="polar",
    height=400,
    licenseKey=os.environ.get("MUI_X_LICENSE_KEY", ""),
    dataset=[{"month": "Jan", "london": 49}, {"month": "Feb", "london": 38}],  # ...
    series=[{"dataKey": "london", "label": "London (mm)", "curve": "natural", "showMark": True}],
    rotationAxis=[{"scaleType": "point", "dataKey": "month", "disableLine": True}],
    radiusAxis=[{"disableLine": True}],
    grid={"rotation": True, "radius": True},
)

Axis and item clicks surface through the clickData output for drill-down callbacks.

API reference

EventCalendar / EventTimeline props (selected)

Prop Type Description
events list Event dicts — input and output
lastAction output {type, event, event_timestamp} for the most recent user edit
resources list [{"id", "name", "eventColor"}, ...]; events point at one via "resource"
views / view / defaultView list / str Calendar views: day, week, month, agenda
preset / presets str / list Timeline zoom: time, days, weeks, months, years
visibleDate / defaultVisibleDate str ISO date driving the visible range (controlled / uncontrolled)
areEventsDraggable / areEventsResizable bool Interaction switches (readOnly kills all editing)
eventCreation bool / dict Enable creation; dict sets interaction + default duration
displayTimezone str IANA timezone name — shifts display, not data
preferences / preferencesMenuConfig dict am/pm, week start, weekends, side panel, …
localeText dict Translation string overrides
height / sx / className — Sizing and MUI system styling

The full, auto-generated prop tables are on each component's documentation page.

Development

# Install dependencies
npm install                 # @mui/x-scheduler + build toolchain
pip install -r requirements.txt

# Build the JS bundle + regenerate the Python wrappers
npm run build               # webpack bundle + dash-generate-components → dash_mui_scheduler/*.py
python _validate_init.py

# Standalone smoke test
python usage.py             # http://localhost:8051

# Build a distribution
python -m build

The React components in src/lib/ are the source of truth; the Python package in dash_mui_scheduler/ is auto-generated from their PropTypes by dash-generate-components. The built bundle and generated wrappers are committed, so pip install -e . works without npm. setup.py reads the version from package.json — keep them in sync.

Requirements

  • Python >= 3.8
  • Dash >= 2.11 (developed against Dash 4.2)
  • dash-mantine-components (for the docs site and examples)
  • Node.js >= 16 (for development / rebuilding the JS bundle)

Community & support

Come build with us:

More from Pip Install Python LLC

dash-mui-scheduler is one of several tools built and maintained by Pip Install Python LLC:

Project What it is
📚 Pip Install Python Open-source documentation index for the Python & Dash ecosystem
🔀 PiratesBargain.com E-commerce / digital Commerce
🧠 ai-agent.buzz Infinite AI canvas
🎬 2plot.media Videography application

License

MIT — see LICENSE for the Dash wrapper code in this package. The wrapped @mui/x-scheduler (Community) is MIT; @mui/x-scheduler-premium and @mui/x-charts-premium require a commercial MUI X Premium license to use without a watermark. Built by Pip Install Python LLC. to bridge mui components into the dash framework.

Metadata

Release files for dash-mui-scheduler 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dash-mui-scheduler 0.1.0
File Size Uploaded Provenance
dash_mui_scheduler-0.1.0.tar.gz 1.7 MB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for dash-mui-scheduler 0.1.0
File Interpreter ABI Platform
dash_mui_scheduler-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 3.5 MB

Release files / dash_mui_scheduler-0.1.0.tar.gz

Download URL dash_mui_scheduler-0.1.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
84eb88bd029cf1c4a734203e4e6fea2dd0d7d4b125160bd7fb6c795b0c814670
BLAKE2b-256 checksum
How to use checksums
be093507c9df4d88c3e2ba382ceb3869e4537471484bb83f80ed390fa8f1f56a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / dash_mui_scheduler-0.1.0-py3-none-any.whl

Download URL dash_mui_scheduler-0.1.0-py3-none-any.whl
Size 1.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
5aa18cab59f7043e6e38e1b6db1f8ecb240474744d9b3b60e86c839256a7ce8a
BLAKE2b-256 checksum
How to use checksums
a423daad85569240a69380631ffbf3ee1fe0af02d63d01d67bd4d48c54e0595f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Security for dash-mui-scheduler 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page