Skip to main content

Dash components wrapping MUI X Scheduler — Event Calendar (Community & Premium) and Event Timeline

Project description

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 boundaryevents 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.

Project details


Download files

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

Source Distribution

dash_mui_scheduler-0.1.0.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

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

dash_mui_scheduler-0.1.0-py3-none-any.whl (1.8 MB view details)

Uploaded Python 3

File details

Details for the file dash_mui_scheduler-0.1.0.tar.gz.

File metadata

  • Download URL: dash_mui_scheduler-0.1.0.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for dash_mui_scheduler-0.1.0.tar.gz
Algorithm Hash digest
SHA256 84eb88bd029cf1c4a734203e4e6fea2dd0d7d4b125160bd7fb6c795b0c814670
MD5 190debc4bf1e5c41c7ca7f7a0cce5944
BLAKE2b-256 be093507c9df4d88c3e2ba382ceb3869e4537471484bb83f80ed390fa8f1f56a

See more details on using hashes here.

File details

Details for the file dash_mui_scheduler-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dash_mui_scheduler-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5aa18cab59f7043e6e38e1b6db1f8ecb240474744d9b3b60e86c839256a7ce8a
MD5 aa8e619b5e910c499df77e673c6f2670
BLAKE2b-256 a423daad85569240a69380631ffbf3ee1fe0af02d63d01d67bd4d48c54e0595f

See more details on using hashes here.

Supported by

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