├── .gitignore ├── LICENSE ├── README.md ├── environment.yml ├── examples ├── basics.ipynb ├── iris.csv └── test.db ├── img ├── 99-ways-extend-jupyter.png ├── awesome-jupyter.png ├── extension-manager.png ├── jupyterlab-celltags.gif ├── jupyterlab-code-formatter.gif ├── jupyterlab-commenting.gif ├── jupyterlab-debugger.png ├── jupyterlab-drawio.gif ├── jupyterlab-extensions-github.png ├── jupyterlab-go-to-definition.gif ├── jupyterlab-heroku.gif ├── jupyterlab-kernelspy.png ├── jupyterlab-logo.png ├── jupyterlab-lsp.png ├── jupyterlab-material-darker.png ├── jupyterlab-matplotlib.gif ├── jupyterlab-nbdime.png ├── jupyterlab-pkg-installer.gif ├── jupyterlab-python-bytecode.gif ├── jupyterlab-quickopen.gif ├── jupyterlab-rich-text-mode.gif ├── jupyterlab-sidecar.gif ├── jupyterlab-sql.gif ├── jupyterlab-templates.gif ├── jupyterlab-theme-darcula.png ├── jupyterlab-toc.gif ├── jupyterlab-topbar.gif ├── jupyterlab-variableinspector.gif ├── quantstack-logo.svg ├── skip.png ├── voila-jupyterlab-preview.gif └── zethus.mp4 ├── postBuild └── presentation.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | .DS_Store 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | env/ 13 | build/ 14 | develop-eggs/ 15 | dist/ 16 | downloads/ 17 | eggs/ 18 | .eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *,cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # IPython Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # dotenv 80 | .env 81 | 82 | # virtualenv 83 | venv/ 84 | ENV/ 85 | 86 | # Spyder project settings 87 | .spyderproject 88 | 89 | # Rope project settings 90 | .ropeproject 91 | 92 | # Untitled files 93 | [Uu]ntitled* 94 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Jeremy Tuloup 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A Tour of JupyterLab Extensions 2 | 3 | [](https://mybinder.org/v2/gh/jtpio/a-tour-of-jupyterlab-extensions/master?urlpath=lab%2Ftree%2Fpresentation.ipynb) 4 | 5 | ## PyConDE & PyData Berlin 2019 6 | 7 | ### 2019-10-10 8 | 9 | This presentation is an extended (and updated!) version of the lightning talk given at the PyData Berlin Meetup (December 2018). 10 | 11 | JupyterLab extensions greatly improve the user experience when it comes to working with Jupyter Notebook and Data Science workflows. The extension mechanism lets third-party developers write their own extensions and contribute back to the Jupyter ecosystem. 12 | 13 | There is now a growing number of these extensions which provide IDE-like features such as: git integration, code formatting, table of content, diagram editor, and many more. 14 | 15 | The goal of this presentation is to complement the online documentation by doing a demo of a curated list of these JupyterLab extensions. All happening in JupyterLab. 16 | 17 | ### Layout 18 | 19 | - Introduction to JupyterLab extensions: what are they and why are they useful? [5 min] 20 | - Demo of 20 JupyterLab extensions in 20 minutes [20 min] 21 | - What's next and questions? [5 min] 22 | 23 | ## Local Setup 24 | 25 | ```bash 26 | # create an environment 27 | conda env create 28 | 29 | # install the extensions 30 | chmod +x ./postBuild 31 | ./postBuild 32 | 33 | # start JupyterLab 34 | jupyter lab 35 | ``` 36 | -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: pydata-berlin-2019 2 | channels: 3 | - conda-forge 4 | dependencies: 5 | - black 6 | - ipycanvas 7 | - ipyleaflet 8 | - jupyterlab=1 9 | - nbdime 10 | - pip 11 | - python=3.7 12 | - voila 13 | - pip: 14 | - jupyterlab-git 15 | - jupyterlab_code_formatter 16 | - jupyterlab-quickopen 17 | - jupyterlab_sql 18 | - nbresuse 19 | - sidecar 20 | 21 | -------------------------------------------------------------------------------- /examples/basics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# So easy, *voilà*!\n", 8 | "\n", 9 | "In this example notebook, we demonstrate how voila can render Jupyter notebooks with interactions requiring a roundtrip to the kernel." 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "## Jupyter Widgets" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": null, 22 | "metadata": {}, 23 | "outputs": [], 24 | "source": [ 25 | "import ipywidgets as widgets\n", 26 | "\n", 27 | "slider = widgets.FloatSlider(description='$x$', value=4)\n", 28 | "text = widgets.FloatText(disabled=True, description='$x^2$')\n", 29 | "\n", 30 | "def compute(*ignore):\n", 31 | " text.value = str(slider.value ** 2)\n", 32 | "\n", 33 | "slider.observe(compute, 'value')\n", 34 | "\n", 35 | "widgets.VBox([slider, text])" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "## Basic outputs of code cells" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "metadata": {}, 49 | "outputs": [], 50 | "source": [ 51 | "import pandas as pd\n", 52 | "\n", 53 | "iris = pd.read_csv('./iris.csv')\n", 54 | "iris" 55 | ] 56 | } 57 | ], 58 | "metadata": { 59 | "kernelspec": { 60 | "display_name": "Python 3", 61 | "language": "python", 62 | "name": "python3" 63 | }, 64 | "language_info": { 65 | "codemirror_mode": { 66 | "name": "ipython", 67 | "version": 3 68 | }, 69 | "file_extension": ".py", 70 | "mimetype": "text/x-python", 71 | "name": "python", 72 | "nbconvert_exporter": "python", 73 | "pygments_lexer": "ipython3", 74 | "version": "3.7.3" 75 | } 76 | }, 77 | "nbformat": 4, 78 | "nbformat_minor": 4 79 | } 80 | -------------------------------------------------------------------------------- /examples/iris.csv: -------------------------------------------------------------------------------- 1 | sepal_length,sepal_width,petal_length,petal_width,species 2 | 5.1,3.5,1.4,0.2,setosa 3 | 4.9,3.0,1.4,0.2,setosa 4 | 4.7,3.2,1.3,0.2,setosa 5 | 4.6,3.1,1.5,0.2,setosa 6 | 5.0,3.6,1.4,0.2,setosa 7 | 5.4,3.9,1.7,0.4,setosa 8 | 4.6,3.4,1.4,0.3,setosa 9 | 5.0,3.4,1.5,0.2,setosa 10 | 4.4,2.9,1.4,0.2,setosa 11 | 4.9,3.1,1.5,0.1,setosa 12 | 5.4,3.7,1.5,0.2,setosa 13 | 4.8,3.4,1.6,0.2,setosa 14 | 4.8,3.0,1.4,0.1,setosa 15 | 4.3,3.0,1.1,0.1,setosa 16 | 5.8,4.0,1.2,0.2,setosa 17 | 5.7,4.4,1.5,0.4,setosa 18 | 5.4,3.9,1.3,0.4,setosa 19 | 5.1,3.5,1.4,0.3,setosa 20 | 5.7,3.8,1.7,0.3,setosa 21 | 5.1,3.8,1.5,0.3,setosa 22 | 5.4,3.4,1.7,0.2,setosa 23 | 5.1,3.7,1.5,0.4,setosa 24 | 4.6,3.6,1.0,0.2,setosa 25 | 5.1,3.3,1.7,0.5,setosa 26 | 4.8,3.4,1.9,0.2,setosa 27 | 5.0,3.0,1.6,0.2,setosa 28 | 5.0,3.4,1.6,0.4,setosa 29 | 5.2,3.5,1.5,0.2,setosa 30 | 5.2,3.4,1.4,0.2,setosa 31 | 4.7,3.2,1.6,0.2,setosa 32 | 4.8,3.1,1.6,0.2,setosa 33 | 5.4,3.4,1.5,0.4,setosa 34 | 5.2,4.1,1.5,0.1,setosa 35 | 5.5,4.2,1.4,0.2,setosa 36 | 4.9,3.1,1.5,0.2,setosa 37 | 5.0,3.2,1.2,0.2,setosa 38 | 5.5,3.5,1.3,0.2,setosa 39 | 4.9,3.6,1.4,0.1,setosa 40 | 4.4,3.0,1.3,0.2,setosa 41 | 5.1,3.4,1.5,0.2,setosa 42 | 5.0,3.5,1.3,0.3,setosa 43 | 4.5,2.3,1.3,0.3,setosa 44 | 4.4,3.2,1.3,0.2,setosa 45 | 5.0,3.5,1.6,0.6,setosa 46 | 5.1,3.8,1.9,0.4,setosa 47 | 4.8,3.0,1.4,0.3,setosa 48 | 5.1,3.8,1.6,0.2,setosa 49 | 4.6,3.2,1.4,0.2,setosa 50 | 5.3,3.7,1.5,0.2,setosa 51 | 5.0,3.3,1.4,0.2,setosa 52 | 7.0,3.2,4.7,1.4,versicolor 53 | 6.4,3.2,4.5,1.5,versicolor 54 | 6.9,3.1,4.9,1.5,versicolor 55 | 5.5,2.3,4.0,1.3,versicolor 56 | 6.5,2.8,4.6,1.5,versicolor 57 | 5.7,2.8,4.5,1.3,versicolor 58 | 6.3,3.3,4.7,1.6,versicolor 59 | 4.9,2.4,3.3,1.0,versicolor 60 | 6.6,2.9,4.6,1.3,versicolor 61 | 5.2,2.7,3.9,1.4,versicolor 62 | 5.0,2.0,3.5,1.0,versicolor 63 | 5.9,3.0,4.2,1.5,versicolor 64 | 6.0,2.2,4.0,1.0,versicolor 65 | 6.1,2.9,4.7,1.4,versicolor 66 | 5.6,2.9,3.6,1.3,versicolor 67 | 6.7,3.1,4.4,1.4,versicolor 68 | 5.6,3.0,4.5,1.5,versicolor 69 | 5.8,2.7,4.1,1.0,versicolor 70 | 6.2,2.2,4.5,1.5,versicolor 71 | 5.6,2.5,3.9,1.1,versicolor 72 | 5.9,3.2,4.8,1.8,versicolor 73 | 6.1,2.8,4.0,1.3,versicolor 74 | 6.3,2.5,4.9,1.5,versicolor 75 | 6.1,2.8,4.7,1.2,versicolor 76 | 6.4,2.9,4.3,1.3,versicolor 77 | 6.6,3.0,4.4,1.4,versicolor 78 | 6.8,2.8,4.8,1.4,versicolor 79 | 6.7,3.0,5.0,1.7,versicolor 80 | 6.0,2.9,4.5,1.5,versicolor 81 | 5.7,2.6,3.5,1.0,versicolor 82 | 5.5,2.4,3.8,1.1,versicolor 83 | 5.5,2.4,3.7,1.0,versicolor 84 | 5.8,2.7,3.9,1.2,versicolor 85 | 6.0,2.7,5.1,1.6,versicolor 86 | 5.4,3.0,4.5,1.5,versicolor 87 | 6.0,3.4,4.5,1.6,versicolor 88 | 6.7,3.1,4.7,1.5,versicolor 89 | 6.3,2.3,4.4,1.3,versicolor 90 | 5.6,3.0,4.1,1.3,versicolor 91 | 5.5,2.5,4.0,1.3,versicolor 92 | 5.5,2.6,4.4,1.2,versicolor 93 | 6.1,3.0,4.6,1.4,versicolor 94 | 5.8,2.6,4.0,1.2,versicolor 95 | 5.0,2.3,3.3,1.0,versicolor 96 | 5.6,2.7,4.2,1.3,versicolor 97 | 5.7,3.0,4.2,1.2,versicolor 98 | 5.7,2.9,4.2,1.3,versicolor 99 | 6.2,2.9,4.3,1.3,versicolor 100 | 5.1,2.5,3.0,1.1,versicolor 101 | 5.7,2.8,4.1,1.3,versicolor 102 | 6.3,3.3,6.0,2.5,virginica 103 | 5.8,2.7,5.1,1.9,virginica 104 | 7.1,3.0,5.9,2.1,virginica 105 | 6.3,2.9,5.6,1.8,virginica 106 | 6.5,3.0,5.8,2.2,virginica 107 | 7.6,3.0,6.6,2.1,virginica 108 | 4.9,2.5,4.5,1.7,virginica 109 | 7.3,2.9,6.3,1.8,virginica 110 | 6.7,2.5,5.8,1.8,virginica 111 | 7.2,3.6,6.1,2.5,virginica 112 | 6.5,3.2,5.1,2.0,virginica 113 | 6.4,2.7,5.3,1.9,virginica 114 | 6.8,3.0,5.5,2.1,virginica 115 | 5.7,2.5,5.0,2.0,virginica 116 | 5.8,2.8,5.1,2.4,virginica 117 | 6.4,3.2,5.3,2.3,virginica 118 | 6.5,3.0,5.5,1.8,virginica 119 | 7.7,3.8,6.7,2.2,virginica 120 | 7.7,2.6,6.9,2.3,virginica 121 | 6.0,2.2,5.0,1.5,virginica 122 | 6.9,3.2,5.7,2.3,virginica 123 | 5.6,2.8,4.9,2.0,virginica 124 | 7.7,2.8,6.7,2.0,virginica 125 | 6.3,2.7,4.9,1.8,virginica 126 | 6.7,3.3,5.7,2.1,virginica 127 | 7.2,3.2,6.0,1.8,virginica 128 | 6.2,2.8,4.8,1.8,virginica 129 | 6.1,3.0,4.9,1.8,virginica 130 | 6.4,2.8,5.6,2.1,virginica 131 | 7.2,3.0,5.8,1.6,virginica 132 | 7.4,2.8,6.1,1.9,virginica 133 | 7.9,3.8,6.4,2.0,virginica 134 | 6.4,2.8,5.6,2.2,virginica 135 | 6.3,2.8,5.1,1.5,virginica 136 | 6.1,2.6,5.6,1.4,virginica 137 | 7.7,3.0,6.1,2.3,virginica 138 | 6.3,3.4,5.6,2.4,virginica 139 | 6.4,3.1,5.5,1.8,virginica 140 | 6.0,3.0,4.8,1.8,virginica 141 | 6.9,3.1,5.4,2.1,virginica 142 | 6.7,3.1,5.6,2.4,virginica 143 | 6.9,3.1,5.1,2.3,virginica 144 | 5.8,2.7,5.1,1.9,virginica 145 | 6.8,3.2,5.9,2.3,virginica 146 | 6.7,3.3,5.7,2.5,virginica 147 | 6.7,3.0,5.2,2.3,virginica 148 | 6.3,2.5,5.0,1.9,virginica 149 | 6.5,3.0,5.2,2.0,virginica 150 | 6.2,3.4,5.4,2.3,virginica 151 | 5.9,3.0,5.1,1.8,virginica 152 | -------------------------------------------------------------------------------- /examples/test.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/examples/test.db -------------------------------------------------------------------------------- /img/99-ways-extend-jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/99-ways-extend-jupyter.png -------------------------------------------------------------------------------- /img/awesome-jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/awesome-jupyter.png -------------------------------------------------------------------------------- /img/extension-manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/extension-manager.png -------------------------------------------------------------------------------- /img/jupyterlab-celltags.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-celltags.gif -------------------------------------------------------------------------------- /img/jupyterlab-code-formatter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-code-formatter.gif -------------------------------------------------------------------------------- /img/jupyterlab-commenting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-commenting.gif -------------------------------------------------------------------------------- /img/jupyterlab-debugger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-debugger.png -------------------------------------------------------------------------------- /img/jupyterlab-drawio.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-drawio.gif -------------------------------------------------------------------------------- /img/jupyterlab-extensions-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-extensions-github.png -------------------------------------------------------------------------------- /img/jupyterlab-go-to-definition.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-go-to-definition.gif -------------------------------------------------------------------------------- /img/jupyterlab-heroku.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-heroku.gif -------------------------------------------------------------------------------- /img/jupyterlab-kernelspy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-kernelspy.png -------------------------------------------------------------------------------- /img/jupyterlab-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-logo.png -------------------------------------------------------------------------------- /img/jupyterlab-lsp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-lsp.png -------------------------------------------------------------------------------- /img/jupyterlab-material-darker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-material-darker.png -------------------------------------------------------------------------------- /img/jupyterlab-matplotlib.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-matplotlib.gif -------------------------------------------------------------------------------- /img/jupyterlab-nbdime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-nbdime.png -------------------------------------------------------------------------------- /img/jupyterlab-pkg-installer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-pkg-installer.gif -------------------------------------------------------------------------------- /img/jupyterlab-python-bytecode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-python-bytecode.gif -------------------------------------------------------------------------------- /img/jupyterlab-quickopen.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-quickopen.gif -------------------------------------------------------------------------------- /img/jupyterlab-rich-text-mode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-rich-text-mode.gif -------------------------------------------------------------------------------- /img/jupyterlab-sidecar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-sidecar.gif -------------------------------------------------------------------------------- /img/jupyterlab-sql.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-sql.gif -------------------------------------------------------------------------------- /img/jupyterlab-templates.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-templates.gif -------------------------------------------------------------------------------- /img/jupyterlab-theme-darcula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-theme-darcula.png -------------------------------------------------------------------------------- /img/jupyterlab-toc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-toc.gif -------------------------------------------------------------------------------- /img/jupyterlab-topbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-topbar.gif -------------------------------------------------------------------------------- /img/jupyterlab-variableinspector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/jupyterlab-variableinspector.gif -------------------------------------------------------------------------------- /img/quantstack-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /img/skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/skip.png -------------------------------------------------------------------------------- /img/voila-jupyterlab-preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/voila-jupyterlab-preview.gif -------------------------------------------------------------------------------- /img/zethus.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jtpio/a-tour-of-jupyterlab-extensions/6850c904be58a43c82e9216339347f1d7d001bb3/img/zethus.mp4 -------------------------------------------------------------------------------- /postBuild: -------------------------------------------------------------------------------- 1 | jupyter labextension install @jupyter-widgets/jupyterlab-manager \ 2 | @jupyterlab/git \ 3 | @jupyterlab/toc \ 4 | jupyterlab-python-bytecode \ 5 | @jupyter-widgets/jupyterlab-sidecar \ 6 | jupyterlab-drawio \ 7 | jupyter-leaflet \ 8 | @parente/jupyterlab-quickopen \ 9 | jupyterlab-topbar-extension \ 10 | @jupyterlab/celltags \ 11 | @krassowski/jupyterlab_go_to_definition \ 12 | jupyterlab-system-monitor \ 13 | jupyterlab-topbar-text \ 14 | jupyterlab-logout \ 15 | jupyterlab-theme-toggle \ 16 | @ryantam626/jupyterlab_code_formatter \ 17 | @jupyter-voila/jupyterlab-preview \ 18 | @oriolmirosa/jupyterlab_materialdarker \ 19 | ipycanvas \ 20 | --no-build 21 | 22 | jupyter serverextension enable --py jupyterlab_git 23 | jupyter serverextension enable --py jupyterlab_code_formatter 24 | jupyter serverextension enable --py jupyterlab_sql 25 | 26 | jupyter lab build 27 | 28 | -------------------------------------------------------------------------------- /presentation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "# A Tour of JupyterLab Extensions\n", 15 | "\n", 16 | "\n", 17 | "\n", 18 | "## PyConDE & PyData Berlin 2019 - 2019-10-10\n", 19 | "\n", 20 | "## Jeremy Tuloup - [github.com/jtpio](https://github.com/jtpio)" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "\n", 35 | "\n", 36 | "\n", 37 | "## Scientific Software Engineer\n", 38 | "\n", 39 | "## - [quantstack.net](https://quantstack.net)\n", 40 | "\n", 41 | "## - [github.com/jtpio](https://github.com/jtpio)\n", 42 | "\n", 43 | "## - [twitter.com/jtpio](https://twitter.com/jtpio)" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "# Extending Jupyter\n", 58 | "\n", 59 | "## 99 ways to extend the Jupyter ecosystem\n", 60 | "\n", 61 | "### https://blog.jupyter.org/99-ways-to-extend-the-jupyter-ecosystem-11e5dab7c54\n", 62 | "\n", 63 | "" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": {}, 69 | "source": [ 70 | "" 71 | ] 72 | }, 73 | { 74 | "cell_type": "markdown", 75 | "metadata": {}, 76 | "source": [ 77 | "" 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "" 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "metadata": {}, 90 | "source": [ 91 | "# JupyterLab\n", 92 | "\n", 93 | "## - Next-gen UI for Jupyter\n", 94 | "\n", 95 | "## - 1.0\n", 96 | "\n", 97 | "## - Extensible by design\n", 98 | "\n", 99 | "## - 60+ extensions in core\n", 100 | "\n", 101 | "## - TypeScript & npm" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [ 108 | "" 109 | ] 110 | }, 111 | { 112 | "cell_type": "markdown", 113 | "metadata": {}, 114 | "source": [ 115 | "# Core extensions\n", 116 | "\n", 117 | "## -
File Browser\n", 118 | "## - Console\n", 119 | "## - Notebook\n", 120 | "## - ..." 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "# Third-party extensions" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": null, 140 | "metadata": {}, 141 | "outputs": [], 142 | "source": [ 143 | "from IPython.display import Video\n", 144 | "\n", 145 | "Video(\"./img/zethus.mp4\")" 146 | ] 147 | }, 148 | { 149 | "cell_type": "markdown", 150 | "metadata": {}, 151 | "source": [ 152 | "" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "# A Tour of 10 JupyterLab Extensions" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "" 167 | ] 168 | }, 169 | { 170 | "cell_type": "markdown", 171 | "metadata": {}, 172 | "source": [ 173 | "# #1. jupyterlab-git\n", 174 | "\n", 175 | "## https://github.com/jupyterlab/jupyterlab-git\n", 176 | "\n", 177 | "## `jupyter labextension install @jupyterlab/git`\n", 178 | "\n", 179 | "