diff --git a/examples/module/package.json b/examples/module/package.json
index 91fc7a6e5..f59d837ec 100644
--- a/examples/module/package.json
+++ b/examples/module/package.json
@@ -1,5 +1,6 @@
 {
   "private": true,
+  "name": "module",
   "description": "My new Nuxt module",
   "repository": "your-org/my-module",
   "license": "MIT",
diff --git a/examples/module/test/basic.test.ts b/examples/module/test/basic.test.ts
index 2e3df6728..36c38ba47 100644
--- a/examples/module/test/basic.test.ts
+++ b/examples/module/test/basic.test.ts
@@ -1,6 +1,6 @@
 import { fileURLToPath } from 'node:url'
 import { describe, expect, it } from 'vitest'
-import { $fetch, setup } from '@nuxt/test-utils/e2e'
+import { $fetch, setup, startServer } from '@nuxt/test-utils/e2e'
 
 describe('ssr', async () => {
   await setup({
@@ -10,6 +10,17 @@ describe('ssr', async () => {
   it('renders the index page', async () => {
     // Get response to a server-rendered page with `$fetch`.
     const html = await $fetch('/')
-    expect(html).toContain('
basic
')
+    expect(html).toContain('basic original value
')
+  })
+
+  it('changes runtime config and restarts', async () => {
+    await startServer({ env: { NUXT_PUBLIC_MY_VALUE: 'overwritten by test!' } })
+
+    const html = await $fetch('/')
+    expect(html).toContain('basic overwritten by test!
')
+
+    await startServer()
+    const htmlRestored = await $fetch('/')
+    expect(htmlRestored).toContain('basic original value
')
   })
 })
diff --git a/examples/module/test/fixtures/basic/app.vue b/examples/module/test/fixtures/basic/app.vue
index 29a9c81fa..0e4c395fe 100644
--- a/examples/module/test/fixtures/basic/app.vue
+++ b/examples/module/test/fixtures/basic/app.vue
@@ -1,6 +1,7 @@
 
-  basic
+  basic {{ config.public.myValue }}
 
 
 
diff --git a/examples/module/test/fixtures/basic/nuxt.config.ts b/examples/module/test/fixtures/basic/nuxt.config.ts
index 1bc2f7ccd..5b1ef6ef3 100644
--- a/examples/module/test/fixtures/basic/nuxt.config.ts
+++ b/examples/module/test/fixtures/basic/nuxt.config.ts
@@ -1,6 +1,11 @@
 import MyModule from '../../../src/module'
 
 export default defineNuxtConfig({
+  runtimeConfig: {
+    public: {
+      myValue: 'original value',
+    },
+  },
   modules: [
     MyModule
   ]
diff --git a/src/core/server.ts b/src/core/server.ts
index 1305f7b5e..cbd267b36 100644
--- a/src/core/server.ts
+++ b/src/core/server.ts
@@ -10,7 +10,11 @@ import { useTestContext } from './context'
 // eslint-disable-next-line
 const kit: typeof _kit = _kit.default || _kit
 
-export async function startServer () {
+export interface StartServerOptions {
+  env?: Record
+}
+
+export async function startServer (options: StartServerOptions = {}) {
   const ctx = useTestContext()
   await stopServer()
   const host = '127.0.0.1'
@@ -26,7 +30,8 @@ export async function startServer () {
         _PORT: String(port), // Used by internal _dev command
         PORT: String(port),
         HOST: host,
-        NODE_ENV: 'development'
+        NODE_ENV: 'development',
+        ...options.env
       }
     })
     await waitForPort(port, { retries: 32, host }).catch(() => {})
@@ -53,7 +58,8 @@ export async function startServer () {
         ...process.env,
         PORT: String(port),
         HOST: host,
-        NODE_ENV: 'test'
+        NODE_ENV: 'test',
+        ...options.env
       }
     })
     await waitForPort(port, { retries: 20, host })