{"id":13498841,"url":"https://github.com/matplotlib/ipympl","last_synced_at":"2026-01-21T22:04:34.257Z","repository":{"id":37791407,"uuid":"63877123","full_name":"matplotlib/ipympl","owner":"matplotlib","description":"Matplotlib Jupyter Integration","archived":false,"fork":false,"pushed_at":"2025-10-09T14:17:32.000Z","size":70342,"stargazers_count":1641,"open_issues_count":172,"forks_count":230,"subscribers_count":31,"default_branch":"main","last_synced_at":"2026-01-13T19:52:31.343Z","etag":null,"topics":["interactive","ipywidgets","jupyter-widgets","jupyterlab-extension","matplotlib"],"latest_commit_sha":null,"homepage":"https://matplotlib.org/ipympl/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matplotlib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-07-21T14:38:56.000Z","updated_at":"2026-01-09T03:38:58.000Z","dependencies_parsed_at":"2024-01-01T18:30:45.970Z","dependency_job_id":"562f2d1c-74d0-4727-8703-72cf08b45f95","html_url":"https://github.com/matplotlib/ipympl","commit_stats":{"total_commits":343,"total_committers":35,"mean_commits":9.8,"dds":0.5801749271137027,"last_synced_commit":"564cf6d6767667743cf0e79b0b9a3670feb75c7c"},"previous_names":["matplotlib/jupyter-matplotlib"],"tags_count":55,"template":false,"template_full_name":null,"purl":"pkg:github/matplotlib/ipympl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matplotlib%2Fipympl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matplotlib%2Fipympl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matplotlib%2Fipympl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matplotlib%2Fipympl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matplotlib","download_url":"https://codeload.github.com/matplotlib/ipympl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matplotlib%2Fipympl/sbom","scorecard":{"id":625100,"data":{"date":"2025-08-11","repo":{"name":"github.com/matplotlib/ipympl","commit":"5e068ed222427919cc20c406e34d02ba9be55cc3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":6,"reason":"Found 17/27 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":2,"reason":"0 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/binder-on-pr.yml:1","Warn: no topLevel permission defined: .github/workflows/docs.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/update_galata_references.yaml:8","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/binder-on-pr.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/binder-on-pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/docs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/docs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:124: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update_galata_references.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/update_galata_references.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/update_galata_references.yaml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/matplotlib/ipympl/update_galata_references.yaml/main?enable=pin","Warn: pipCommand not pinned by hash: .binder/postBuild:3","Warn: pipCommand not pinned by hash: .github/workflows/docs.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:78","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:91","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/update_galata_references.yaml:47","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   6 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"15 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-rcw3-wmx7-cphr","Warn: Project is vulnerable to: GHSA-963h-3v39-3pqf","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-rm97-x556-q36h","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T06:10:21.362Z","repository_id":37791407,"created_at":"2025-08-21T06:10:21.362Z","updated_at":"2025-08-21T06:10:21.362Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28644803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T21:29:11.980Z","status":"ssl_error","status_checked_at":"2026-01-21T21:24:31.872Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interactive","ipywidgets","jupyter-widgets","jupyterlab-extension","matplotlib"],"created_at":"2024-07-31T21:00:45.376Z","updated_at":"2026-01-21T22:04:34.252Z","avatar_url":"https://github.com/matplotlib.png","language":"TypeScript","readme":"# ipympl\n\n[![Test Status](https://github.com/matplotlib/ipympl/actions/workflows/main.yml/badge.svg)](https://github.com/matplotlib/ipympl/actions/workflows/main.yml?query=branch%3Amain)\n[![Latest PyPI version](https://img.shields.io/pypi/v/ipympl?logo=pypi)](https://pypi.python.org/pypi/ipympl)\n[![Latest conda-forge version](https://img.shields.io/conda/vn/conda-forge/ipympl?logo=conda-forge)](https://anaconda.org/conda-forge/ipympl)\n[![Latest npm version](https://img.shields.io/npm/v/jupyter-matplotlib?logo=npm)](https://www.npmjs.com/package/jupyter-matplotlib)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/matplotlib/ipympl/main?urlpath=notebooks/docs/examples/full-example.ipynb)\n[![Gitter](https://img.shields.io/badge/gitter-Join_chat-blue?logo=gitter)](https://gitter.im/jupyter-widgets/Lobby)\n\nLeveraging the Jupyter interactive widgets framework, `ipympl` enables the interactive features of matplotlib in the Jupyter notebook and in JupyterLab.\n\nBesides, the figure `canvas` element is a proper Jupyter interactive widget which can be positioned in interactive widget layouts.\n\n## Usage\n\nTo enable the `ipympl` backend, simply use the `matplotlib` Jupyter\nmagic:\n\n```\n%matplotlib ipympl\n```\n\n## Documentation\n\nSee the documentation at: \u003chttps://matplotlib.org/ipympl/\u003e\n\n## Example\n\nSee the [example notebook](https://github.com/matplotlib/ipympl/blob/main/docs/examples/full-example.ipynb) for more!\n\n![matplotlib screencast](matplotlib.gif)\n\n## Installation\n\n### With conda\n\n```bash\nconda install -c conda-forge ipympl\n```\n\n### With pip\n\n```bash\npip install ipympl\n```\n\n### Use in JupyterLab\n\nIf you want to use ipympl in JupyterLab, we recommend using JupyterLab \u003e= 3.\n\nIf you use JupyterLab 2, you still need to install the labextension manually:\n\n```bash\nconda install -c conda-forge nodejs\njupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib\n```\n\n#### Install an old JupyterLab extension\n\nIf you are using JupyterLab 1 or 2, you will need to install the right `jupyter-matplotlib` version, according to the `ipympl` and `jupyterlab` versions you installed.\nFor example, if you installed ipympl `0.5.1`, you need to install jupyter-matplotlib `0.7.0`, and this version is only compatible with JupyterLab `1`.\n\n```bash\nconda install -c conda-forge ipympl==0.5.1\njupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib@0.7.0\n```\n\nVersions lookup table:\n\n| `ipympl` | `jupyter-matplotlib` | `JupyterLab` | `Matplotlib` |\n|----------|----------------------|--------------|--------------|\n| 0.10.0   | 0.12.0               | \u003e=2,\u003c5       | \u003e=3.5.0      |\n| 0.9.5-8  | 0.11.5-8             | \u003e=2,\u003c5       | \u003e=3.5.0      |\n| 0.9.3-4  | 0.11.3-4             | \u003e=2,\u003c5       | 3.4.0\u003e=      |\n| 0.9.0-2  | 0.11.0-2             | \u003e=2,\u003c5       | 3.4.0\u003e=  \u003c3.7|\n| 0.8.8    | 0.10.x               | \u003e=2,\u003c5       | 3.3.1\u003e=  \u003c3.7|\n| 0.8.0-7  | 0.10.x               | \u003e=2,\u003c5       | 3.3.1\u003e=, \u003c3.6|\n| 0.7.0    | 0.9.0                | \u003e=2,\u003c5       | 3.3.1\u003e=      |\n| 0.6.x    | 0.8.x                | \u003e=2,\u003c5       | 3.3.1\u003e=, \u003c3.4|\n| 0.5.8    | 0.7.4                | \u003e=1,\u003c3       | 3.3.1\u003e=, \u003c3.4|\n| 0.5.7    | 0.7.3                | \u003e=1,\u003c3       | 3.2.*        |\n| ...      | ...                  | ...          |              |\n| 0.5.3    | 0.7.2                | \u003e=1,\u003c3       |              |\n| 0.5.2    | 0.7.1                | \u003e=1,\u003c2       |              |\n| 0.5.1    | 0.7.0                | \u003e=1,\u003c2       |              |\n| 0.5.0    | 0.6.0                | \u003e=1,\u003c2       |              |\n| 0.4.0    | 0.5.0                | \u003e=1,\u003c2       |              |\n| 0.3.3    | 0.4.2                | \u003e=1,\u003c2       |              |\n| 0.3.2    | 0.4.1                | \u003e=1,\u003c2       |              |\n| 0.3.1    | 0.4.0                | \u003e=0\u003c2        |              |\n\n### For a development installation\n\nWe recommend using [pixi](https://pixi.sh) for development as it handles both Python and Node.js dependencies (matplotlib has compiled dependencies).\n\n```bash\n# Install dependencies and set up environment\npixi install\n\n# Install the Python package in editable mode\npixi run pip install -e .\n\n# Install JavaScript dependencies and build\npixi run jlpm install\npixi run jlpm build\n\n# Set up JupyterLab extension in development mode\npixi run jupyter labextension develop --overwrite .\n\n# Start development workflow (in separate terminals)\npixi run npm run watch    # Terminal 1: Auto-rebuild on changes\npixi run jupyter lab      # Terminal 2: Run JupyterLab\n```\n\n**Alternative: Using conda/mamba**\n\n```bash\nmamba env create --file dev-environment.yml\nconda activate ipympl-dev\n\npip install -e .\njlpm install\njlpm build\njupyter labextension develop --overwrite .\n\n# Start development workflow (in separate terminals)\nnpm run watch    # Terminal 1: Auto-rebuild on changes\njupyter lab      # Terminal 2: Run JupyterLab\n```\n\n#### How to see your changes\n\n**TypeScript/JavaScript:** After a change, the watch command will automatically rebuild. Wait for the build to finish, then refresh your browser and the changes should take effect.\n\n**Python:** If you make a change to the Python code, restart the notebook kernel to have it take effect.\n\n#### Classic Jupyter Notebook\n\nIf you need to develop for classic Jupyter Notebook (not JupyterLab), also run:\n\n```bash\n# With pixi:\npixi run jupyter nbextension install --py --symlink --sys-prefix --overwrite ipympl\npixi run jupyter nbextension enable --py --sys-prefix ipympl\n\n# Or with conda/mamba:\njupyter nbextension install --py --symlink --sys-prefix --overwrite ipympl\njupyter nbextension enable --py --sys-prefix ipympl\n```\n","funding_links":[],"categories":["Jupyter Notebook","others","交互式小部件和可视化","Interactive Widgets \u0026 Visualization","Interactive Widgets"],"sub_categories":["Interactive Jupyter Widget Ecosystem"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatplotlib%2Fipympl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatplotlib%2Fipympl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatplotlib%2Fipympl/lists"}