Repository: dagster-io/dagster
Pull request #30284: Make the default dagster_dg.plugin dagster_dg_cli.plugin instead
Author: login: gibsondan
Created: 2025-05-28T02:36:50Z | Merged: 2025-05-29T17:14:12Z

## Summary & Motivation
This is the last place we reference dagster_dg. I'm not strongly wed to this, but if we're being consistent this should be called dagster_dg_cli since that's the new name of the package.

I left the old dagster_dg.plugin as an option, and I don't make it warn if you set it like you do if you set dagster_dg.library.

## How I Tested These Changes
Adjusted test cases



Diff:
diff --git a/examples/components_yaml_checks_dsl/pyproject.toml b/examples/components_yaml_checks_dsl/pyproject.toml
index ab485506ff2e1..9446cbbe4dbd5 100644
--- a/examples/components_yaml_checks_dsl/pyproject.toml
+++ b/examples/components_yaml_checks_dsl/pyproject.toml
@@ -10,7 +10,7 @@ dependencies = [
 ]
 
 [project.entry-points]
-"dagster_dg.library" = { components_yaml_checks_dsl = "components_yaml_checks_dsl.lib"}
+"dagster_dg_cli.plugin" = { components_yaml_checks_dsl = "components_yaml_checks_dsl.lib"}
 
 [dependency-groups]
 dev = [
diff --git a/examples/docs_projects/project_components_pdf_extraction/pyproject.toml b/examples/docs_projects/project_components_pdf_extraction/pyproject.toml
index 2b2a90c46530d..180bc82452ddb 100644
--- a/examples/docs_projects/project_components_pdf_extraction/pyproject.toml
+++ b/examples/docs_projects/project_components_pdf_extraction/pyproject.toml
@@ -15,7 +15,7 @@ dependencies = [
 ]
 
 [project.entry-points]
-"dagster_dg.plugin" = { project_components_pdf_extraction = "project_components_pdf_extraction.lib"}
+"dagster_dg_cli.plugin" = { project_components_pdf_extraction = "project_components_pdf_extraction.lib"}
 
 [dependency-groups]
 dev = [
diff --git a/examples/docs_snippets/docs_snippets/guides/components/index/6-pyproject.toml b/examples/docs_snippets/docs_snippets/guides/components/index/6-pyproject.toml
index 18ac099536cf8..502b2df1e713a 100644
--- a/examples/docs_snippets/docs_snippets/guides/components/index/6-pyproject.toml
+++ b/examples/docs_snippets/docs_snippets/guides/components/index/6-pyproject.toml
@@ -1,4 +1,4 @@
 ...
 [project.entry-points]
-"dagster_dg.plugin" = { jaffle_platform = "jaffle_platform.components"}
+"dagster_dg_cli.plugin" = { jaffle_platform = "jaffle_platform.components"}
 ...
diff --git a/examples/docs_snippets/docs_snippets/guides/dg/creating-dg-plugin/3-pyproject.toml b/examples/docs_snippets/docs_snippets/guides/dg/creating-dg-plugin/3-pyproject.toml
index fb705654247f4..5b1c0aa1a8330 100644
--- a/examples/docs_snippets/docs_snippets/guides/dg/creating-dg-plugin/3-pyproject.toml
+++ b/examples/docs_snippets/docs_snippets/guides/dg/creating-dg-plugin/3-pyproject.toml
@@ -1,3 +1,3 @@
 ...
 [project.entry-points]
-"dagster_dg.plugin" = { my_library = "my_library" }
+"dagster_dg_cli.plugin" = { my_library = "my_library" }
diff --git a/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-pip-plugin-config.txt b/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-pip-plugin-config.txt
index 825d03a017dc2..5c37cbb063289 100644
--- a/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-pip-plugin-config.txt
+++ b/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-pip-plugin-config.txt
@@ -1,3 +1,3 @@
 [options.entry_points]
-dagster_dg.plugin =
+dagster_dg_cli.plugin =
     my_existing_project = my_existing_project.components
diff --git a/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-uv-plugin-config.toml b/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-uv-plugin-config.toml
index 05f49704c6151..4a2de0fbc4712 100644
--- a/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-uv-plugin-config.toml
+++ b/examples/docs_snippets/docs_snippets/guides/dg/migrating-project/7-uv-plugin-config.toml
@@ -1,4 +1,4 @@
 ...
 [project.entry-points]
-"dagster_dg.plugin" = { my_existing_project = "my_existing_project.components"}
+"dagster_dg_cli.plugin" = { my_existing_project = "my_existing_project.components"}
 ...
diff --git a/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/components/test_components_docs.py b/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/components/test_components_docs.py
index d30450620cd0a..6f8039c37975c 100644
--- a/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/components/test_components_docs.py
+++ b/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/components/test_components_docs.py
@@ -174,7 +174,7 @@ def next_snip_no() -> int:
             snippet_replace_regex=[
                 re_ignore_before("[project.entry-points]"),
                 re_ignore_after(
-                    '"dagster_dg.plugin" = { jaffle_platform = "jaffle_platform.components"}'
+                    '"dagster_dg_cli.plugin" = { jaffle_platform = "jaffle_platform.components"}'
                 ),
             ],
         )
diff --git a/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_creating_dg_plugin/test_creating_dg_plugin.py b/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_creating_dg_plugin/test_creating_dg_plugin.py
index 2fe3e324408fc..b26b0d54e14dd 100644
--- a/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_creating_dg_plugin/test_creating_dg_plugin.py
+++ b/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_creating_dg_plugin/test_creating_dg_plugin.py
@@ -63,7 +63,7 @@ def build_defs(self, context: dg.ComponentLoadContext) -> dg.Definitions:
         pyproject_toml_content = pyproject_toml_path.read_text()
         pyproject_toml_content += format_multiline("""
             [project.entry-points]
-            "dagster_dg.plugin" = { my_library = "my_library" }
+            "dagster_dg_cli.plugin" = { my_library = "my_library" }
         """)
         pyproject_toml_path.write_text(pyproject_toml_content)
 
diff --git a/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_migrating_project/test_migrating_project.py b/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_migrating_project/test_migrating_project.py
index 290d1f8eca305..4975ecd5773cc 100644
--- a/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_migrating_project/test_migrating_project.py
+++ b/examples/docs_snippets/docs_snippets_tests/snippet_checks/guides/dg/test_migrating_project/test_migrating_project.py
@@ -185,7 +185,7 @@ def test_migrating_project(
                 snippet_path=f"{context.get_next_snip_number()}-create-lib.txt",
             )
 
-            # Add dagster_dg.plugin to pyproject.toml
+            # Add dagster_dg_cli.plugin to pyproject.toml
             if package_manager == "uv":
                 pyproject_toml_content = Path("pyproject.toml").read_text()
                 pyproject_toml_content = insert_before_matching_line(
@@ -193,7 +193,7 @@ def test_migrating_project(
                     "\n"
                     + format_multiline("""
                         [project.entry-points]
-                        "dagster_dg.plugin" = { my_existing_project = "my_existing_project.components"}
+                        "dagster_dg_cli.plugin" = { my_existing_project = "my_existing_project.components"}
                     """),
                     r"\[build-system\]",
                 )
@@ -215,7 +215,7 @@ def test_migrating_project(
             elif package_manager == "pip":
                 setup_cfg_content = format_multiline("""
                     [options.entry_points]
-                    dagster_dg.plugin =
+                    dagster_dg_cli.plugin =
                         my_existing_project = my_existing_project.components
                 """)
                 Path("setup.cfg").write_text(setup_cfg_content)
diff --git a/python_modules/dagster/dagster/components/core/package_entry.py b/python_modules/dagster/dagster/components/core/package_entry.py
index d7cf8eff7ae88..1a543ea136e2c 100644
--- a/python_modules/dagster/dagster/components/core/package_entry.py
+++ b/python_modules/dagster/dagster/components/core/package_entry.py
@@ -11,10 +11,10 @@
 from dagster.components.utils import format_error_message
 
 PACKAGE_ENTRY_ATTR = "__dg_package_entry__"
-DG_PLUGIN_ENTRY_POINT_GROUP = "dagster_dg.plugin"
+DG_PLUGIN_ENTRY_POINT_GROUP = "dagster_dg_cli.plugin"
 
 # Remove in future, in place for backcompat
-OLD_DG_PLUGIN_ENTRY_POINT_GROUP = "dagster_dg.library"
+OLD_DG_PLUGIN_ENTRY_POINT_GROUPS = ["dagster_dg.library", "dagster_dg.plugin"]
 
 
 class ComponentsEntryPointLoadError(DagsterError):
@@ -31,15 +31,16 @@ def get_entry_points_from_python_environment(group: str) -> Sequence[importlib.m
 
 
 def get_plugin_entry_points() -> Sequence[importlib.metadata.EntryPoint]:
-    return [
-        *get_entry_points_from_python_environment(DG_PLUGIN_ENTRY_POINT_GROUP),
-        *get_entry_points_from_python_environment(OLD_DG_PLUGIN_ENTRY_POINT_GROUP),
-    ]
+    entry_points = []
+    entry_points.extend(get_entry_points_from_python_environment(DG_PLUGIN_ENTRY_POINT_GROUP))
+    for entry_point_group in OLD_DG_PLUGIN_ENTRY_POINT_GROUPS:
+        entry_points.extend(get_entry_points_from_python_environment(entry_point_group))
+    return entry_points
 
 
 def discover_entry_point_package_objects() -> dict[PluginObjectKey, object]:
     """Discover package entries registered in the Python environment via the
-    `dagster_dg.plugin` entry point group.
+    `dagster_dg_cli.plugin` entry point group.
     """
     objects: dict[PluginObjectKey, object] = {}
 
diff --git a/python_modules/dagster/dagster_tests/components_tests/registry_tests/test_registry.py b/python_modules/dagster/dagster_tests/components_tests/registry_tests/test_registry.py
index 66bf07f6f3e5b..71ec8c6abd4d2 100644
--- a/python_modules/dagster/dagster_tests/components_tests/registry_tests/test_registry.py
+++ b/python_modules/dagster/dagster_tests/components_tests/registry_tests/test_registry.py
@@ -212,7 +212,9 @@ def isolated_venv_with_component_lib_dagster_foo(
                 yield venv_root
 
 
-@pytest.mark.parametrize("entry_point_group", ["dagster_dg.plugin", "dagster_dg.library"])
+@pytest.mark.parametrize(
+    "entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"]
+)
 def test_components_from_third_party_lib(entry_point_group: str):
     with isolated_venv_with_component_lib_dagster_foo(entry_point_group) as venv_root:
         component_types = _get_component_types_in_python_environment(venv_root)
@@ -220,7 +222,9 @@ def test_components_from_third_party_lib(entry_point_group: str):
         assert "dagster_foo.lib.TestComponent2" in component_types
 
 
-@pytest.mark.parametrize("entry_point_group", ["dagster_dg.plugin", "dagster_dg.library"])
+@pytest.mark.parametrize(
+    "entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"]
+)
 def test_bad_entry_point_error_message(entry_point_group: str):
     # Modify the entry point to point to a non-existent module. This has to be done before the
     # package is installed, which is why we use a pre-install hook.
diff --git a/python_modules/dagster/dagster_tests/components_tests/utils.py b/python_modules/dagster/dagster_tests/components_tests/utils.py
index 1580c5e38a17c..2be3660784af6 100644
--- a/python_modules/dagster/dagster_tests/components_tests/utils.py
+++ b/python_modules/dagster/dagster_tests/components_tests/utils.py
@@ -75,7 +75,7 @@ def generate_component_lib_pyproject_toml(name: str, is_project: bool = False) -
         ]
 
         [project.entry-points]
-        "dagster_dg.plugin" = {{ {pkg_name} = "{pkg_name}.lib" }}
+        "dagster_dg_cli.plugin" = {{ {pkg_name} = "{pkg_name}.lib" }}
     """)
     if is_project:
         return base + textwrap.dedent(f"""
diff --git a/python_modules/dagster/setup.py b/python_modules/dagster/setup.py
index 9eb89d101e88b..d64f14c2721eb 100644
--- a/python_modules/dagster/setup.py
+++ b/python_modules/dagster/setup.py
@@ -172,7 +172,7 @@ def get_version() -> str:
             "dagster-components = dagster.components.cli:main",
             "dagster-daemon = dagster.daemon.cli:main",
         ],
-        "dagster_dg.plugin": [
+        "dagster_dg_cli.plugin": [
             "dagster = dagster",
         ],
     },
diff --git a/python_modules/libraries/create-dagster/create_dagster/templates/PROJECT_NAME_PLACEHOLDER/pyproject.toml.jinja b/python_modules/libraries/create-dagster/create_dagster/templates/PROJECT_NAME_PLACEHOLDER/pyproject.toml.jinja
index 1325d0057ae73..273ed85dcebec 100644
--- a/python_modules/libraries/create-dagster/create_dagster/templates/PROJECT_NAME_PLACEHOLDER/pyproject.toml.jinja
+++ b/python_modules/libraries/create-dagster/create_dagster/templates/PROJECT_NAME_PLACEHOLDER/pyproject.toml.jinja
@@ -5,7 +5,7 @@ version = "0.1.0"
 {{ dependencies }}
 
 [project.entry-points]
-"dagster_dg.plugin" = { {{ project_name }} = "{{ project_name }}.components"}
+"dagster_dg_cli.plugin" = { {{ project_name }} = "{{ project_name }}.components"}
 
 [dependency-groups]
 {{ dev_dependencies }}
diff --git a/python_modules/libraries/dagster-dbt/setup.py b/python_modules/libraries/dagster-dbt/setup.py
index 613889a7c0b67..3dd39d89f23a7 100644
--- a/python_modules/libraries/dagster-dbt/setup.py
+++ b/python_modules/libraries/dagster-dbt/setup.py
@@ -65,7 +65,7 @@ def get_version() -> tuple[str, str]:
             "dagster-dbt-cloud = dagster_dbt.cloud.cli:app",
             "dagster-dbt = dagster_dbt.cli.app:app",
         ],
