{"id":13453611,"url":"https://github.com/ipython-contrib/jupyter_contrib_nbextensions","last_synced_at":"2026-04-09T03:31:00.630Z","repository":{"id":9498700,"uuid":"11391151","full_name":"ipython-contrib/jupyter_contrib_nbextensions","owner":"ipython-contrib","description":"A collection of various notebook extensions for Jupyter","archived":false,"fork":false,"pushed_at":"2024-07-04T10:37:29.000Z","size":43402,"stargazers_count":5289,"open_issues_count":388,"forks_count":800,"subscribers_count":128,"default_branch":"master","last_synced_at":"2025-12-20T23:18:20.060Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://jupyter-contrib-nbextensions.readthedocs.io/en/latest","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipython-contrib.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING.rst","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}},"created_at":"2013-07-13T17:05:16.000Z","updated_at":"2025-12-20T13:09:53.000Z","dependencies_parsed_at":"2024-09-20T17:38:39.773Z","dependency_job_id":"20f89dd6-81ec-419b-b933-25b2649ce8e4","html_url":"https://github.com/ipython-contrib/jupyter_contrib_nbextensions","commit_stats":{"total_commits":1901,"total_committers":142,"mean_commits":"13.387323943661972","dds":0.6438716465018411,"last_synced_commit":"374defd124b636e3337ef8e6249f3c67da6982b8"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/ipython-contrib/jupyter_contrib_nbextensions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipython-contrib%2Fjupyter_contrib_nbextensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipython-contrib%2Fjupyter_contrib_nbextensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipython-contrib%2Fjupyter_contrib_nbextensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipython-contrib%2Fjupyter_contrib_nbextensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipython-contrib","download_url":"https://codeload.github.com/ipython-contrib/jupyter_contrib_nbextensions/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipython-contrib%2Fjupyter_contrib_nbextensions/sbom","scorecard":{"id":494055,"data":{"date":"2025-08-11","repo":{"name":"github.com/ipython-contrib/jupyter_contrib_nbextensions","commit":"374defd124b636e3337ef8e6249f3c67da6982b8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"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":"Code-Review","score":5,"reason":"Found 8/14 approved changesets -- score normalized to 5","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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","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":-1,"reason":"no workflows found","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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"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":"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":"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":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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 'master'"],"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":"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-29gw-9793-fvw7","Warn: Project is vulnerable to: PYSEC-2015-24 / GHSA-4vwq-x64q-j4cj","Warn: Project is vulnerable to: PYSEC-2017-46 / GHSA-66gw-5xpf-gfp5","Warn: Project is vulnerable to: PYSEC-2015-25 / GHSA-92mr-v722-f48m","Warn: Project is vulnerable to: PYSEC-2022-12 / GHSA-pq7m-3gw7-gq5x","Warn: Project is vulnerable to: PYSEC-2017-47"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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"}}]},"last_synced_at":"2025-08-19T19:59:19.508Z","repository_id":9498700,"created_at":"2025-08-19T19:59:19.508Z","updated_at":"2025-08-19T19:59:19.508Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31584567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-07-31T08:00:44.298Z","updated_at":"2026-04-09T03:31:00.610Z","avatar_url":"https://github.com/ipython-contrib.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Containers \u0026 Language Extentions \u0026 Linting","Extensions","Jupyter拓展"],"sub_categories":["For Python"],"readme":"Jupyter notebook extensions\n=============================\n\n[![Join the chat at https://gitter.im/ipython-contrib/jupyter_contrib_nbextensions](https://img.shields.io/gitter/room/ipython-contrib/jupyter_contrib_nbextensions.svg?maxAge=3600)](https://gitter.im/ipython-contrib/jupyter_contrib_nbextensions?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![Documentation Status](https://readthedocs.org/projects/jupyter-contrib-nbextensions/badge/?version=latest)](https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/)\n[![Documentation Status](https://readthedocs.org/projects/jupyter-contrib-nbextensions/badge/?version=stable)](https://jupyter-contrib-nbextensions.readthedocs.io/en/stable/)\n[![GitHub issues](https://img.shields.io/github/issues/ipython-contrib/jupyter_contrib_nbextensions.svg?maxAge=3600)](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/issues)\n\u003cbr/\u003e\n[![Travis-CI Build Status](https://img.shields.io/travis/ipython-contrib/jupyter_contrib_nbextensions.svg?maxAge=3600\u0026label=Travis)](https://travis-ci.org/ipython-contrib/jupyter_contrib_nbextensions)\n[![Appveyor Build status](https://img.shields.io/appveyor/ci/jcb91/ipython-notebook-extensions-ynb9f.svg?maxAge=3600\u0026label=Appveyor)](https://ci.appveyor.com/project/jcb91/ipython-notebook-extensions-ynb9f)\n[![Coveralls python test coverage](https://img.shields.io/coveralls/ipython-contrib/jupyter_contrib_nbextensions/master.svg?maxAge=3600\u0026label=Coveralls)](https://coveralls.io/github/ipython-contrib/jupyter_contrib_nbextensions)\n[![Codecov python test coverage](https://img.shields.io/codecov/c/github/ipython-contrib/jupyter_contrib_nbextensions/master.svg?maxAge=3600\u0026label=Codecov)](https://codecov.io/gh/ipython-contrib/jupyter_contrib_nbextensions)\n\u003cbr/\u003e\n[![GitHub tag](https://img.shields.io/github/tag/ipython-contrib/jupyter_contrib_nbextensions.svg?maxAge=3600\u0026label=Github)](https://github.com/ipython-contrib/jupyter_contrib_nbextensions)\n[![PyPI](https://img.shields.io/pypi/v/jupyter_contrib_nbextensions.svg?maxAge=3600)](https://pypi.python.org/pypi/jupyter_contrib_nbextensions)\n[![Anaconda cloud](https://anaconda.org/conda-forge/jupyter_contrib_nbextensions/badges/version.svg)](https://anaconda.org/conda-forge/jupyter_contrib_nbextensions)\n\nThis repository contains a collection of extensions that add functionality to\nthe Jupyter notebook.\nThese extensions are mostly written in Javascript and will be loaded locally in\nyour browser.\n\nThe IPython-contrib repository is maintained independently by a group of users\nand developers and not officially related to the IPython development team.\n\nThe maturity of the provided extensions varies, so please\n[create an issue](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/issues/new)\nat the project's\n[github repository](https://github.com/ipython-contrib/jupyter_contrib_nbextensions)\nif you encounter any problems.\n\n\nIPython/Jupyter version support\n===============================\n\nFor Jupyter version 4 or 5, use the master branch of the repository.\nMost nbextensions have been updated to work with both Jupyter 4.x and 5.x, but occasionally things get missed, or the Jupyter API changes in a minor version update, so if anything doesn't work as you'd expect/hope, please do check the issues, or open a new one as necessary!\n\nThis repo is pretty much all in the main master branch, although there remain vestigial branches for IPython notebook versions 2.x and 3.x.\n\nJupyterLab\n==========\n\nDue to major differences between the Jupyter Notebook and JupyterLab, the extensions in this\nrepository will not work in JupyterLab. You will find a list of alternative extensions for\nJupyterLab on [jupyterlab-contrib](https://jupyterlab-contrib.github.io/migrate_from_classical.html).\n\n\nDocumentation\n=============\n\nDocumentation for all maintained extensions can be found at\n[jupyter-contrib-nbextensions.readthedocs.io](https://jupyter-contrib-nbextensions.readthedocs.io/en/latest)\n\nAll extensions that are maintained and active\nhave at least a  yaml file to allow them being configured using the\n[jupyter_nbextensions_configurator](https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator)\nserver extension, which is installed as a dependency of this package.\nMost also have a markdown readme file for documentation.\nThe `jupyter_nbextensions_configurator` server extension shows an nbextensions\ntab on the main notebook dashboard (file tree page) from which you can see each\nnbextension's markdown readme, and configure its options.\nTo view documentation without installing, you can check the list at\n[jupyter-contrib-nbextensions.readthedocs.io/en/latest/nbextensions.html](http://jupyter-contrib-nbextensions.readthedocs.io/en/latest/nbextensions.html),\nor browse the nbextensions\ndirectory to read markdown readmes on github at\n[github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions).\n\nSome extensions are not documented. We encourage you to add documentation for them.\n\n\nInstallation\n============\n\nTo install the `jupyter_contrib_nbextensions` notebook extensions, three steps\nare required. First, the Python pip package needs to be installed. Then, the\nnotebook extensions themselves need to be copied to the Jupyter data directory.\nFinally, the installed notebook extensions can be enabled, either by using\nbuilt-in Jupyter commands, or more conveniently by using the\n[jupyter_nbextensions_configurator](https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator)\nserver extension, which is installed as a dependency of this repo.\n\nThe Python package installation step is necessary to allow painless\ninstallation of the nbextensions together with additional items like nbconvert\ntemplates, pre-/postprocessors, and exporters.\n\n\n1\\. Install the python package\n------------------------------\n\n\n### PIP\n\nAll of the nbextensions in this repo are provided as parts of a python package,\nwhich is installable in the usual manner using `pip` or the `setup.py` script.\nTo install the current version from PyPi, simply type\n\n    pip install jupyter_contrib_nbextensions\n\nAlternatively, you can install directly from the current master branch of the\nrepository\n\n    pip install https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tarball/master\n\nAll the usual pip options apply, e.g. using pip's `--upgrade` flag to force an\nupgrade, or `-e` for an editable install.\n\n\n### Conda\n\nThere are conda packages for the notebook extensions and the\n[jupyter_nbextensions_configurator](https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator)\navailable from [conda-forge](https://conda-forge.github.io).\nYou can install both using\n\n    conda install -c conda-forge jupyter_contrib_nbextensions\n\nThis also automatically installs the Javascript and CSS files\n(using `jupyter contrib nbextension install --sys-prefix`), therefore \nthe second installation step below can be skipped.\n\n\n### Installation from cloned Repo\n\nYou can also install from a cloned repo, which can be useful for development.\nYou can clone the repo using\n\n    git clone https://github.com/ipython-contrib/jupyter_contrib_nbextensions.git\n\nThen perform an editable pip install using\n\n    pip install -e jupyter_contrib_nbextensions\n\n\n2\\. Install javascript and css files\n------------------------------------\n\nThis step copies the nbextensions' javascript and css files into the jupyter\nserver's search directory, and edits some jupyter config files.\nA `jupyter` subcommand is provided for the purpose:\n\n    jupyter contrib nbextension install --user\n\nThe command does two things: installs nbextension files, and edits nbconvert\nconfig files. The first part is essentially a wrapper around the\nnotebook-provided `jupyter nbextension install`, and copies relevant javascript\nand css files to the appropriate jupyter data directory.\nThe second part edits the config files `jupyter_nbconvert_config.json`and\n`jupyter_notebook_config.json` as noted below in the options.\nThe command can take most of the same options as the jupyter-provided versions,\nincluding\n\n * `--user` to install into the user's home jupyter directories\n * `--system` to perform installation into system-wide jupyter directories\n * `--sys-prefix` to install into python's `sys.prefix`, useful for instance in\n   virtual environments, such as with conda\n * `--symlink` to symlink the nbextensions rather than copying each file\n   (recommended on non-Windows platforms).\n * `--debug`, for more-verbose output\n\nIn addition, two further option flags are provided to perform either only the\nconfig-editing operations, or only the file-copy operations:\n\n * `--only-files` to install nbextension files without editing any config files\n * `--only-config` to edit the config files without copying/symlinking any\n   nbextension files. This edits the following files in the applicable jupyter\n   config directory:\n    - `jupyter_nbconvert_config.json` to use some of the classes provided\n      in the python module `jupyter_contrib_nbextensions.nbconvert_support`\n    - `jupyter_notebook_config.json` to enable the serverextension\n      `jupyter_nbextensions_configurator`.\n\nFinally, the `--perform-running-check` option flag is provided in order to\nprevent the installation from proceeding if a notebook server appears to be\ncurrently running\n(by default, the install will still be performed, even if a notebook server\nappears to be running).\n\nAn analogous `uninstall` command is also provided, to remove all of the\nnbextension files from the jupyter directories.\n\n\n3\\. Enabling/Disabling extensions\n---------------------------------\n\nTo use an nbextension, you'll also need to enable it, which tells the notebook\ninterface to load it. To do this, you can use a Jupyter subcommand:\n\n    jupyter nbextension enable \u003cnbextension require path\u003e\n\nfor example,\n\n    jupyter nbextension enable codefolding/main\n\nTo disable the extension again, use\n\n    jupyter nbextension disable \u003cnbextension require path\u003e\n\n**Alternatively**, and more conveniently, you can use the\n[jupyter_nbextensions_configurator](https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator)\nserver extension, which is installed as a dependency of this repo, and can be\nused to enable and disable the individual nbextensions, as well as configure\ntheir options. You can then open the `nbextensions` tab on the tree\n(dashboard/file browser) notebook page to configure nbextensions.\nYou will have access there to a dashboard where extensions can be\nenabled/disabled via checkboxes.\nAdditionally, a short documentation for each extension is displayed, and\nconfiguration options are presented.\n\n![jupyter_nbextensions_configurator](https://raw.githubusercontent.com/Jupyter-contrib/jupyter_nbextensions_configurator/master/src/jupyter_nbextensions_configurator/static/nbextensions_configurator/icon.png)\n\n\n4\\. More complex setups\n-----------------------\n\nFor complex or customized installation scenarios, please look at the\ndocumentation for installing notebook extensions, server extensions, nbconvert\npre/postprocessors and templates on the [Jupyter homepage](https://jupyter.org).\nMost nbextensions here should work fine with JupyterHub (because JupyterHub spawns \nregular notebook servers for each individual user), but won't work with JupyterLab \n(because the Javascript framework of JupyterLab is different from the notebook's, and \nis still rapidly changing under active development).\n\nSee also [installing Jupyter](https://jupyter.readthedocs.io/en/latest/install.html)\n\n\nNotebook extension structure\n============================\n\nMost of the nbextensions are stored in the repository each as a separate subdirectory of\n[`src/jupyter_contrib_nbextensions/nbextensions`](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions).\n\nEach notebook extension typically has its own directory named after the extension, containing:\n\n * `thisextension/thisextension.js` - javascript implementing the nbextension\n * `thisextension/thisextension.yml` - file describing the nbextension to the `jupyter_nbextensions_configurator` server extension\n * `thisextension/thisextension.css` - optional CSS file, which may be loaded by the javascript\n * `thisextension/README.md` - readme file describing the nbextension in markdown format\n\nA few (jupyter_highlight_selected_word, jupyter_latex_envs), exist as separate packages on pypi, which are included as dependencies of this package.\n\nFor further details, see [the documentation at jupyter-contrib-nbextensions.readthedocs.io](http://jupyter-contrib-nbextensions.readthedocs.io/en/latest/internals.html).\n\n\nContributing\n============\n\nTo learn how to setup a development environment and for contribution guidelines, see [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n\nChanges\n=======\n\nFor changes, see the [CHANGELOG.md](./CHANGELOG.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipython-contrib%2Fjupyter_contrib_nbextensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipython-contrib%2Fjupyter_contrib_nbextensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipython-contrib%2Fjupyter_contrib_nbextensions/lists"}