diff --git a/src/install/install.zig b/src/install/install.zig
index 5bd67da7b28220..3f5334fd624a2c 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -7088,14 +7088,16 @@ pub const PackageManager = struct {
                                     },
                                 }
                             }
-                            break :brk null;
+
+                            break :brk try allocator.dupe(u8, request.version.literal.slice(request.version_buf));
                         },
                         .uninitialized => switch (request.version.tag) {
                             .uninitialized => try allocator.dupe(u8, latest),
-                            else => null,
+                            else => try allocator.dupe(u8, request.version.literal.slice(request.version_buf)),
                         },
-                        else => null,
-                    } orelse try allocator.dupe(u8, request.version.literal.slice(request.version_buf));
+                        .workspace => try allocator.dupe(u8, "workspace:*"),
+                        else => try allocator.dupe(u8, request.version.literal.slice(request.version_buf)),
+                    };
                 }
             }
         }
diff --git a/test/cli/install/bun-workspaces.test.ts b/test/cli/install/bun-workspaces.test.ts
index 9fabb8e23cc7ed..51eea163f01885 100644
--- a/test/cli/install/bun-workspaces.test.ts
+++ b/test/cli/install/bun-workspaces.test.ts
@@ -2,6 +2,7 @@ import { spawnSync } from "bun";
 import { bunExe, bunEnv as env, runBunInstall, tmpdirSync, toMatchNodeModulesAt } from "harness";
 import { join } from "path";
 import { writeFileSync, mkdirSync, rmSync } from "fs";
+import { writeFile, mkdir } from "fs/promises";
 import { beforeEach, test, expect } from "bun:test";
 import { install_test_helpers } from "bun:internal-for-testing";
 const { parseLockfile } = install_test_helpers;
@@ -147,3 +148,57 @@ test("dependency on same name as workspace and dist-tag", async () => {
   expect(lockfile).toMatchNodeModulesAt(packageDir);
   expect(out.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual(["", "3 packages installed"]);
 });
+
+test("adding workspace in workspace edits package.json with correct version (workspace:*)", async () => {
+  await writeFile(
+    join(packageDir, "package.json"),
+    JSON.stringify({
+      name: "foo",
+      workspaces: ["packages/*", "apps/*"],
+    }),
+  );
+
+  await mkdir(join(packageDir, "packages", "pkg1"), { recursive: true });
+  await writeFile(
+    join(packageDir, "packages", "pkg1", "package.json"),
+    JSON.stringify({
+      name: "pkg1",
+      version: "1.0.0",
+    }),
+  );
+
+  await mkdir(join(packageDir, "apps", "pkg2"), { recursive: true });
+  await writeFile(
+    join(packageDir, "apps", "pkg2", "package.json"),
+    JSON.stringify({
+      name: "pkg2",
+      version: "1.0.0",
+    }),
+  );
+
+  const { stdout, exited } = Bun.spawn({
+    cmd: [bunExe(), "add", "pkg2@workspace:*"],
+    cwd: join(packageDir, "packages", "pkg1"),
+    stdout: "pipe",
+    stderr: "inherit",
+    env,
+  });
+  const out = await Bun.readableStreamToText(stdout);
+
+  expect(out.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
+    "",
+    "installed pkg2@workspace:apps/pkg2",
+    "",
+    "2 packages installed",
+  ]);
+
+  expect(await exited).toBe(0);
+
+  expect(await Bun.file(join(packageDir, "packages", "pkg1", "package.json")).json()).toEqual({
+    name: "pkg1",
+    version: "1.0.0",
+    dependencies: {
+      pkg2: "workspace:*",
+    },
+  });
+});