-        "dagster_dg.plugin": [
+        "dagster_dg_cli.plugin": [
             "dagster_dbt = dagster_dbt",
         ],
     },
diff --git a/python_modules/libraries/dagster-dg-cli/dagster_dg_cli_tests/cli_tests/test_list_commands.py b/python_modules/libraries/dagster-dg-cli/dagster_dg_cli_tests/cli_tests/test_list_commands.py
index 3f947498fc02f..a9936cca27922 100644
--- a/python_modules/libraries/dagster-dg-cli/dagster_dg_cli_tests/cli_tests/test_list_commands.py
+++ b/python_modules/libraries/dagster-dg-cli/dagster_dg_cli_tests/cli_tests/test_list_commands.py
@@ -649,7 +649,7 @@ def _assert_entry_point_error(cmd: list[str]):
         output = standardize_box_characters(result.stdout.decode("utf-8"))
 
         expected_header_message = format_error_message("""
-            Error loading entry point `foo_bar.components` in group `dagster_dg.plugin`.
+            Error loading entry point `foo_bar.components` in group `dagster_dg_cli.plugin`.
         """)
         assert expected_header_message in output
 
diff --git a/python_modules/libraries/dagster-dg-core/dagster_dg_core/component.py b/python_modules/libraries/dagster-dg-core/dagster_dg_core/component.py
index 174f5cbab3dcc..4ae15037d497e 100644
--- a/python_modules/libraries/dagster-dg-core/dagster_dg_core/component.py
+++ b/python_modules/libraries/dagster-dg-core/dagster_dg_core/component.py
@@ -27,7 +27,7 @@ def from_dg_context(
         dg_context: "DgContext", extra_modules: Optional[Sequence[str]] = None
     ) -> "RemotePluginRegistry":
         """Fetches the set of available plugin objects. The default set includes everything
-        discovered under the "dagster_dg.plugin" entry point group in the target environment. If
+        discovered under the "dagster_dg_cli.plugin" entry point group in the target environment. If
         `extra_modules` is provided, these will also be searched for component types.
         """
         if dg_context.use_dg_managed_environment:
