diff --git a/lib/manager/gradle/shallow/__fixtures__/2/libs.versions.toml b/lib/manager/gradle/shallow/__fixtures__/2/libs.versions.toml
index 85bad73700c60adeb0359743d00bffde04d6b219..e68088f183607a426f6b053215473803a122e00d 100644
--- a/lib/manager/gradle/shallow/__fixtures__/2/libs.versions.toml
+++ b/lib/manager/gradle/shallow/__fixtures__/2/libs.versions.toml
@@ -14,3 +14,4 @@ google-firebase-messaging = "com.google.firebase:firebase-messaging"
 [plugins]
 kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version = "1.5.21" }
 kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
+multiJvm = "org.danilopianini.multi-jvm-test-plugin:0.3.0"
diff --git a/lib/manager/gradle/shallow/extract.spec.ts b/lib/manager/gradle/shallow/extract.spec.ts
index 2b4f4751eaeb5423cf320e8e59b5ed61fce5e047..8347126e5610383c27be584fa7d1162e4d0e6e20 100644
--- a/lib/manager/gradle/shallow/extract.spec.ts
+++ b/lib/manager/gradle/shallow/extract.spec.ts
@@ -382,6 +382,22 @@ describe('manager/gradle/shallow/extract', () => {
               'https://plugins.gradle.org/m2/',
             ],
           },
+          {
+            depName: 'org.danilopianini.multi-jvm-test-plugin',
+            depType: 'plugin',
+            currentValue: '0.3.0',
+            commitMessageTopic: 'plugin multiJvm',
+            lookupName:
+              'org.danilopianini.multi-jvm-test-plugin:org.danilopianini.multi-jvm-test-plugin.gradle.plugin',
+            managerData: {
+              fileReplacePosition: 822,
+              packageFile: 'gradle/libs.versions.toml',
+            },
+            registryUrls: [
+              'https://repo.maven.apache.org/maven2',
+              'https://plugins.gradle.org/m2/',
+            ],
+          },
         ],
       },
     ]);
diff --git a/lib/manager/gradle/shallow/extract/catalog.ts b/lib/manager/gradle/shallow/extract/catalog.ts
index 89200c8f829acf55d9235ded996fdeebcf89dd88..95d80049fd9b17f980411a37e1af5890b08d31fc 100644
--- a/lib/manager/gradle/shallow/extract/catalog.ts
+++ b/lib/manager/gradle/shallow/extract/catalog.ts
@@ -168,9 +168,12 @@ export function parseCatalog(
   const pluginsSubContent = content.slice(pluginsStartIndex);
   for (const pluginName of Object.keys(plugins)) {
     const pluginDescriptor = plugins[pluginName];
-    const depName = pluginDescriptor.id;
+    const [depName, version] =
+      typeof pluginDescriptor === 'string'
+        ? pluginDescriptor.split(':')
+        : [pluginDescriptor.id, pluginDescriptor.version];
     const { currentValue, fileReplacePosition } = extractVersion({
-      version: pluginDescriptor.version,
+      version,
       versions,
       depStartIndex: pluginsStartIndex,
       depSubContent: pluginsSubContent,
diff --git a/lib/manager/gradle/shallow/types.ts b/lib/manager/gradle/shallow/types.ts
index 384f14a08d28a2d50f565bbfc1fba8cb064f8316..f9eeeed2511ad6d7ffd622d4e623f760559c0fe1 100644
--- a/lib/manager/gradle/shallow/types.ts
+++ b/lib/manager/gradle/shallow/types.ts
@@ -68,7 +68,7 @@ export interface GradleCatalog {
     string,
     GradleCatalogModuleDescriptor | GradleCatalogArtifactDescriptor | string
   >;
-  plugins?: Record<string, GradleCatalogPluginDescriptor>;
+  plugins?: Record<string, GradleCatalogPluginDescriptor | string>;
 }
 
 export interface GradleCatalogModuleDescriptor {