Repository: nebari-dev/jupyterlab-launchpad (language: python)

Issue:
Rename to `jupyter-launchpad`
`jupyterlab-new-launcher` was used as a placeholder name. Is it good enough or should we think of something different?


Discussion / hints:
A better name would be nice. Don't have many great ideas.

- jlab-alt-launcher
- jupyterlab-navigator

A nice suggestion from @dillonroach: `jupyter-launchpad`. I think `jupyterlab-launchpad` could work well indeed.

Notes:
- there already is `jlab-enhanced-launcher` 
- jupyterlab-navigator will confuse users because when you search jupyterlab navigator you get results about Anaconda Navigator
`jupyterlab-launchpad` is probably the clearest technical choice so I have a slight preference for that over `jupyter-launchpad` but both are fine.
On second thought, this extension contributes a plugin for the dialogs which allows to select a kernel from a Notebook, so it is also applicable to the Notebook application, so `jupyter-launchpad` is fine too.

Fix patch:
diff --git a/.copier-answers.yml b/.copier-answers.yml
index b563987..0d2ef54 100644
--- a/.copier-answers.yml
+++ b/.copier-answers.yml
@@ -8,12 +8,12 @@ file_extension: ''
 has_binder: true
 has_settings: true
 kind: frontend
-labextension_name: jupyterlab-new-launcher
+labextension_name: jupyterlab-launchpad
 mimetype: ''
 mimetype_name: ''
 project_short_description: A redesigned JupyterLab launcher
-python_name: jupyterlab_new_launcher
-repository: https://github.com/nebari-dev/jupyterlab-new-launcher
+python_name: jupyterlab_launchpad
+repository: https://github.com/nebari-dev/jupyterlab-launchpad
 test: true
 viewer_name: ''
 
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 31f11df..d572158 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -41,7 +41,7 @@ jobs:
         python -m pip install .[test]
 
         jupyter labextension list
-        jupyter labextension list 2>&1 | grep -ie "jupyterlab-new-launcher.*OK"
+        jupyter labextension list 2>&1 | grep -ie "jupyterlab-launchpad.*OK"
         python -m jupyterlab.browser_check
 
     - name: Package the extension
@@ -50,13 +50,13 @@ jobs:
 
         pip install build
         python -m build
-        pip uninstall -y "jupyterlab_new_launcher" jupyterlab
+        pip uninstall -y "jupyterlab_launchpad" jupyterlab
 
     - name: Upload extension packages
       uses: actions/upload-artifact@v4
       with:
         name: extension-artifacts
-        path: dist/jupyterlab_new_launcher*
+        path: dist/jupyterlab_launchpad*
         if-no-files-found: error
 
   test_isolated:
@@ -79,11 +79,11 @@ jobs:
         sudo rm -rf $(which node)
         sudo rm -rf $(which node)
 
-        pip install "jupyterlab>=4.0.0,<5" jupyterlab_new_launcher*.whl
+        pip install "jupyterlab>=4.0.0,<5" jupyterlab_launchpad*.whl
 
 
         jupyter labextension list
-        jupyter labextension list 2>&1 | grep -ie "jupyterlab-new-launcher.*OK"
+        jupyter labextension list 2>&1 | grep -ie "jupyterlab-launchpad.*OK"
         python -m jupyterlab.browser_check --no-browser-test
 
   integration-tests:
@@ -109,7 +109,7 @@ jobs:
     - name: Install the extension
       run: |
         set -eux
-        python -m pip install "jupyterlab>=4.0.0,<5" jupyterlab_new_launcher*.whl
+        python -m pip install "jupyterlab>=4.0.0,<5" jupyterlab_launchpad*.whl
 
     - name: Install dependencies
       working-directory: ui-tests
@@ -138,7 +138,7 @@ jobs:
       if: always()
       uses: actions/upload-artifact@v4
       with:
-        name: jupyterlab_new_launcher-playwright-tests
+        name: jupyterlab_launchpad-playwright-tests
         path: |
           ui-tests/test-results
           ui-tests/playwright-report
