diff --git a/packages/build-info/assets/logos/vike/dark.svg b/packages/build-info/assets/logos/vike/dark.svg
new file mode 100644
index 0000000000..4302178261
--- /dev/null
+++ b/packages/build-info/assets/logos/vike/dark.svg
@@ -0,0 +1,83 @@
+
diff --git a/packages/build-info/assets/logos/vike/light.svg b/packages/build-info/assets/logos/vike/light.svg
new file mode 100644
index 0000000000..16d9daeae2
--- /dev/null
+++ b/packages/build-info/assets/logos/vike/light.svg
@@ -0,0 +1,83 @@
+
diff --git a/packages/build-info/src/frameworks/index.ts b/packages/build-info/src/frameworks/index.ts
index 1fe19e31f4..fb6a724e2c 100644
--- a/packages/build-info/src/frameworks/index.ts
+++ b/packages/build-info/src/frameworks/index.ts
@@ -42,6 +42,7 @@ import { SvelteKit } from './svelte-kit.js'
import { Svelte } from './svelte.js'
import { TanStackRouter } from './tanstack-router.js'
import { TanStackStart } from './tanstack-start.js'
+import { Vike } from './vike.js'
import { Vite } from './vite.js'
import { Vue } from './vue.js'
import { VuePress } from './vuepress.js'
@@ -86,6 +87,7 @@ export const frameworks = [
Zola,
Observable,
Analog,
+ Vike,
// Front-end frameworks
Angular,
diff --git a/packages/build-info/src/frameworks/vike.test.ts b/packages/build-info/src/frameworks/vike.test.ts
new file mode 100644
index 0000000000..c9923da162
--- /dev/null
+++ b/packages/build-info/src/frameworks/vike.test.ts
@@ -0,0 +1,43 @@
+import { beforeEach, expect, test } from 'vitest'
+
+import { mockFileSystem } from '../../tests/mock-file-system.js'
+import { NodeFS } from '../node/file-system.js'
+import { Project } from '../project.js'
+
+beforeEach((ctx) => {
+ ctx.fs = new NodeFS()
+})
+
+test('detects a Vike site', async ({ fs }) => {
+ const cwd = mockFileSystem({
+ 'package.json': JSON.stringify({
+ scripts: {
+ dev: 'vike dev',
+ build: 'vike build',
+ preview: 'vike build && vike preview',
+ },
+ dependencies: {
+ vike: '^0.4.247',
+ react: '^19.2.0',
+ 'react-dom': '^19.2.0',
+ 'vike-react': '^0.6.13',
+ },
+ devDependencies: {
+ typescript: '^5.9.3',
+ vite: '^7.2.6',
+ '@vitejs/plugin-react': '^5.1.1',
+ '@types/react': '^19.2.7',
+ '@types/react-dom': '^19.2.3',
+ },
+ }),
+ })
+ const detected = await new Project(fs, cwd).detectFrameworks()
+
+ expect(detected?.length).toBe(1)
+
+ expect(detected?.[0]?.id).toBe('vike')
+ expect(detected?.[0]?.build?.command).toBe('vike build')
+ expect(detected?.[0]?.build?.directory).toBe('dist/client')
+ expect(detected?.[0]?.dev?.command).toBe('vike dev')
+ expect(detected?.[0]?.dev?.port).toBe(3000)
+})
diff --git a/packages/build-info/src/frameworks/vike.ts b/packages/build-info/src/frameworks/vike.ts
new file mode 100644
index 0000000000..3ee5bae932
--- /dev/null
+++ b/packages/build-info/src/frameworks/vike.ts
@@ -0,0 +1,24 @@
+import { BaseFramework, Category, Framework } from './framework.js'
+
+export class Vike extends BaseFramework implements Framework {
+ readonly id = 'vike'
+ name = 'Vike'
+ npmDependencies = ['vike']
+ category = Category.SSG
+
+ dev = {
+ command: 'vike dev',
+ port: 3000,
+ }
+
+ build = {
+ command: 'vike build',
+ directory: 'dist/client',
+ }
+
+ logo = {
+ default: '/logos/vike/light.svg',
+ light: '/logos/vite/light.svg',
+ dark: '/logos/vite/dark.svg',
+ }
+}
diff --git a/packages/build-info/src/frameworks/vite.ts b/packages/build-info/src/frameworks/vite.ts
index 0379c32ba0..ac27237b8f 100644
--- a/packages/build-info/src/frameworks/vite.ts
+++ b/packages/build-info/src/frameworks/vite.ts
@@ -20,6 +20,7 @@ export class Vite extends BaseFramework implements Framework {
'@sveltejs/kit',
'@analogjs/platform',
'@react-router/dev',
+ 'vike',
]
category = Category.BuildTool