Skip to content

Commit 11bcf73

Browse files
authored
Merge pull request #7890 from QwikDev/router-dev-improvements
feat(router): make dev more like prod
2 parents 50422e8 + 0a1c70e commit 11bcf73

File tree

86 files changed

+2754
-3761
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+2754
-3761
lines changed

.changeset/great-news-lie.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@qwik.dev/router': minor
3+
'@qwik.dev/core': minor
4+
---
5+
6+
Feat: split Qwik Core and Router dev experience. Core now only adjusts the html using the Vite hook for it, so it can work in any environment or client-only. You can make a Qwik application client-only by running `qwik add csr` now.
7+
Feat: Qwik Route now runs dev mode using the node middleware, which is the same as production, and can now hot-reload when routes are added. It does this by transforming the response while it streams to add the dev scripts. This opens the door for Vite Environment support.
8+
Feat: `qwikVite()` SSR builds now reads the manifest from the client build whenever possible. You can still pass in the manifest yourself if needed.
9+
Fix: Qwik Router's Vite plugin no longer imports Qwik Core, a cause of duplicate imports in dev and preview mode.
10+
Fix: Sometimes, SSG hangs after completion. The cause is still unknown, but now there is a workaround by forcing the process to exit after SSG is done.

e2e/docs-e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"author": "",
66
"devDependencies": {
77
"@playwright/test": "1.50.1",
8-
"@types/node": "24.2.1"
8+
"@types/node": "24.3.0"
99
},
1010
"keywords": [],
1111
"license": "ISC",

e2e/qwik-cli-e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "qwik-cli-e2e",
33
"version": "0.0.0",
44
"dependencies": {
5-
"kleur": "4.1.5"
5+
"kleur": "^4.1.5"
66
},
77
"private": true,
88
"scripts": {

e2e/qwik-cli-e2e/tests/serve.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ for (const type of ['empty', 'playground'] as QwikProjectType[]) {
3333
}
3434
config.cleanupFn();
3535
};
36-
});
36+
}, 120000);
3737

