# Comparing JupyterLab and RetroLab January 17, 2022 ## Difference in extensions RetroLab only: "@retrolab/application-extension", "@retrolab/console-extension", "@retrolab/docmanager-extension", "@retrolab/help-extension", "@retrolab/notebook-extension", "@retrolab/terminal-extension", "@retrolab/tree-extension", JupyterLab only: "@jupyterlab/celltags-extension", "@jupyterlab/csvviewer-extension", "@jupyterlab/debugger-extension", "@jupyterlab/docprovider-extension", "@jupyterlab/documentsearch-extension", "@jupyterlab/extensionmanager-extension", "@jupyterlab/help-extension", "@jupyterlab/htmlviewer-extension", "@jupyterlab/imageviewer-extension", "@jupyterlab/inspector-extension", "@jupyterlab/launcher-extension", "@jupyterlab/logconsole-extension", "@jupyterlab/markdownviewer-extension", "@jupyterlab/settingeditor-extension", "@jupyterlab/statusbar-extension", "@jupyterlab/terminal-extension", "@jupyterlab/toc-extension", "@jupyterlab/ui-components-extension", "@jupyterlab/user-extension", "@jupyterlab/vdom-extension" Shared: "@jupyterlab/application-extension", "@jupyterlab/apputils-extension", "@jupyterlab/codemirror-extension", "@jupyterlab/completer-extension", "@jupyterlab/console-extension", "@jupyterlab/docmanager-extension", "@jupyterlab/filebrowser-extension", "@jupyterlab/fileeditor-extension", "@jupyterlab/hub-extension", "@jupyterlab/mainmenu-extension", "@jupyterlab/mathjax2-extension", "@jupyterlab/notebook-extension", "@jupyterlab/rendermime-extension", "@jupyterlab/running-extension", "@jupyterlab/shortcuts-extension", "@jupyterlab/terminal-extension", "@jupyterlab/theme-dark-extension", "@jupyterlab/theme-light-extension", "@jupyterlab/tooltip-extension", "@jupyterlab/translation-extension" I made the above lists by comparing [the "jupyterlab" field in the app/package.json](https://github.com/jupyterlab/retrolab/blob/34702873898b0d2f08c717d7167aec92fc439265/app/package.json#L155) file in the RetroLab repo to [the same field in the jupyterlab/staging/package.json](https://github.com/jupyterlab/jupyterlab/blob/v4.0.0a18/jupyterlab/staging/package.json#L208) file in the JupyterLab repo. Additionally, RetroLab has its own `ui-components` package. Its sole purpose is to define and export a few svg logos (3 RetroLab logos and 1 JupyterLab logo). It also appears that RetroLab [pares down some of the extensions](https://github.com/jupyterlab/retrolab/blob/34702873898b0d2f08c717d7167aec92fc439265/app/index.js#L62) that it imports from JupyterLab. For example, in the following lines of code, RetroLab pulls out 3 plugins from `@jupyterlab/application-extension`: ```typescript= require('@jupyterlab/application-extension').default.filter(({ id }) => [ '@jupyterlab/application-extension:commands', '@jupyterlab/application-extension:context-menu', '@jupyterlab/application-extension:faviconbusy' ].includes(id) ), ``` Whereas in JupyterLab, `application-extension` exports 15 such plugins: ``` @jupyterlab/application-extension:commands @jupyterlab/application-extension:main @jupyterlab/application-extension:context-menu @jupyterlab/application-extension:dirty @jupyterlab/application-extension:layout @jupyterlab/application-extension:router @jupyterlab/application-extension:tree-resolver @jupyterlab/application-extension:notfound @jupyterlab/application-extension:faviconbusy @jupyterlab/application-extension:shell @jupyterlab/application-extension:status @jupyterlab/application-extension:info @jupyterlab/apputils-extension:paths @jupyterlab/application-extension:property-inspector @jupyterlab/application-extension:logo ``` We can see why some of these are omitted. For example, let's take the "dirty" plugin, which warns the user before closing the app if they have unsaved changes. RetroLab omits this plugin from JupyterLab because it defines [its own dirty plugin](https://github.com/jupyterlab/retrolab/blob/34702873898b0d2f08c717d7167aec92fc439265/packages/application-extension/src/index.ts#L99).