@@ -53,7 +53,7 @@ def from_dg_context(
             emit_warning(
                 "missing_dg_plugin_module_in_manifest",
                 f"""
-                Your package defines a `dagster_dg.plugin` entry point, but this module was not
+                Your package defines a `dagster_dg_cli.plugin` entry point, but this module was not
                 found in the plugin manifest for the current environment. This means either that
                 your project is not installed in the current environment, or that the entry point
                 metadata was added after your module was installed. Python entry points are
diff --git a/python_modules/libraries/dagster-dg-core/dagster_dg_core/context.py b/python_modules/libraries/dagster-dg-core/dagster_dg_core/context.py
index bd1d2c6094fc6..8bbe2d55f0705 100644
--- a/python_modules/libraries/dagster-dg-core/dagster_dg_core/context.py
+++ b/python_modules/libraries/dagster-dg-core/dagster_dg_core/context.py
@@ -521,7 +521,7 @@ def python_environment(self) -> DgProjectPythonEnvironment:
     # ########################
 
     # It is possible for a single package to define multiple entry points under the
-    # `dagster_dg.plugin` entry point group. At present, `dg` only cares about the first one, which
+    # `dagster_dg_cli.plugin` entry point group. At present, `dg` only cares about the first one, which
     # it uses for all component type scaffolding operations.
 
     @property
@@ -546,25 +546,27 @@ def default_plugin_module_path(self) -> Path:
 
     @cached_property
     def _dagster_components_entry_points(self) -> Mapping[str, str]:
+        # defered imports for perf
         import tomlkit
         import tomlkit.items
+        from dagster.components.core.package_entry import OLD_DG_PLUGIN_ENTRY_POINT_GROUPS
 
         if self.pyproject_toml_path.exists():
             toml = tomlkit.parse(self.pyproject_toml_path.read_text())
-            if has_toml_node(toml, ("project", "entry-points", "dagster_dg.plugin")):
+            if has_toml_node(toml, ("project", "entry-points", "dagster_dg_cli.plugin")):
                 return get_toml_node(
                     toml,
-                    ("project", "entry-points", "dagster_dg.plugin"),
-                    (tomlkit.items.Table, tomlkit.items.InlineTable),
-                ).unwrap()
-            # Keeping for a few weeks (as of 2025-04-09) for backwards compatibility. Should be removed
-            # eventually.
-            elif has_toml_node(toml, ("project", "entry-points", "dagster_dg.library")):
-                return get_toml_node(
-                    toml,
-                    ("project", "entry-points", "dagster_dg.library"),
+                    ("project", "entry-points", "dagster_dg_cli.plugin"),
                     (tomlkit.items.Table, tomlkit.items.InlineTable),
                 ).unwrap()
+            # Keeping for backwards compatibility. Should be removed eventually.
+            for entry_point_group in OLD_DG_PLUGIN_ENTRY_POINT_GROUPS:
+                if has_toml_node(toml, ("project", "entry-points", entry_point_group)):
+                    return get_toml_node(
+                        toml,
+                        ("project", "entry-points", entry_point_group),
+                        (tomlkit.items.Table, tomlkit.items.InlineTable),
+                    ).unwrap()
         if self.setup_cfg_path.exists():
             import warnings
 
@@ -576,7 +578,9 @@ def _dagster_components_entry_points(self) -> Mapping[str, str]:
                 warnings.simplefilter("ignore", category=SetuptoolsDeprecationWarning)
                 config = read_configuration("setup.cfg")
             entry_points = config.get("options", {}).get("entry_points", {})
-            if "dagster_dg.plugin" in entry_points:
+            if "dagster_dg_cli.plugin" in entry_points:
+                raw_plugin_entry_points = entry_points["dagster_dg_cli.plugin"]
+            elif "dagster_dg.plugin" in entry_points:
                 raw_plugin_entry_points = entry_points["dagster_dg.plugin"]
             elif "dagster_dg.library" in entry_points:
                 raw_plugin_entry_points = entry_points["dagster_dg.library"]
@@ -733,31 +737,33 @@ def _validate_project_venv_activated(context: DgContext) -> None:
         )
 
 
-# Can be removed when we drop support for dagster_dg.library
+# Can be removed when we drop support for dagster_dg.library and dagster_dg.plugin
 def _validate_plugin_entry_point(context: DgContext) -> None:
     if not context.pyproject_toml_path.exists():
         return
 
     import tomlkit
+    from dagster.components.core.package_entry import OLD_DG_PLUGIN_ENTRY_POINT_GROUPS
 
     toml = tomlkit.parse(context.pyproject_toml_path.read_text())
-    if has_toml_node(toml, ("project", "entry-points", "dagster_dg.library")):
-        emit_warning(
-            "deprecated_dagster_dg_library_entry_point",
-            f"""
-            Found deprecated `dagster_dg.library` entry point group in:
-                {context.pyproject_toml_path}
+    for entry_point_group in OLD_DG_PLUGIN_ENTRY_POINT_GROUPS:
+        if has_toml_node(toml, ("project", "entry-points", entry_point_group)):
+            emit_warning(
+                "deprecated_dagster_dg_library_entry_point",
+                f"""
+                Found deprecated `{entry_point_group}` entry point group in:
+                    {context.pyproject_toml_path}
 
-            Please update the group name to `dagster_dg.plugin`. Package reinstallation is required
-            because entry points are registered at install time. Reinstall your package to your
-            environment using:
+                Please update the group name to `dagster_dg_cli.plugin`. Package reinstallation is required
+                because entry points are registered at install time. Reinstall your package to your
+                environment using:
 
-                [uv]  $ uv pip install -e .
-                [pip] $ pip install -e .
+                    [uv]  $ uv pip install -e .
+                    [pip] $ pip install -e .
 
-            """,
-            context.config.cli.suppress_warnings,
-        )
+                """,
+                context.config.cli.suppress_warnings,
+            )
 
 
 DG_UPDATE_CHECK_INTERVAL = datetime.timedelta(hours=1)
diff --git a/python_modules/libraries/dagster-dg-core/dagster_dg_core/utils/__init__.py b/python_modules/libraries/dagster-dg-core/dagster_dg_core/utils/__init__.py
index 71996f88e6813..398a45c3c7197 100644
--- a/python_modules/libraries/dagster-dg-core/dagster_dg_core/utils/__init__.py
+++ b/python_modules/libraries/dagster-dg-core/dagster_dg_core/utils/__init__.py
@@ -360,7 +360,7 @@ def msg_with_potential_paths(message: str, potential_paths: list[Path]) -> str:
 
 NOT_COMPONENT_LIBRARY_ERROR_MESSAGE = """
 This command must be run inside a Dagster component library directory. Ensure that the nearest
-pyproject.toml has an entry point defined under the `dagster_dg.plugin` group.
+pyproject.toml has an entry point defined under the `dagster_dg_cli.plugin` group.
 """
 
 
diff --git a/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/test_context.py b/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/test_context.py
index 139d1866bf007..74d0843e07df7 100644
--- a/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/test_context.py
+++ b/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/test_context.py
@@ -213,13 +213,13 @@ def test_setup_cfg_entry_point():
     ):
         # Delete the entry point section from pyproject.toml
         with modify_toml_as_dict(Path("pyproject.toml")) as toml:
-            delete_toml_node(toml, ("project", "entry-points", "dagster_dg.plugin"))
+            delete_toml_node(toml, ("project", "entry-points", "dagster_dg_cli.plugin"))
         # Create a setup.cfg file with the entry point
         with open("setup.cfg", "w") as f:
             f.write(
                 textwrap.dedent("""
                 [options.entry_points]
-                dagster_dg.plugin =
+                dagster_dg_cli.plugin =
                     foo_bar = foo_bar.lib
                 """)
             )
@@ -227,21 +227,22 @@ def test_setup_cfg_entry_point():
         assert context.is_plugin
 
 
-def test_deprecated_entry_point_group_warning():
+@pytest.mark.parametrize("deprecated_group", ["dagster_dg.library", "dagster_dg.plugin"])
+def test_deprecated_entry_point_group_warning(deprecated_group: str):
     with (
         ProxyRunner.test() as runner,
         isolated_example_project_foo_bar(runner),
     ):
         with modify_toml_as_dict(Path("pyproject.toml")) as toml_dict:
             plugin_entry_points = get_toml_node(
-                toml_dict, ("project", "entry-points", "dagster_dg.plugin"), dict
+                toml_dict, ("project", "entry-points", "dagster_dg_cli.plugin"), dict
             )
             set_toml_node(
-                toml_dict, ("project", "entry-points", "dagster_dg.library"), plugin_entry_points
+                toml_dict, ("project", "entry-points", deprecated_group), plugin_entry_points
             )
-            delete_toml_node(toml_dict, ("project", "entry-points", "dagster_dg.plugin"))
+            delete_toml_node(toml_dict, ("project", "entry-points", "dagster_dg_cli.plugin"))
 
-        expected_match = "deprecated `dagster_dg.library` entry point group"
+        expected_match = f"deprecated `{deprecated_group}` entry point group"
         with dg_warns(expected_match):
             DgContext.for_project_environment(Path("foo-bar"), {})
         with dg_warns(expected_match):
@@ -273,7 +274,7 @@ def test_missing_dg_plugin_module_in_manifest_warning():
         )
         with activate_venv(Path(".venv")):
             context = DgContext.for_project_environment(Path.cwd(), {})
-            with dg_warns("Your package defines a `dagster_dg.plugin` entry point"):
+            with dg_warns("Your package defines a `dagster_dg_cli.plugin` entry point"):
                 RemotePluginRegistry.from_dg_context(context)
 
 
diff --git a/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/utils.py b/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/utils.py
index a2b79d419753a..5e9df8d9966e9 100644
--- a/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/utils.py
+++ b/python_modules/libraries/dagster-dg-core/dagster_dg_core_tests/utils.py
@@ -327,7 +327,7 @@ def isolated_example_component_library_foo_bar(
             if components_module_name:
                 set_toml_node(
                     toml,
-                    ("project", "entry-points", "dagster_dg.plugin", "foo_bar"),
+                    ("project", "entry-points", "dagster_dg_cli.plugin", "foo_bar"),
                     components_module_name,
                 )
                 components_dir = Path("src", *components_module_name.split("."))
diff --git a/python_modules/libraries/dagster-dlt/setup.py b/python_modules/libraries/dagster-dlt/setup.py
index 4db4128c4e957..71b75bda93631 100644
--- a/python_modules/libraries/dagster-dlt/setup.py
+++ b/python_modules/libraries/dagster-dlt/setup.py
@@ -37,7 +37,7 @@ def get_version() -> str:
     zip_safe=False,
     extras_require={"test": ["duckdb", "dagster-dg-cli"]},
     entry_points={
-        "dagster_dg.plugin": [
+        "dagster_dg_cli.plugin": [
             "dagster_dlt = dagster_dlt",
         ],
     },
diff --git a/python_modules/libraries/dagster-fivetran/setup.py b/python_modules/libraries/dagster-fivetran/setup.py
index 0eab89e020d22..113296070fb66 100644
--- a/python_modules/libraries/dagster-fivetran/setup.py
+++ b/python_modules/libraries/dagster-fivetran/setup.py
@@ -39,7 +39,7 @@ def get_version() -> str:
         "console_scripts": [
             "dagster-fivetran = dagster_fivetran.cli:main",
         ],
-        "dagster_dg.plugin": [
+        "dagster_dg_cli.plugin": [
             "dagster_fivetran = dagster_fivetran",
         ],
     },
diff --git a/python_modules/libraries/dagster-sling/setup.py b/python_modules/libraries/dagster-sling/setup.py
index 80f5ec8b8e36e..5ce950e8b0697 100644
--- a/python_modules/libraries/dagster-sling/setup.py
+++ b/python_modules/libraries/dagster-sling/setup.py
@@ -47,7 +47,7 @@ def get_version() -> str:
         ]
     },
     entry_points={
-        "dagster_dg.plugin": [
+        "dagster_dg_cli.plugin": [
             "dagster_sling = dagster_sling",
         ],
     },


Reviews:
user: login: graphite-app[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-28T02:39:06Z
user: login: graphite-app[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-28T21:51:18Z
user: login: smackesey
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-29T14:34:41Z
user: login: smackesey
body: This PR should update the tests in components_tests/test_registry.py to ensure all valid entry points are tested. Also I now think we should go ahead and add the warning msg for `dagster_dg.plugin`.
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-29T14:35:01Z
user: login: smackesey
body: >unless I missed something, I believe I did in fact update those tests?

My mistake, not sure how I missed that.

Looks good now!
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-29T15:57:02Z
user: login: graphite-app[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-29T16:34:40Z

Review comments:
diff_hunk: @@ -212,15 +212,15 @@ def isolated_venv_with_component_lib_dagster_foo(
                 yield venv_root
 
 
-@pytest.mark.parametrize("entry_point_group", ["dagster_dg.plugin", "dagster_dg.library"])
+@pytest.mark.parametrize("entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin" "dagster_dg.library"])
path: python_modules/dagster/dagster_tests/components_tests/registry_tests/test_registry.py
user: login: graphite-app[bot]
body: There's a missing comma between `"dagster_dg.plugin"` and `"dagster_dg.library"` in the parametrize decorator. This will cause a syntax error as Python will concatenate these strings instead of treating them as separate list items. The correct syntax should be:

```python
@pytest.mark.parametrize("entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"])
```

This issue appears in two places in the diff.
```suggestion
@pytest.mark.parametrize("entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"])
```
  

*Spotted by [Diamond](https://app.graphite.dev/diamond/?org=dagster-io&ref=ai-review-comment)*<i class='graphite__hidden'><br /><br />Is this helpful? React 👍 or 👎 to let us know.</i>
created_at: 2025-05-28T02:39:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -212,15 +212,19 @@ def isolated_venv_with_component_lib_dagster_foo(
                 yield venv_root
 
 
-@pytest.mark.parametrize("entry_point_group", ["dagster_dg.plugin", "dagster_dg.library"])
+@pytest.mark.parametrize(
+    "entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"]
+)
 def test_components_from_third_party_lib(entry_point_group: str):
     with isolated_venv_with_component_lib_dagster_foo(entry_point_group) as venv_root:
         component_types = _get_component_types_in_python_environment(venv_root)
         assert "dagster_foo.lib.TestComponent1" in component_types
         assert "dagster_foo.lib.TestComponent2" in component_types
 
 
-@pytest.mark.parametrize("entry_point_group", ["dagster_dg.plugin", "dagster_dg.library"])
+@pytest.mark.parametrize(
+    "entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugindagster_dg.library"]
path: python_modules/dagster/dagster_tests/components_tests/registry_tests/test_registry.py
user: login: graphite-app[bot]
body: There appears to be a syntax error in the parametrize decorator. The string `"dagster_dg.plugindagster_dg.library"` should be split into two separate strings with a comma between them: `"dagster_dg.plugin", "dagster_dg.library"`.

The corrected line should look like:
```python
@pytest.mark.parametrize(
    "entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"]
)
```
```suggestion
    "entry_point_group", ["dagster_dg_cli.plugin", "dagster_dg.plugin", "dagster_dg.library"]
```
  

*Spotted by [Diamond](https://app.graphite.dev/diamond/?org=dagster-io&ref=ai-review-comment)*<i class='graphite__hidden'><br /><br />Is this helpful? React 👍 or 👎 to let us know.</i>
created_at: 2025-05-28T21:51:17Z
author_association: CONTRIBUTOR
diff_hunk: @@ -748,7 +750,7 @@ def _validate_plugin_entry_point(context: DgContext) -> None:
             Found deprecated `dagster_dg.library` entry point group in:
path: python_modules/libraries/dagster-dg-core/dagster_dg_core/context.py
user: login: smackesey
body: <!--__GRAPHITE_HTML_TAG_START__--><p class='graphite__hidden'><i>[Re: line +746]</i></p><!--__GRAPHITE_HTML_TAG_END__-->
This would be the one line needed to modify to warn on `dagster_dg.plugin`. I actually now think we should do it since there's a major announcement for this release and all the error messages have been updated.
<!--__GRAPHITE_HTML_TAG_START__--><p class='graphite__hidden'>See this comment inline on <a href="https://app.graphite.dev/github/pr/dagster-io/dagster/30284?utm_source=unchanged-line-comment">Graphite</a>.</p><!--__GRAPHITE_HTML_TAG_END__-->
created_at: 2025-05-29T14:34:39Z
author_association: COLLABORATOR
diff_hunk: @@ -546,25 +546,27 @@ def default_plugin_module_path(self) -> Path:
 
     @cached_property
     def _dagster_components_entry_points(self) -> Mapping[str, str]:
+        # defered imports for perf
path: python_modules/libraries/dagster-dg-core/dagster_dg_core/context.py
user: login: graphite-app[bot]
body: There's a small typo in the comment: `defered` should be spelled `deferred`. This would make the comment read `# deferred imports for perf`.
```suggestion
        # deferred imports for perf
```
  

*Spotted by [Diamond](https://app.graphite.dev/diamond/?org=dagster-io&ref=ai-review-comment)*<i class='graphite__hidden'><br /><br />Is this helpful? React 👍 or 👎 to let us know.</i>
created_at: 2025-05-29T16:34:39Z
author_association: CONTRIBUTOR

PR comments:
user: login: gibsondan
created_at: 2025-05-28T02:37:06Z
body: * **#30284** <a href="https://app.graphite.dev/github/pr/dagster-io/dagster/30284?utm_source=stack-comment-icon" target="_blank"><img src="https://static.graphite.dev/graphite-32x32-black.png" alt="Graphite" width="10px" height="10px"/></a> 👈 <a href="https://app.graphite.dev/github/pr/dagster-io/dagster/30284?utm_source=stack-comment-view-in-graphite" target="_blank">(View in Graphite)</a>
* `master`


<h2></h2>

This stack of pull requests is managed by <a href="https://graphite.dev?utm-source=stack-comment"><b>Graphite</b></a>. Learn more about <a href="https://stacking.dev/?utm_source=stack-comment">stacking</a>.
<!-- Current dependencies on/for this PR: -->
author_association: MEMBER
user: login: github-actions[bot]
created_at: 2025-05-28T02:47:20Z
body: Deploy preview for _dagster-docs_ ready!

Preview available at https://dagster-docs-gdwjl17ex-elementl.vercel.app
https://dgcliplugin.archive.dagster-docs.io

Direct link to changed pages:
author_association: CONTRIBUTOR
user: login: gibsondan
created_at: 2025-05-29T15:22:15Z
body: @smackesey unless I missed something, I believe I did in fact update those tests?
author_association: MEMBER