From 258cd2d046cce133fb60890a5064596fcbfb87ec Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:29:36 +0000 Subject: [PATCH 1/3] bun init: put typescript in devDependencies, not peerDependencies Fixes #7040 --- src/runtime/cli/init/react-app/bun.lock | 2 -- src/runtime/cli/init/react-app/package.json | 4 +--- src/runtime/cli/init/react-shadcn/bun.lock | 2 -- src/runtime/cli/init/react-shadcn/package.json | 4 +--- src/runtime/cli/init/react-tailwind/bun.lock | 2 -- src/runtime/cli/init/react-tailwind/package.json | 4 +--- src/runtime/cli/init_command.rs | 6 +++--- test/cli/init/init.test.ts | 15 +++++++-------- 8 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/runtime/cli/init/react-app/bun.lock b/src/runtime/cli/init/react-app/bun.lock index cbdc83e83c96..84ce5bd4ba81 100644 --- a/src/runtime/cli/init/react-app/bun.lock +++ b/src/runtime/cli/init/react-app/bun.lock @@ -12,8 +12,6 @@ "@types/bun": "latest", "@types/react": "^19", "@types/react-dom": "^19", - }, - "peerDependencies": { "typescript": "^6", }, }, diff --git a/src/runtime/cli/init/react-app/package.json b/src/runtime/cli/init/react-app/package.json index ef682a713458..5a19f598628c 100644 --- a/src/runtime/cli/init/react-app/package.json +++ b/src/runtime/cli/init/react-app/package.json @@ -15,9 +15,7 @@ "devDependencies": { "@types/react": "^19", "@types/react-dom": "^19", - "@types/bun": "latest" - }, - "peerDependencies": { + "@types/bun": "latest", "typescript": "^6" } } diff --git a/src/runtime/cli/init/react-shadcn/bun.lock b/src/runtime/cli/init/react-shadcn/bun.lock index 0d2e33223dd5..7585a8afd54d 100644 --- a/src/runtime/cli/init/react-shadcn/bun.lock +++ b/src/runtime/cli/init/react-shadcn/bun.lock @@ -22,8 +22,6 @@ "@types/react": "^19", "@types/react-dom": "^19", "tailwindcss": "^4.1.11", - }, - "peerDependencies": { "typescript": "^6", }, }, diff --git a/src/runtime/cli/init/react-shadcn/package.json b/src/runtime/cli/init/react-shadcn/package.json index 7379a65b3851..f1ae20199310 100644 --- a/src/runtime/cli/init/react-shadcn/package.json +++ b/src/runtime/cli/init/react-shadcn/package.json @@ -25,9 +25,7 @@ "@types/react": "^19", "@types/react-dom": "^19", "@types/bun": "latest", - "tailwindcss": "^4.1.11" - }, - "peerDependencies": { + "tailwindcss": "^4.1.11", "typescript": "^6" } } diff --git a/src/runtime/cli/init/react-tailwind/bun.lock b/src/runtime/cli/init/react-tailwind/bun.lock index 47460c41ae4c..376a9fd41357 100644 --- a/src/runtime/cli/init/react-tailwind/bun.lock +++ b/src/runtime/cli/init/react-tailwind/bun.lock @@ -14,8 +14,6 @@ "@types/bun": "latest", "@types/react": "^19", "@types/react-dom": "^19", - }, - "peerDependencies": { "typescript": "^6", }, }, diff --git a/src/runtime/cli/init/react-tailwind/package.json b/src/runtime/cli/init/react-tailwind/package.json index 1bb1c7de0742..e4fa1f7c4706 100644 --- a/src/runtime/cli/init/react-tailwind/package.json +++ b/src/runtime/cli/init/react-tailwind/package.json @@ -17,9 +17,7 @@ "devDependencies": { "@types/react": "^19", "@types/react-dom": "^19", - "@types/bun": "latest" - }, - "peerDependencies": { + "@types/bun": "latest", "typescript": "^6" } } diff --git a/src/runtime/cli/init_command.rs b/src/runtime/cli/init_command.rs index fbaf56c8422e..7b7ea492e8ec 100644 --- a/src/runtime/cli/init_command.rs +++ b/src/runtime/cli/init_command.rs @@ -771,15 +771,15 @@ impl InitCommand { } if needs_typescript_dependency { - let mut peer_dependencies = object.get(b"peerDependencies").unwrap_or_else(|| { + let mut dev_dependencies = object.get(b"devDependencies").unwrap_or_else(|| { bun_ast::Expr::init(bun_ast::E::Object::default(), bun_ast::Loc::EMPTY) }); - peer_dependencies.data.e_object_mut().unwrap().put_string( + dev_dependencies.data.e_object_mut().unwrap().put_string( &bump, b"typescript", b"^6", )?; - object.put(&bump, b"peerDependencies", peer_dependencies)?; + object.put(&bump, b"devDependencies", dev_dependencies)?; } } diff --git a/test/cli/init/init.test.ts b/test/cli/init/init.test.ts index ac525d17e6d5..0b7e8a273470 100644 --- a/test/cli/init/init.test.ts +++ b/test/cli/init/init.test.ts @@ -47,8 +47,6 @@ const initEnv = { ...bunEnv, BUN_AGENT_RULE_DISABLED: "1" }; "private": true, "devDependencies": { "@types/bun": "latest", - }, - "peerDependencies": { "typescript": "^6", }, }); @@ -222,12 +220,10 @@ const initEnv = { ...bunEnv, BUN_AGENT_RULE_DISABLED: "1" }; { "devDependencies": { "@types/bun": "latest", + "typescript": "^6", }, "module": "index.ts", "name": "my edited package.json", - "peerDependencies": { - "typescript": "^6", - }, "private": true, "type": "module", } @@ -254,7 +250,8 @@ const initEnv = { ...bunEnv, BUN_AGENT_RULE_DISABLED: "1" }; expect(pkg).toHaveProperty("dependencies.react-dom"); expect(pkg).toHaveProperty("devDependencies.@types/react"); expect(pkg).toHaveProperty("devDependencies.@types/react-dom"); - expect(pkg.peerDependencies).toEqual({ typescript: "^6" }); + expect(pkg).toHaveProperty("devDependencies.typescript", "^6"); + expect(pkg.peerDependencies).toBeUndefined(); expect(fs.existsSync(path.join(temp, "src"))).toBe(true); expect(fs.existsSync(path.join(temp, "src/index.ts"))).toBe(true); @@ -279,7 +276,8 @@ const initEnv = { ...bunEnv, BUN_AGENT_RULE_DISABLED: "1" }; expect(pkg).toHaveProperty("devDependencies.@types/react"); expect(pkg).toHaveProperty("devDependencies.@types/react-dom"); expect(pkg).toHaveProperty("dependencies.bun-plugin-tailwind"); - expect(pkg.peerDependencies).toEqual({ typescript: "^6" }); + expect(pkg).toHaveProperty("devDependencies.typescript", "^6"); + expect(pkg.peerDependencies).toBeUndefined(); expect(fs.existsSync(path.join(temp, "src"))).toBe(true); expect(fs.existsSync(path.join(temp, "src/index.ts"))).toBe(true); @@ -304,7 +302,8 @@ const initEnv = { ...bunEnv, BUN_AGENT_RULE_DISABLED: "1" }; expect(pkg).toHaveProperty("dependencies.class-variance-authority"); expect(pkg).toHaveProperty("dependencies.clsx"); expect(pkg).toHaveProperty("dependencies.bun-plugin-tailwind"); - expect(pkg.peerDependencies).toEqual({ typescript: "^6" }); + expect(pkg).toHaveProperty("devDependencies.typescript", "^6"); + expect(pkg.peerDependencies).toBeUndefined(); expect(fs.existsSync(path.join(temp, "src"))).toBe(true); expect(fs.existsSync(path.join(temp, "src/index.ts"))).toBe(true); From 9f1fad92e0dd0576af18817a246e5f61aa048125 Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:33:40 +0000 Subject: [PATCH 2/3] docs: update quickstart package.json to match new init output --- docs/quickstart.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx index 536c258ad421..88dc4edf9ae3 100644 --- a/docs/quickstart.mdx +++ b/docs/quickstart.mdx @@ -228,9 +228,7 @@ Bun can also execute `"scripts"` from your `package.json`. Add the following scr "start": "bun run index.ts" // [!code ++] }, // [!code ++] "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { + "@types/bun": "latest", "typescript": "^6" } } From ea756e34a71ac8b762b3d21033bf2867cc08485b Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Fri, 24 Jul 2026 23:11:57 +0000 Subject: [PATCH 3/3] ci: retrigger