{"id":13608645,"url":"https://github.com/jtpio/ipylab","last_synced_at":"2025-04-04T13:11:57.755Z","repository":{"id":37335739,"uuid":"221993119","full_name":"jtpio/ipylab","owner":"jtpio","description":"Control JupyterLab from Python Notebooks with Jupyter Widgets 🧪 ☢️ 🐍","archived":false,"fork":false,"pushed_at":"2024-04-06T06:39:52.000Z","size":2005,"stargazers_count":177,"open_issues_count":29,"forks_count":13,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-04-14T17:24:55.781Z","etag":null,"topics":["jupyter","jupyterlab","jupyterlab-extension","python","widgets"],"latest_commit_sha":null,"homepage":"","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/jtpio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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}},"created_at":"2019-11-15T19:52:12.000Z","updated_at":"2024-06-18T18:14:13.022Z","dependencies_parsed_at":"2024-01-17T00:18:30.605Z","dependency_job_id":"ef598342-45a6-4875-a381-7418db61a481","html_url":"https://github.com/jtpio/ipylab","commit_stats":{"total_commits":158,"total_committers":8,"mean_commits":19.75,"dds":"0.28481012658227844","last_synced_commit":"76ed70310ab9d24a51cfac1ec427f53622b7c94b"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtpio%2Fipylab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtpio%2Fipylab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtpio%2Fipylab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtpio%2Fipylab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jtpio","download_url":"https://codeload.github.com/jtpio/ipylab/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247182401,"owners_count":20897381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["jupyter","jupyterlab","jupyterlab-extension","python","widgets"],"created_at":"2024-08-01T19:01:28.920Z","updated_at":"2025-04-04T13:11:57.724Z","avatar_url":"https://github.com/jtpio.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","JupyterLab扩展","JupyterLab Extensions"],"sub_categories":[],"readme":"# ipylab\n\n![Github Actions Status](https://github.com/jtpio/ipylab/workflows/Build/badge.svg)\n[![JupyterLite](https://jupyterlite.rtfd.io/en/latest/_static/badge-launch.svg)](https://ipylab.readthedocs.io/en/latest/lite/lab)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jtpio/ipylab/main?urlpath=lab/tree/examples/widgets.ipynb)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/ipylab.svg)](https://anaconda.org/conda-forge/ipylab)\n[![pypi](https://img.shields.io/pypi/v/ipylab.svg)](https://pypi.python.org/pypi/ipylab)\n[![npm](https://img.shields.io/npm/v/ipylab.svg)](https://www.npmjs.com/package/ipylab)\n\nControl JupyterLab from Python notebooks.\n\nThe goal is to provide access to most of the JupyterLab environment from Python notebooks. For example:\n\n- Adding widgets to the main area `DockPanel`, left, right or top area\n- Build more advanced interfaces leveraging `SplitPanel`, `Toolbar` and other Lumino widgets\n- Launch arbitrary commands (new terminal, change theme, open file and so on)\n- Open a workspace with a specific layout\n- Listen to JupyterLab signals (notebook opened, console closed) and trigger Python callbacks\n\n## Try it online\n\nTry it in your browser with Binder:\n\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jtpio/ipylab/main?urlpath=lab/tree/examples/widgets.ipynb)\n\nOr with [JupyterLite](https://github.com/jupyterlite/jupyterlite):\n\n[![JupyterLite](https://jupyterlite.rtfd.io/en/latest/_static/badge-launch.svg)](https://ipylab.readthedocs.io/en/latest/lite/lab)\n\n## Examples\n\n### Add Jupyter Widgets to the JupyterLab interface\n\n![widgets-panels](https://user-images.githubusercontent.com/591645/80025074-59104280-84e0-11ea-9766-0cb49cba285a.gif)\n\n### Execute Commands\n\n![command-registry](https://user-images.githubusercontent.com/591645/80026017-beb0fe80-84e1-11ea-842d-fa3bf5bc4a9b.gif)\n\n### Custom Python Commands and Command Palette\n\n![custom-commands](https://user-images.githubusercontent.com/591645/80026023-c1135880-84e1-11ea-9e83-fdb739659357.gif)\n\n### Build small applications\n\n![ipytree-example](https://user-images.githubusercontent.com/591645/80026006-b8bb1d80-84e1-11ea-87cc-86495186b938.gif)\n\n### Compatibility with RetroLab\n\nA subset of the features can be used in RetroLab:\n\n![retrolab-example](https://user-images.githubusercontent.com/591645/141700044-3c39661a-8a9a-4e6b-a031-03724e0df25b.gif)\n\n## Installation\n\nYou can install using `pip`:\n\n```bash\npip install ipylab\n```\n\nOr with `mamba` / `conda`:\n\n```bash\nmamba install -c conda-forge ipylab\n```\n\n## Running the examples locally\n\nTo try out the examples locally, the recommended way is to create a new environment with the dependencies:\n\n```bash\n# create a new conda environment\nconda create -n ipylab-examples -c conda-forge jupyterlab ipylab ipytree bqplot ipywidgets numpy\nconda activate ipylab-examples\n\n# start JupyterLab\njupyter lab\n```\n\n## Under the hood\n\n`ipylab` can be seen as a proxy from Python to JupyterLab over Jupyter Widgets:\n\n![ipylab-diagram](./docs/ipylab.png)\n\n## Development\n\n```bash\n# create a new conda environment\nmamba create -n ipylab -c conda-forge jupyter-packaging nodejs python -y\n\n# activate the environment\nconda activate ipylab\n\n# install the Python package\npython -m pip install -e \".[dev]\"\n\n# link the extension files\njupyter labextension develop . --overwrite\n\n# compile the extension\njlpm \u0026\u0026 jlpm run build\n```\n\n## Related projects\n\nThere are a couple of projects that also enable interacting with the JupyterLab environment from Python notebooks:\n\n- [wxyz](https://github.com/deathbeds/wxyz): experimental widgets (including `DockPanel`)\n- [jupyterlab-sidecar](https://github.com/jupyter-widgets/jupyterlab-sidecar): add widgets to the JupyterLab right area\n- [jupyterlab_commands](https://github.com/timkpaine/jupyterlab_commands): add arbitrary Python commands to the jupyterlab command palette\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtpio%2Fipylab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjtpio%2Fipylab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtpio%2Fipylab/lists"}