diff --git a/.github/workflows/check-release.yml b/.github/workflows/check-release.yml
index d2c09cf..337d2b8 100644
--- a/.github/workflows/check-release.yml
+++ b/.github/workflows/check-release.yml
@@ -26,5 +26,5 @@ jobs:
       - name: Upload Distributions
         uses: actions/upload-artifact@v4
         with:
-          name: jupyterlab_new_launcher-releaser-dist-${{ github.run_number }}
+          name: jupyterlab_launchpad-releaser-dist-${{ github.run_number }}
           path: .jupyter_releaser_checkout/dist
diff --git a/.gitignore b/.gitignore
index fd53e5a..46c02eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,9 +7,9 @@ node_modules/
 *.egg-info/
 .ipynb_checkpoints
 *.tsbuildinfo
-jupyterlab_new_launcher/labextension
+jupyterlab_launchpad/labextension
 # Version file is handled by hatchling
-jupyterlab_new_launcher/_version.py
+jupyterlab_launchpad/_version.py
 .jupyter
 
 # Integration tests
diff --git a/README.md b/README.md
index 8a1ea29..50a78e4 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-# jupyterlab-new-launcher
+# jupyterlab-launchpad
 
-[![Github Actions Status](https://github.com/nebari-dev/jupyterlab-new-launcher/workflows/Build/badge.svg)](https://github.com/nebari-dev/jupyterlab-new-launcher/actions/workflows/build.yml)
-[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/nebari-dev/jupyterlab-new-launcher/main?urlpath=lab)
+[![Github Actions Status](https://github.com/nebari-dev/jupyterlab-launchpad/workflows/Build/badge.svg)](https://github.com/nebari-dev/jupyterlab-launchpad/actions/workflows/build.yml)
+[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/nebari-dev/jupyterlab-launchpad/main?urlpath=lab)
 
 A redesigned JupyterLab launcher
 
@@ -11,8 +11,8 @@ Kernel selection dialog:
 
 ![new dialog][dialog]
 
-[launcher]: https://raw.githubusercontent.com/nebari-dev/jupyterlab-new-launcher/main/docs/images/launcher.png
-[dialog]: https://raw.githubusercontent.com/nebari-dev/jupyterlab-new-launcher/main/docs/images/dialog.png
+[launcher]: https://raw.githubusercontent.com/nebari-dev/jupyterlab-launchpad/main/docs/images/launcher.png
+[dialog]: https://raw.githubusercontent.com/nebari-dev/jupyterlab-launchpad/main/docs/images/dialog.png
 
 ## Requirements
 
@@ -23,7 +23,7 @@ Kernel selection dialog:
 To install the extension, execute:
 
 ```bash
-pip install jupyterlab-new-launcher
+pip install jupyterlab-launchpad
 ```
 
 ## Uninstall
@@ -31,7 +31,7 @@ pip install jupyterlab-new-launcher
 To remove the extension, execute:
 
 ```bash
-pip uninstall jupyterlab-new-launcher
+pip uninstall jupyterlab-launchpad
 ```
 
 ## Contributing
@@ -46,7 +46,7 @@ The `jlpm` command is JupyterLab's pinned version of
 
 ```bash
 # Clone the repo to your local environment
-# Change directory to the jupyterlab_new_launcher directory
+# Change directory to the jupyterlab_launchpad directory
 # Install package in development mode
 pip install -e "."
 # Link your development version of the extension with JupyterLab
@@ -75,12 +75,12 @@ jupyter lab build --minimize=False
 ### Development uninstall
 
 ```bash
-pip uninstall jupyterlab_new_launcher
+pip uninstall jupyterlab_launchpad
 ```
 
 In development mode, you will also need to remove the symlink created by `jupyter labextension develop`
 command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions`
-folder is located. Then you can remove the symlink named `jupyterlab-new-launcher` within that folder.
+folder is located. Then you can remove the symlink named `jupyterlab-launchpad` within that folder.
 
 ### Testing the extension
 
diff --git a/RELEASE.md b/RELEASE.md
index 5b39f46..d84a553 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,4 +1,4 @@
-# Making a new release of jupyterlab_new_launcher
+# Making a new release of jupyterlab_launchpad
 
 The extension can be published to `PyPI` and `npm` manually or using the [Jupyter Releaser](https://github.com/jupyter-server/jupyter_releaser).
 
diff --git a/binder/environment.yml b/binder/environment.yml
index a9c353e..f5fc0a8 100644
--- a/binder/environment.yml
+++ b/binder/environment.yml
@@ -1,10 +1,10 @@
-# a mybinder.org-ready environment for demoing jupyterlab_new_launcher
+# a mybinder.org-ready environment for demoing jupyterlab_launchpad
 # this environment may also be used locally on Linux/MacOS/Windows, e.g.
 #
 #   conda env update --file binder/environment.yml
-#   conda activate jupyterlab-new-launcher-demo
+#   conda activate jupyterlab-launchpad-demo
 #
-name: jupyterlab-new-launcher-demo
+name: jupyterlab-launchpad-demo
 
 channels:
   - conda-forge
diff --git a/binder/postBuild b/binder/postBuild
index ce51947..4aa73a7 100755
--- a/binder/postBuild
+++ b/binder/postBuild
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-""" perform a development install of jupyterlab_new_launcher
+""" perform a development install of jupyterlab_launchpad
 
     On Binder, this will run _after_ the environment has been fully created from
     the environment.yml in this directory.
@@ -43,5 +43,5 @@ _("jupyter", "server", "extension", "list")
 _("jupyter", "labextension", "list")
 
 
-print("JupyterLab with jupyterlab_new_launcher is ready to run with:\n")
+print("JupyterLab with jupyterlab_launchpad is ready to run with:\n")
 print("\tjupyter lab\n")
diff --git a/install.json b/install.json
index b6e6c2e..214d103 100644
--- a/install.json
+++ b/install.json
@@ -1,5 +1,5 @@
 {
   "packageManager": "python",
-  "packageName": "jupyterlab_new_launcher",
-  "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab_new_launcher"
+  "packageName": "jupyterlab_launchpad",
+  "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package jupyterlab_launchpad"
 }
diff --git a/jupyter-config/server-config/jupyterlab_new_launcher.json b/jupyter-config/server-config/jupyterlab_new_launcher.json
index c1bba53..390fc50 100644
--- a/jupyter-config/server-config/jupyterlab_new_launcher.json
+++ b/jupyter-config/server-config/jupyterlab_new_launcher.json
@@ -1,7 +1,7 @@
 {
   "ServerApp": {
     "jpserver_extensions": {
-      "jupyterlab_new_launcher": true
+      "jupyterlab_launchpad": true
     }
   }
 }
diff --git a/jupyterlab_new_launcher/__init__.py b/jupyterlab_launchpad/__init__.py
similarity index 80%
rename from jupyterlab_new_launcher/__init__.py
rename to jupyterlab_launchpad/__init__.py
index 8032670..ca4e28a 100644
--- a/jupyterlab_new_launcher/__init__.py
+++ b/jupyterlab_launchpad/__init__.py
@@ -5,7 +5,7 @@
     # in editable mode with pip. It is highly recommended to install
     # the package from a stable release or in editable mode: https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs
     import warnings
-    warnings.warn("Importing 'jupyterlab_new_launcher' outside a proper installation.")
+    warnings.warn("Importing 'jupyterlab_launchpad' outside a proper installation.")
     __version__ = "dev"
 from .handlers import setup_handlers
 
@@ -13,12 +13,12 @@
 def _jupyter_labextension_paths():
     return [{
         "src": "labextension",
-        "dest": "jupyterlab-new-launcher"
+        "dest": "jupyterlab-launchpad"
     }]
 
 
 def _jupyter_server_extension_points():
-    return [{"module": "jupyterlab_new_launcher"}]
+    return [{"module": "jupyterlab_launchpad"}]
 
 
 def _load_jupyter_server_extension(server_app):
@@ -30,5 +30,5 @@ def _load_jupyter_server_extension(server_app):
         JupyterLab application instance
     """
     setup_handlers(server_app.web_app, server_app)
-    name = "jupyterlab_new_launcher"
+    name = "jupyterlab_launchpad"
     server_app.log.info(f"Registered {name} server extension")
diff --git a/jupyterlab_new_launcher/handlers.py b/jupyterlab_launchpad/handlers.py
similarity index 79%
rename from jupyterlab_new_launcher/handlers.py
rename to jupyterlab_launchpad/handlers.py
index b0cf0d7..780d320 100644
--- a/jupyterlab_new_launcher/handlers.py
+++ b/jupyterlab_launchpad/handlers.py
@@ -1,5 +1,6 @@
 import json
 from pathlib import Path
+import shutil
 
 from jupyter_server.base.handlers import APIHandler
 from jupyter_server.utils import url_path_join
@@ -9,7 +10,12 @@
 class DatabaseHandler(APIHandler):
 
     def initialize(self, name: str, settings_dir: str):
-        self.path = Path(settings_dir) / "jupyterlab-new-launcher" / f"{name}.json"
+        self.path = Path(settings_dir) / "jupyterlab-launchpad" / f"{name}.json"
+        old_path = Path(settings_dir) / "jupyterlab-new-launcher" / f"{name}.json"
+        if not self.path.exists() and old_path.exists():
+            # migrate database from prior to rename
+            shutil.copy(old_path, self.path)
+            old_path.unlink()
 
     # The following decorator should be present on all verb methods (head, get, post,
     # patch, put, delete, options) to ensure only authorized user can request the
@@ -38,7 +44,7 @@ def setup_handlers(web_app, server_app):
     host_pattern = ".*$"
 
     base_url = web_app.settings["base_url"]
-    api_url = url_path_join(base_url, "jupyterlab-new-launcher");
+    api_url = url_path_join(base_url, "jupyterlab-launchpad");
     db_url = url_path_join(api_url, "database")
     kwargs = {"settings_dir": web_app.settings["lab_config"]["user_settings_dir"]}
     handlers = [
diff --git a/package.json b/package.json
index 943a2ab..45521e9 100644
--- a/package.json
+++ b/package.json
@@ -1,15 +1,15 @@
 {
-    "name": "jupyterlab-new-launcher",
-    "version": "0.5.1",
+    "name": "jupyterlab-launchpad",
+    "version": "1.0.0",
     "description": "A redesigned JupyterLab launcher",
     "keywords": [
         "jupyter",
         "jupyterlab",
         "jupyterlab-extension"
     ],
-    "homepage": "https://github.com/nebari-dev/jupyterlab-new-launcher",
+    "homepage": "https://github.com/nebari-dev/jupyterlab-launchpad",
     "bugs": {
-        "url": "https://github.com/nebari-dev/jupyterlab-new-launcher/issues"
+        "url": "https://github.com/nebari-dev/jupyterlab-launchpad/issues"
     },
     "license": "BSD-3-Clause",
     "author": {
@@ -28,7 +28,7 @@
     "style": "style/index.css",
     "repository": {
         "type": "git",
-        "url": "https://github.com/nebari-dev/jupyterlab-new-launcher.git"
+        "url": "https://github.com/nebari-dev/jupyterlab-launchpad.git"
     },
     "scripts": {
         "build": "jlpm build:lib && jlpm build:labextension:dev",
@@ -40,7 +40,7 @@
         "clean": "jlpm clean:lib",
         "clean:lib": "rimraf lib tsconfig.tsbuildinfo",
         "clean:lintcache": "rimraf .eslintcache .stylelintcache",
-        "clean:labextension": "rimraf jupyterlab_new_launcher/labextension jupyterlab_new_launcher/_version.py",
+        "clean:labextension": "rimraf jupyterlab_launchpad/labextension jupyterlab_launchpad/_version.py",
         "clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache",
         "eslint": "jlpm eslint:check --fix",
         "eslint:check": "eslint . --cache --ext .ts,.tsx",
@@ -99,7 +99,7 @@
     },
     "jupyterlab": {
         "extension": true,
-        "outputDir": "jupyterlab_new_launcher/labextension",
+        "outputDir": "jupyterlab_launchpad/labextension",
         "schemaDir": "schema",
         "disabledExtensions": [
             "@jupyterlab/launcher-extension",
diff --git a/pyproject.toml b/pyproject.toml
index 03f5bd9..ead99e3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ requires = ["hatchling>=1.5.0", "jupyterlab>=4.0.0,<5", "hatch-nodejs-version>=0
 build-backend = "hatchling.build"
 
 [project]
-name = "jupyterlab-new-launcher"
+name = "jupyterlab-launchpad"
 readme = "README.md"
 license = { file = "LICENSE" }
 requires-python = ">=3.8"
@@ -34,25 +34,25 @@ source = "nodejs"
 fields = ["description", "authors", "urls"]
 
 [tool.hatch.build.targets.sdist]
-artifacts = ["jupyterlab_new_launcher/labextension"]
+artifacts = ["jupyterlab_launchpad/labextension"]
 exclude = [".github", "binder"]
 
 [tool.hatch.build.targets.wheel.shared-data]
-"jupyterlab_new_launcher/labextension" = "share/jupyter/labextensions/jupyterlab-new-launcher"
-"install.json" = "share/jupyter/labextensions/jupyterlab-new-launcher/install.json"
+"jupyterlab_launchpad/labextension" = "share/jupyter/labextensions/jupyterlab-launchpad"
+"install.json" = "share/jupyter/labextensions/jupyterlab-launchpad/install.json"
 "jupyter-config/server-config" = "etc/jupyter/jupyter_server_config.d"
 
 [tool.hatch.build.hooks.version]
-path = "jupyterlab_new_launcher/_version.py"
+path = "jupyterlab_launchpad/_version.py"
 
 [tool.hatch.build.hooks.jupyter-builder]
 dependencies = ["hatch-jupyter-builder>=0.5"]
 build-function = "hatch_jupyter_builder.npm_builder"
 ensured-targets = [
-    "jupyterlab_new_launcher/labextension/static/style.js",
-    "jupyterlab_new_launcher/labextension/package.json",
+    "jupyterlab_launchpad/labextension/static/style.js",
+    "jupyterlab_launchpad/labextension/package.json",
 ]
-skip-if-exists = ["jupyterlab_new_launcher/labextension/static/style.js"]
+skip-if-exists = ["jupyterlab_launchpad/labextension/static/style.js"]
 
 [tool.hatch.build.hooks.jupyter-builder.build-kwargs]
 build_cmd = "build:prod"
@@ -62,7 +62,7 @@ npm = ["jlpm"]
 build_cmd = "install:extension"
 npm = ["jlpm"]
 source_dir = "src"
-build_dir = "jupyterlab_new_launcher/labextension"
+build_dir = "jupyterlab_launchpad/labextension"
 
 [tool.jupyter-releaser.options]
 version_cmd = "hatch version"
diff --git a/schema/plugin.json b/schema/plugin.json
index 2f73692..e2baf9e 100644
--- a/schema/plugin.json
+++ b/schema/plugin.json
@@ -1,10 +1,10 @@
 {
   "jupyter.lab.setting-icon": "ui-components:launcher",
-  "jupyter.lab.setting-icon-label": "New Launcher",
+  "jupyter.lab.setting-icon-label": "Launchpad",
   "jupyter.lab.toolbars": {
     "FileBrowser": [
       {
-        "name": "new-launcher",
+        "name": "launchpad",
         "command": "launcher:create",
         "rank": 1
       }
@@ -30,8 +30,8 @@
       "selector": "body"
     }
   ],
-  "title": "New Launcher",
-  "description": "jupyterlab-new-launcher settings.",
+  "title": "Launchpad",
+  "description": "jupyterlab-launchpad settings.",
   "type": "object",
   "properties": {
     "hiddenColumns": {
diff --git a/src/commands.ts b/src/commands.ts
index 8c454c4..beaeb55 100644
--- a/src/commands.ts
+++ b/src/commands.ts
@@ -106,7 +106,7 @@ export function addCommands(
     label: trans.__('Open Settings Editor'),
     execute: () => {
       app.commands.execute('settingeditor:open', {
-        query: 'New Launcher'
+        query: 'Launchpad'
       });
     }
   });
diff --git a/src/database.ts b/src/database.ts
index 525426b..fec9096 100644
--- a/src/database.ts
+++ b/src/database.ts
@@ -75,7 +75,7 @@ export class LastUsedDatabase
   extends ItemDatabase<string>
   implements ILastUsedDatabase
 {
-  protected readonly _stateDBKey = 'new-launcher:last-used';
+  protected readonly _stateDBKey = 'launchpad:last-used';
 
   get(item: ILauncher.IItemOptions) {
     const date = super._get(item);
@@ -102,7 +102,7 @@ export class FavoritesDatabase
   extends ItemDatabase<boolean>
   implements IFavoritesDatabase
 {
-  protected readonly _stateDBKey = 'new-launcher:favorites';
+  protected readonly _stateDBKey = 'launchpad:favorites';
 
   get(item: ILauncher.IItemOptions) {
     return super._get(item) ?? null;
@@ -120,7 +120,7 @@ export class FavoritesDatabase
   private _changed = new Signal<FavoritesDatabase, void>(this);
 }
 
-type DatabaseId = 'new-launcher:favorites' | 'new-launcher:last-used';
+type DatabaseId = 'launchpad:favorites' | 'launchpad:last-used';
 
 class SingletonStateDB<
   T extends ReadonlyPartialJSONValue = ReadonlyPartialJSONValue
@@ -138,16 +138,16 @@ class SingletonStateDB<
   }
 
   private _endpointsMap = {
-    'new-launcher:favorites': 'database/favorites',
-    'new-launcher:last-used': 'database/last-used'
+    'launchpad:favorites': 'database/favorites',
+    'launchpad:last-used': 'database/last-used'
   };
 }
 
 /**
- * Initialization data for the jupyterlab-new-launcher extension.
+ * Initialization data for the jupyterlab-launchpad extension.
  */
 export const databasePlugin: JupyterFrontEndPlugin<ILauncherDatabase> = {
-  id: 'jupyterlab-new-launcher:database',
+  id: 'jupyterlab-launchpad:database',
   description: 'A redesigned JupyterLab launcher databases',
   provides: ILauncherDatabase,
   autoStart: true,
diff --git a/src/dialogs.tsx b/src/dialogs.tsx
index 087105a..4f882c3 100644
--- a/src/dialogs.tsx
+++ b/src/dialogs.tsx
@@ -135,11 +135,11 @@ export namespace CustomSessionContextDialogs {
 }
 
 /**
- * Initialization data for the jupyterlab-new-launcher session dialogs.
+ * Initialization data for the jupyterlab-launchpad session dialogs.
  */
 export const sessionDialogsPlugin: JupyterFrontEndPlugin<ISessionContextDialogs> =
   {
-    id: 'jupyterlab-new-launcher:dialogs',
+    id: 'jupyterlab-launchpad:dialogs',
     description: 'Session dialogs for redesigned JupyterLab launcher',
     provides: ISessionContextDialogs,
     autoStart: true,
diff --git a/src/handler.ts b/src/handler.ts
index e7c1aec..73ad66a 100644
--- a/src/handler.ts
+++ b/src/handler.ts
@@ -17,7 +17,7 @@ export async function requestAPI<T>(
   const settings = ServerConnection.makeSettings();
   const requestUrl = URLExt.join(
     settings.baseUrl,
-    'jupyterlab-new-launcher', // API Namespace
+    'jupyterlab-launchpad', // API Namespace
     endPoint
   );
 
diff --git a/src/icons.ts b/src/icons.ts
index 781c33e..543c20e 100644
--- a/src/icons.ts
+++ b/src/icons.ts
@@ -4,16 +4,16 @@ import fileSvgstr from '../style/icons/md/file.svg';
 import codeServerSvgstr from '../style/icons/code-server.svg';
 
 export const starIcon = new LabIcon({
-  name: 'jupyterlab-new-launcher:star',
+  name: 'jupyterlab-launchpad:star',
   svgstr: starSvgstr
 });
 
 export const fileIcon = new LabIcon({
-  name: 'jupyterlab-new-launcher:file',
+  name: 'jupyterlab-launchpad:file',
   svgstr: fileSvgstr
 });
 
 export const codeServerIcon = new LabIcon({
-  name: 'jupyterlab-new-launcher:code-server',
+  name: 'jupyterlab-launchpad:code-server',
   svgstr: codeServerSvgstr
 });
diff --git a/src/index.ts b/src/index.ts
index f6d58e0..818ac6f 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -28,7 +28,7 @@ import { databasePlugin } from './database';
 import webkitCSSPatch from '../style/webkit.raw.css';
 
 /**
- * Initialization data for the jupyterlab-new-launcher extension.
+ * Initialization data for the jupyterlab-launchpad extension.
  */
 const launcherPlugin: JupyterFrontEndPlugin<ILauncher> = {
   id: MAIN_PLUGIN_ID,
@@ -62,7 +62,7 @@ function activate(
   defaultBrowser: IDefaultFileBrowser | null
 ): INewLauncher {
   const { commands, shell } = app;
-  const trans = translator.load('jupyterlab-new-launcher');
+  const trans = translator.load('jupyterlab-launchpad');
   const model = new Model();
 
   if (
diff --git a/src/launcher.tsx b/src/launcher.tsx
index e4d013f..497f79e 100644
--- a/src/launcher.tsx
+++ b/src/launcher.tsx
@@ -253,7 +253,7 @@ export class NewLauncher extends Launcher {
   constructor(options: NewLauncher.IOptions) {
     super(options);
     this.commands = options.commands;
-    this.trans = this.translator.load('jupyterlab-new-launcher');
+    this.trans = this.translator.load('jupyterlab-launchpad');
     this._lastUsedDatabase = options.lastUsedDatabase;
     this._favoritesDatabase = options.favoritesDatabase;
     this._settings = options.settings;
diff --git a/src/types.ts b/src/types.ts
index 477e985..371317a 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -6,7 +6,7 @@ import type { ISignal } from '@lumino/signaling';
 import { Token } from '@lumino/coreutils';
 import type { LabIcon } from '@jupyterlab/ui-components';
 
-export const MAIN_PLUGIN_ID = 'jupyterlab-new-launcher:plugin';
+export const MAIN_PLUGIN_ID = 'jupyterlab-launchpad:plugin';
 
 export interface INewLauncher extends ILauncher {
   addSection(options: ISectionOptions): void;
@@ -26,11 +26,11 @@ export interface ISectionOptions {
  */
 export namespace CommandIDs {
   export const create = 'launcher:create';
-  export const moveColumn = 'new-launcher:table-move-column';
-  export const toggleColumn = 'new-launcher:table-toggle-column';
-  export const showStarred = 'new-launcher:show-starred';
-  export const searchAllSections = 'new-launcher:search-all-sections';
-  export const openSettings = 'new-launcher:open-settings';
+  export const moveColumn = 'launchpad:table-move-column';
+  export const toggleColumn = 'launchpad:table-toggle-column';
+  export const showStarred = 'launchpad:show-starred';
+  export const searchAllSections = 'launchpad:search-all-sections';
+  export const openSettings = 'launchpad:open-settings';
 }
 
 export interface ISettingsLayout {
@@ -75,15 +75,15 @@ export interface IFavoritesDatabase {
 }
 
 /**
- * Databases for new launcher.
+ * Databases for launchpad.
  */
 export const ILauncherDatabase = new Token<ILauncherDatabase>(
-  'jupyterlab-new-launcher:ILauncherDatabase',
-  'Databases for new launcher.'
+  'jupyterlab-launchpad:ILauncherDatabase',
+  'Databases for launchpad.'
 );
 
 /**
- *Databases for new launcher
+ * Databases for launchpad.
  */
 export interface ILauncherDatabase {
   lastUsed: ILastUsedDatabase;
diff --git a/yarn.lock b/yarn.lock
index 2311d30..837f113 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7276,9 +7276,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jupyterlab-new-launcher@workspace:.":
+"jupyterlab-launchpad@workspace:.":
   version: 0.0.0-use.local
-  resolution: "jupyterlab-new-launcher@workspace:."
+  resolution: "jupyterlab-launchpad@workspace:."
   dependencies:
     "@jupyterlab/application": ^4.0.0
     "@jupyterlab/builder": ^4.0.0


Test patch:
diff --git a/src/__tests__/jupyterlab_new_launcher.spec.ts b/src/__tests__/jupyterlab_new_launcher.spec.ts
index a135d04..7dc5048 100644
--- a/src/__tests__/jupyterlab_new_launcher.spec.ts
+++ b/src/__tests__/jupyterlab_new_launcher.spec.ts
@@ -2,7 +2,7 @@
  * Example of [Jest](https://jestjs.io/docs/getting-started) unit tests
  */
 
-describe('jupyterlab-new-launcher', () => {
+describe('jupyterlab-launchpad', () => {
   it('should be tested', () => {
     expect(1 + 1).toEqual(2);
   });
diff --git a/ui-tests/package.json b/ui-tests/package.json
index 58daae7..0f0a660 100644
--- a/ui-tests/package.json
+++ b/ui-tests/package.json
@@ -1,7 +1,7 @@
 {
-  "name": "jupyterlab-new-launcher-ui-tests",
+  "name": "jupyterlab-launchpad-ui-tests",
   "version": "1.0.0",
-  "description": "JupyterLab jupyterlab-new-launcher Integration Tests",
+  "description": "JupyterLab jupyterlab-launchpad Integration Tests",
   "private": true,
   "scripts": {
     "start": "jupyter lab --config jupyter_server_test_config.py",
diff --git a/ui-tests/tests/jupyterlab_new_launcher.spec.ts b/ui-tests/tests/jupyterlab_new_launcher.spec.ts
index 355257e..079650a 100644
--- a/ui-tests/tests/jupyterlab_new_launcher.spec.ts
+++ b/ui-tests/tests/jupyterlab_new_launcher.spec.ts
@@ -1,7 +1,7 @@
 import { expect, test, galata } from '@jupyterlab/galata';
 import { Page } from '@playwright/test';
 
-const SETTINGS_ID = 'jupyterlab-new-launcher:plugin';
+const SETTINGS_ID = 'jupyterlab-launchpad:plugin';
 
 test.describe('Default settings', () => {
   test('should render new launcher', async ({ page }) => {
diff --git a/ui-tests/yarn.lock b/ui-tests/yarn.lock
index 982c9bd..68ae96c 100644
--- a/ui-tests/yarn.lock
+++ b/ui-tests/yarn.lock
@@ -2752,9 +2752,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jupyterlab-new-launcher-ui-tests@workspace:.":
+"jupyterlab-launchpad-ui-tests@workspace:.":
   version: 0.0.0-use.local
-  resolution: "jupyterlab-new-launcher-ui-tests@workspace:."
+  resolution: "jupyterlab-launchpad-ui-tests@workspace:."
   dependencies:
     "@jupyterlab/galata": ^5.0.5
     "@playwright/test": ^1.37.0