3838
if (type === 'playground') {
3939
test(

package.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
"@changesets/cli": "2.29.5",
9494
"@changesets/get-github-info": "0.6.0",
9595
"@changesets/types": "6.1.0",
96-
"@clack/prompts": "0.7.0",
96+
"@clack/prompts": "0.11.0",
9797
"@eslint/js": "9.33.0",
9898
"@mdx-js/mdx": "3.1.0",
9999
"@microsoft/api-documenter": "7.26.31",
@@ -107,13 +107,13 @@
107107
"@qwik.dev/partytown": "0.11.2",
108108
"@qwik.dev/router": "workspace:*",
109109
"@types/brotli": "1.3.4",
110-
"@types/bun": "1.2.20",
110+
"@types/bun": "1.2.21",
111111
"@types/cross-spawn": "6.0.6",
112112
"@types/express": "5.0.3",
113-
"@types/node": "24.2.1",
113+
"@types/node": "24.3.0",
114114
"@types/path-browserify": "1.0.3",
115115
"@types/prompts": "2.4.9",
116-
"@types/react": "19.1.10",
116+
"@types/react": "19.1.12",
117117
"@types/semver": "7.7.0",
118118
"@types/tmp": "0.2.6",
119119
"@types/which-pm-runs": "1.0.2",
@@ -125,7 +125,7 @@
125125
"cross-spawn": "7.0.6",
126126
"csstype": "3.1.3",
127127
"dotenv": "16.5.0",
128-
"esbuild": "0.25.8",
128+
"esbuild": "0.25.9",
129129
"eslint": "9.33.0",
130130
"eslint-plugin-import": "2.32.0",
131131
"eslint-plugin-no-only-tests": "3.3.0",
@@ -134,28 +134,28 @@
134134
"express": "4.20.0",
135135
"globals": "16.3.0",
136136
"install": "0.13.0",
137-
"memfs": "4.34.0",
138-
"monaco-editor": "0.45.0",
137+
"memfs": "4.38.2",
138+
"monaco-editor": "0.52.2",
139139
"mri": "1.2.0",
140140
"path-browserify": "1.0.1",
141141
"prettier": "3.6.2",
142142
"prettier-plugin-jsdoc": "1.3.3",
143143
"prettier-plugin-tailwindcss": "0.6.14",
144144
"pretty-quick": "4.2.2",
145145
"prompts": "2.4.2",
146-
"rollup": ">= 4.44.0",
146+
"rollup": "4.50.0",
147147
"semver": "7.7.2",
148148
"simple-git-hooks": "2.13.1",
149149
"snoop": "1.0.4",
150-
"source-map": "0.7.4",
150+
"source-map": "0.7.6",
151151
"svgo": "3.3.2",
152152
"syncpack": "13.0.4",
153153
"terser": "5.43.1",
154154
"tmp": "0.2.5",
155155
"tree-kill": "1.2.2",
156-
"tsx": "4.20.3",
157-
"typescript": "5.8.3",
158-
"typescript-eslint": "8.39.1",
156+
"tsx": "4.20.5",
157+
"typescript": "5.9.2",
158+
"typescript-eslint": "8.41.0",
159159
"vfile": "6.0.3",
160160
"vite": "7.1.5",
161161
"vite-imagetools": "7.1.0",

packages/create-qwik/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"bin": "./create-qwik.cjs",
77
"bugs": "https://github.com/QwikDev/qwik/issues",
88
"devDependencies": {
9-
"@clack/prompts": "0.7.0",
9+
"@clack/prompts": "0.11.0",
1010
"@types/yargs": "17.0.33",
1111
"kleur": "4.1.5",
1212
"yargs": "17.7.2"

packages/docs/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
"@shikijs/transformers": "3.12.2",
2828
"@shikijs/types": "3.12.2",
2929
"@supabase/supabase-js": "2.53.0",
30-
"@tailwindcss/vite": "4.1.11",
30+
"@tailwindcss/vite": "4.1.12",
3131
"@types/leaflet": "1.9.20",
3232
"@types/prismjs": "1.26.5",
33-
"@types/react": "19.1.10",
34-
"@types/react-dom": "18.3.0",
33+
"@types/react": "19.1.12",
34+
"@types/react-dom": "19.1.7",
3535
"@unpic/core": "0.0.42",
3636
"@unpic/qwik": "0.0.38",
3737
"algoliasearch": "4.16.0",
@@ -45,14 +45,14 @@
4545
"prismjs": "1.30.0",
4646
"puppeteer": "22.13.1",
4747
"qwik-image": "0.0.16",
48-
"react": "18.3.1",
49-
"react-dom": "18.3.1",
48+
"react": "19.1.1",
49+
"react-dom": "19.1.1",
5050
"shiki": "3.12.2",
5151
"snarkdown": "2.0.0",
52-
"tailwindcss": "4.1.11",
52+
"tailwindcss": "4.1.12",
5353
"terser": "5.43.1",
5454
"tsm": "2.3.0",
55-
"typescript": "5.8.3",
55+
"typescript": "5.9.2",
5656
"undici": "*",
5757
"valibot": "0.33.3",
5858
"vite": "7.1.5",

packages/docs/src/routes/api/qwik-optimizer/api.json

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -542,20 +542,6 @@
542542
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/optimizer/src/plugins/vite.ts",
543543
"mdFile": "core.qwikvite.md"
544544
},
545-
{
546-
"name": "QwikViteDevResponse",
547-
"id": "qwikvitedevresponse",
548-
"hierarchy": [
549-
{
550-
"name": "QwikViteDevResponse",
551-
"id": "qwikvitedevresponse"
552-
}
553-
],
554-
"kind": "Interface",
555-
"content": "```typescript\nexport interface QwikViteDevResponse \n```\n\n\n<table><thead><tr><th>\n\nProperty\n\n\n</th><th>\n\nModifiers\n\n\n</th><th>\n\nType\n\n\n</th><th>\n\nDescription\n\n\n</th></tr></thead>\n<tbody><tr><td>\n\n[\\_qwikEnvData?](#)\n\n\n</td><td>\n\n\n</td><td>\n\nRecord&lt;string, any&gt;\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n<tr><td>\n\n[\\_qwikRenderResolve?](#)\n\n\n</td><td>\n\n\n</td><td>\n\n() =&gt; void\n\n\n</td><td>\n\n_(Optional)_\n\n\n</td></tr>\n</tbody></table>",
556-
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/optimizer/src/plugins/vite.ts",
557-
"mdFile": "core.qwikvitedevresponse.md"
558-
},
559545
{
560546
"name": "QwikVitePlugin",
561547
"id": "qwikviteplugin",

packages/docs/src/routes/api/qwik-optimizer/index.mdx

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,63 +2210,6 @@ any
22102210

22112211
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/optimizer/src/plugins/vite.ts)
22122212

2213-
## QwikViteDevResponse
2214-
2215-
```typescript
2216-
export interface QwikViteDevResponse
2217-
```
2218-
2219-
<table><thead><tr><th>
2220-
2221-
Property
2222-
2223-
</th><th>
2224-
2225-
Modifiers
2226-
2227-
</th><th>
2228-
2229-
Type
2230-
2231-
</th><th>
2232-
2233-
Description
2234-
2235-
</th></tr></thead>
2236-
<tbody><tr><td>
2237-
2238-
[\_qwikEnvData?](#)
2239-
2240-
</td><td>
2241-
2242-
</td><td>
2243-
2244-
Record&lt;string, any&gt;
2245-
2246-
</td><td>
2247-
2248-
_(Optional)_
2249-
2250-
</td></tr>
2251-
<tr><td>
2252-
2253-
[\_qwikRenderResolve?](#)
2254-
2255-
</td><td>
2256-
2257-
</td><td>
2258-
2259-
() =&gt; void
2260-
2261-
</td><td>
2262-
2263-
_(Optional)_
2264-
2265-
</td></tr>
2266-
</tbody></table>
2267-
2268-
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/optimizer/src/plugins/vite.ts)
2269-
22702213
## QwikVitePlugin
22712214

22722215
This is the type of the "pre" Qwik Vite plugin. `qwikVite` actually returns a tuple of two plugins, but after Vite flattens them, you can find the plugin by name.

packages/docs/src/routes/docs/(qwik)/advanced/library/index.mdx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ This will create a new folder called `my-library` with the following structure:
5252
│   │   │   └── counter.tsx
5353
│   │   └── logo
5454
│   │   └── logo.tsx
55-
│   ├── entry.dev.tsx
5655
│   ├── entry.ssr.tsx
5756
│   ├── index.ts
5857
│   └── root.tsx
@@ -126,7 +125,7 @@ export { Counter } from './components/counter/counter';
126125

127126
## Libraries are also Apps
128127

129-
The library starter is also a standalone Qwik app (without routing, nor Qwik Router), this is the reason why you will find `entry.dev.tsx`, `entry.ssr.tsx` and `root.tsx` files.
128+
The library starter is also a standalone Qwik app (without routing, nor Qwik Router), this is the reason why you will find the `entry.ssr.tsx` and `root.tsx` files.
130129

131130
Do not worry about them, they won't be part of the final library, but they are useful during development and testing, so you can test your components in a real Qwik app.
132131

0 commit comments

Comments
 (0)