Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/great-news-lie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@qwik.dev/router': minor
'@qwik.dev/core': minor
---

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.
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.
Feat: `qwikVite()` SSR builds now reads the manifest from the client build whenever possible. You can still pass in the manifest yourself if needed.
Fix: Qwik Router's Vite plugin no longer imports Qwik Core, a cause of duplicate imports in dev and preview mode.
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.
2 changes: 1 addition & 1 deletion e2e/docs-e2e/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"author": "",
"devDependencies": {
"@playwright/test": "1.50.1",
"@types/node": "24.2.1"
"@types/node": "24.3.0"
},
"keywords": [],
"license": "ISC",
Expand Down
2 changes: 1 addition & 1 deletion e2e/qwik-cli-e2e/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "qwik-cli-e2e",
"version": "0.0.0",
"dependencies": {
"kleur": "4.1.5"
"kleur": "^4.1.5"
},
"private": true,
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion e2e/qwik-cli-e2e/tests/serve.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ for (const type of ['empty', 'playground'] as QwikProjectType[]) {
}
config.cleanupFn();
};
});
}, 120000);

if (type === 'playground') {
test(
Expand Down
24 changes: 12 additions & 12 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
"@changesets/cli": "2.29.5",
"@changesets/get-github-info": "0.6.0",
"@changesets/types": "6.1.0",
"@clack/prompts": "0.7.0",
"@clack/prompts": "0.11.0",
"@eslint/js": "9.33.0",
"@mdx-js/mdx": "3.1.0",
"@microsoft/api-documenter": "7.26.31",
Expand All @@ -107,13 +107,13 @@
"@qwik.dev/partytown": "0.11.2",
"@qwik.dev/router": "workspace:*",
"@types/brotli": "1.3.4",
"@types/bun": "1.2.20",
"@types/bun": "1.2.21",
"@types/cross-spawn": "6.0.6",
"@types/express": "5.0.3",
"@types/node": "24.2.1",
"@types/node": "24.3.0",
"@types/path-browserify": "1.0.3",
"@types/prompts": "2.4.9",
"@types/react": "19.1.10",
"@types/react": "19.1.12",
"@types/semver": "7.7.0",
"@types/tmp": "0.2.6",
"@types/which-pm-runs": "1.0.2",
Expand All @@ -125,7 +125,7 @@
"cross-spawn": "7.0.6",
"csstype": "3.1.3",
"dotenv": "16.5.0",
"esbuild": "0.25.8",
"esbuild": "0.25.9",
"eslint": "9.33.0",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-no-only-tests": "3.3.0",
Expand All @@ -134,28 +134,28 @@
"express": "4.20.0",
"globals": "16.3.0",
"install": "0.13.0",
"memfs": "4.34.0",
"monaco-editor": "0.45.0",
"memfs": "4.38.2",
"monaco-editor": "0.52.2",
"mri": "1.2.0",
"path-browserify": "1.0.1",
"prettier": "3.6.2",
"prettier-plugin-jsdoc": "1.3.3",
"prettier-plugin-tailwindcss": "0.6.14",
"pretty-quick": "4.2.2",
"prompts": "2.4.2",
"rollup": ">= 4.44.0",
"rollup": "4.50.0",
"semver": "7.7.2",
"simple-git-hooks": "2.13.1",
"snoop": "1.0.4",
"source-map": "0.7.4",
"source-map": "0.7.6",
"svgo": "3.3.2",
"syncpack": "13.0.4",
"terser": "5.43.1",
"tmp": "0.2.5",
"tree-kill": "1.2.2",
"tsx": "4.20.3",
"typescript": "5.8.3",
"typescript-eslint": "8.39.1",
"tsx": "4.20.5",
"typescript": "5.9.2",
"typescript-eslint": "8.41.0",
"vfile": "6.0.3",
"vite": "7.1.5",
"vite-imagetools": "7.1.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/create-qwik/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"bin": "./create-qwik.cjs",
"bugs": "https://github.com/QwikDev/qwik/issues",
"devDependencies": {
"@clack/prompts": "0.7.0",
"@clack/prompts": "0.11.0",
"@types/yargs": "17.0.33",
"kleur": "4.1.5",
"yargs": "17.7.2"
Expand Down
14 changes: 7 additions & 7 deletions packages/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
"@shikijs/transformers": "3.12.2",
"@shikijs/types": "3.12.2",
"@supabase/supabase-js": "2.53.0",
"@tailwindcss/vite": "4.1.11",
"@tailwindcss/vite": "4.1.12",
"@types/leaflet": "1.9.20",
"@types/prismjs": "1.26.5",
"@types/react": "19.1.10",
"@types/react-dom": "18.3.0",
"@types/react": "19.1.12",
"@types/react-dom": "19.1.7",
"@unpic/core": "0.0.42",
"@unpic/qwik": "0.0.38",
"algoliasearch": "4.16.0",
Expand All @@ -45,14 +45,14 @@
"prismjs": "1.30.0",
"puppeteer": "22.13.1",
"qwik-image": "0.0.16",
"react": "18.3.1",
"react-dom": "18.3.1",
"react": "19.1.1",
"react-dom": "19.1.1",
"shiki": "3.12.2",
"snarkdown": "2.0.0",
"tailwindcss": "4.1.11",
"tailwindcss": "4.1.12",
"terser": "5.43.1",
"tsm": "2.3.0",
"typescript": "5.8.3",
"typescript": "5.9.2",
"undici": "*",
"valibot": "0.33.3",
"vite": "7.1.5",
Expand Down
14 changes: 0 additions & 14 deletions packages/docs/src/routes/api/qwik-optimizer/api.json
Original file line number Diff line number Diff line change
Expand Up @@ -542,20 +542,6 @@
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/optimizer/src/plugins/vite.ts",
"mdFile": "core.qwikvite.md"
},
{
"name": "QwikViteDevResponse",
"id": "qwikvitedevresponse",
"hierarchy": [
{
"name": "QwikViteDevResponse",
"id": "qwikvitedevresponse"
}
],
"kind": "Interface",
"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>",
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/optimizer/src/plugins/vite.ts",
"mdFile": "core.qwikvitedevresponse.md"
},
{
"name": "QwikVitePlugin",
"id": "qwikviteplugin",
Expand Down
57 changes: 0 additions & 57 deletions packages/docs/src/routes/api/qwik-optimizer/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2210,63 +2210,6 @@ any

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

## QwikViteDevResponse

```typescript
export interface QwikViteDevResponse
```

<table><thead><tr><th>

Property

</th><th>

Modifiers

</th><th>

Type

</th><th>

Description

</th></tr></thead>
<tbody><tr><td>

[\_qwikEnvData?](#)

</td><td>

</td><td>

Record&lt;string, any&gt;

</td><td>

_(Optional)_

</td></tr>
<tr><td>

[\_qwikRenderResolve?](#)

</td><td>

</td><td>

() =&gt; void

</td><td>

_(Optional)_

</td></tr>
</tbody></table>

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

## QwikVitePlugin

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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ This will create a new folder called `my-library` with the following structure:
│   │   │   └── counter.tsx
│   │   └── logo
│   │   └── logo.tsx
│   ├── entry.dev.tsx
│   ├── entry.ssr.tsx
│   ├── index.ts
│   └── root.tsx
Expand Down Expand Up @@ -126,7 +125,7 @@ export { Counter } from './components/counter/counter';

## Libraries are also Apps

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.
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.

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.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,6 @@ client?: {
* Default `src/components/app/app.tsx`
*/
input?: string[] | string;
/**
* Entry input for client-side only development with hot-module reloading.
* This is for Vite development only and does not use SSR.
* Default `src/entry.dev.tsx`
*/
devInput?: string;
/**
* Output directory for the client build.
* Default `dist`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ export const Parent = component$(() => {

- `ContextId`: A previously created Context must be supplied, serving as an identifier for the data being provided as the second parameter.

- `data`: You can provide any data type, such as Qwik's useSignal, useStore, arrays, or objects.
- `data`: You can provide any data type, such as Qwik's useSignal, useStore, arrays, or objects.

### Caveats

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ created_at: '2023-08-23T23:06:42Z'

# HTML attributes

Occasionally, it is necessary to add attributes to a website to enable specific functionalities, such as controlling the application's theme, determining text direction with the `dir` attribute, or setting the page language with the `lang` attribute. Typically, adding these attributes to the HTML tag is practical since it generally serves as the application's container.
Occasionally, it is necessary to add attributes to a website to enable specific functionalities, such as controlling the application's theme, determining text direction with the `dir` attribute, or setting the page language with the `lang` attribute. Typically, adding these attributes to the HTML tag is practical since it generally serves as the application's container.

To apply these attributes in Qwik router, add them to `containerAttributes` in the `src/entry.ssr.tsx` file:

Expand All @@ -28,7 +28,7 @@ export default function (opts: RenderToStreamOptions) {
}
```

In addition, the `opts.serverData` object and nested objects allow you to access information about the request, including `request headers`, `url`, `route params`, and more. Leveraging this information enables you to do the following:
In addition, the `opts.serverData` object and nested objects allow you to access information about the request, including `request headers`, `url`, `route params`, and more. Leveraging this information enables you to do the following:

```tsx
export default function (opts: RenderToStreamOptions) {
Expand Down
4 changes: 2 additions & 2 deletions packages/docs/src/routes/docs/integrations/authjs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ and create a new file named `[email protected]` with an example configuration.
> **Note on Manual Deployments with Node**
> When deploying applications manually using Node.js, particularly with frameworks like Express, the server or Node process does not inherently know if it's being served under HTTP or HTTPS.
> Unlike hosting services like Vercel, Netlify, or Cloudflare, where the ORIGIN configuration is automatically managed, manual setups require explicit specification. To ensure that your Node.js application recognizes the correct protocol and host it is being served under, set the following **environment variables**:
> Unlike hosting services like Vercel, Netlify, or Cloudflare, where the ORIGIN configuration is automatically managed, manual setups require explicit specification. To ensure that your Node.js application recognizes the correct protocol and host it is being served under, set the following **environment variables**:
> - ORIGIN: Set this to the URL of your application. For example:
> - ORIGIN: Set this to the URL of your application. For example:
> ORIGIN=https://your-app-name.example.com
> - PROTOCOL_HEADER: This is used to indicate the original protocol requested by the client. Commonly, this is specified in proxy configurations. Set this variable to:
> PROTOCOL_HEADER=X-Forwarded-Proto
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ It also adds new files inside to your project folder:

## After integrating Bootstrap

After integrating Bootstrap, you can access the /bootstrap/ route where you will find all the examples available for this integration.
After integrating Bootstrap, you can access the /bootstrap/ route where you will find all the examples available for this integration.

## Interesting info about Bootstrap

Expand Down
12 changes: 6 additions & 6 deletions packages/insights/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"version": "0.1.0",
"dependencies": {
"@auth/qwik": "0.8.0",
"@libsql/client": "^0.15.10",
"@libsql/client": "^0.15.11",
"@modular-forms/qwik": "^0.24.0",
"@typescript/analyze-trace": "^0.10.1",
"density-clustering": "^1.3.0",
Expand All @@ -18,9 +18,9 @@
"@netlify/edge-functions": "2.17.0",
"@qwik.dev/core": "workspace:*",
"@qwik.dev/router": "workspace:*",
"@tailwindcss/vite": "4.1.11",
"@tailwindcss/vite": "4.1.12",
"@types/density-clustering": "1.3.3",
"@types/node": "24.2.1",
"@types/node": "24.3.0",
"autoprefixer": "10.4.21",
"eslint": "9.33.0",
"eslint-plugin-qwik": "workspace:*",
Expand All @@ -29,9 +29,9 @@
"postcss": "8.5.6",
"prettier": "3.6.2",
"prettier-plugin-tailwindcss": "0.6.14",
"tailwindcss": "4.1.11",
"typescript": "5.8.3",
"typescript-eslint": "8.39.1",
"tailwindcss": "4.1.12",
"typescript": "5.9.2",
"typescript-eslint": "8.41.0",
"undici": "*",
"vite": "7.1.5",
"vite-tsconfig-paths": "5.1.4",
Expand Down
10 changes: 5 additions & 5 deletions packages/qwik-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
"bugs": "https://github.com/QwikDev/qwik/issues",
"devDependencies": {
"@qwik.dev/core": "workspace:*",
"@types/react": "19.1.10",
"@types/react-dom": "18.3.0",
"react": "18.3.1",
"react-dom": "18.3.1",
"typescript": "5.8.3",
"@types/react": "19.1.12",
"@types/react-dom": "19.1.7",
"react": "19.1.1",
"react-dom": "19.1.1",
"typescript": "5.9.2",
"vite": "7.1.5"
},
"engines": {
Expand Down
5 changes: 0 additions & 5 deletions packages/qwik-router/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,6 @@ type SerializationStrategy = import('@qwik.dev/core/internal').SerializationStra
declare var qcAsyncRequestStore: AsyncStore | undefined;
declare var _qwikActionsMap: Map<string, ActionInternal> | undefined;

/** @deprecated Will be removed in v3 */
declare var __qwikCityNew: boolean | undefined;

declare var __qwikRouterNew: boolean | undefined;

type ExperimentalFeatures = import('@qwik.dev/core/optimizer').ExperimentalFeatures;

declare var __EXPERIMENTAL__: {
Expand Down
Loading
Loading