Skip to main content

A Plotly Dash wrapper for FullCalendar with premium (Scheduler) plugins bundled

Project description

skinnycal

A lightweight Plotly Dash wrapper around @fullcalendar/react, with the FullCalendar Premium (Scheduler) plugins statically bundled so resource views work out of the box.

Forked from dash-fullcalendar. See PREMIUM_FORK_CHANGES.md for the full rationale and diff notes.


Installation

pip install skinnycal

PyPI distribution and Python import name are both skinnycal.


Quick start

from dash import Dash, html
import skinnycal as dcal

app = Dash(__name__)

app.layout = html.Div([
    dcal.FullCalendar(
        id="cal",
        initialView="dayGridMonth",
        editable=True,
        selectable=True,
        events=[
            {"title": "Audit", "date": "2025-08-01"},
            {"title": "Go-Live", "date": "2025-08-10"},
        ],
    )
])

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

Open http://127.0.0.1:8050 in your browser.

Premium (Scheduler) views

Pass a valid schedulerLicenseKey and request a resource view — the premium plugins are already in the bundle, no async chunk fetch:

dcal.FullCalendar(
    id="cal",
    schedulerLicenseKey="GPL-My-Project-Is-Open-Source",  # or your commercial key
    plugins=["resourceTimeline", "interaction"],
    initialView="resourceTimelineWeek",
    resources=[{"id": "a", "title": "Room A"}, {"id": "b", "title": "Room B"}],
    events=[{"resourceId": "a", "title": "Kickoff", "start": "2025-08-01"}],
)

Repository layout

Path Purpose
skinnycal/ Python package published to PyPI. Contains generated Dash component classes and pre-compiled JS assets (_js_dist).
src/ Raw React source for the wrapper.
package.json, webpack.config.js JS build pipeline (npm run build).
usage.py Minimal Dash demo.
tests/ Integration tests with dash[testing] & pytest.
.github/workflows/ CI workflow that builds and publishes to PyPI on push to main.

Development

  1. Clone and install dependencies

    git clone https://github.com/PepijnWissing/skinnyCal.git
    cd skinnyCal
    npm install
    python -m venv .venv && . .venv/Scripts/activate   # POSIX: source .venv/bin/activate
    pip install -r requirements.txt
    
  2. Build and run the example

    npm run build        # webpack + dash-generate-components
    pip install -e .
    python usage.py      # open http://localhost:8050
    
  3. Run tests

    pytest -q
    

Releasing

Publishing is automated: any push to main triggers .github/workflows/publish.yml, which builds an sdist + wheel and uploads to PyPI via Trusted Publishing (OIDC). Pushes that don't bump the version are no-ops (skip-existing: true).

To cut a release, bump the version in all three places (they must stay in sync — __version__ is read from package-info.json at import time):

  • pyproject.toml[project].version
  • skinnycal/package-info.jsonversion
  • package.jsonversion

Then commit and push to main.


License

MIT © Scott Kilgore (upstream wrapper). Bundled @fullcalendar premium plugin code is governed by FullCalendar's own license — commercial production use requires a purchased Scheduler license.

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

skinnycal-0.1.7.tar.gz (501.8 kB view details)

Uploaded Source

Built Distribution

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

skinnycal-0.1.7-py3-none-any.whl (504.1 kB view details)

Uploaded Python 3

File details

Details for the file skinnycal-0.1.7.tar.gz.

File metadata

  • Download URL: skinnycal-0.1.7.tar.gz
  • Upload date:
  • Size: 501.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for skinnycal-0.1.7.tar.gz
Algorithm Hash digest
SHA256 5294c285a19d1662a72f8ce3c52dc65afb97b3c9684f45c756f986f0a4486a68
MD5 3724e833e175000e61d3339d2462fa6b
BLAKE2b-256 12e6aab91f43973c6c4ff462231eacba8aee9d34445367d6d0c884e8fc1396ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for skinnycal-0.1.7.tar.gz:

Publisher: publish.yml on PepijnWissing/skinnyCal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file skinnycal-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: skinnycal-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 504.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for skinnycal-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 e7d54d50ddedf0a7e752bcf84046c0e552b4cd17d7f24307e5f2a124f9a20851
MD5 c615cdde9bc51f18e5a0b06e38b2579e
BLAKE2b-256 fd167335e6c68dad464a7f3d6cb92135c6222b1330ecff80a2b1eb37f56674c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for skinnycal-0.1.7-py3-none-any.whl:

Publisher: publish.yml on PepijnWissing/skinnyCal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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