Skip to content

chore: update to latest Qwik v2#136

Open
maiieul wants to merge 5 commits into
open-circle:mainfrom
maiieul:update-latest-v2
Open

chore: update to latest Qwik v2#136
maiieul wants to merge 5 commits into
open-circle:mainfrom
maiieul:update-latest-v2

Conversation

@maiieul

@maiieul maiieul commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary by cubic

Upgrade Qwik to v2.0.0-beta.37 and migrate to the new Signal API. Fix the double-render in pkg.pr.new preview by removing the extra router config.

  • Dependencies

    • Update @qwik.dev/core, @qwik.dev/router, and eslint-plugin-qwik to 2.0.0-beta.37 across the repo.
    • Bump tooling: vite to 7.3.5 and vue-tsc to ~3.1.0.
    • Remove pnpm.patchedDependencies for @qwik.dev/router.
  • Migration

    • Replace ReadonlySignal<T> with Readonly<Signal<T>> across hooks, types, components, and docs.
    • Update preview to export default createQwikRouter({ render }); remove qwikRouterConfig.

Written for commit dacb579. Summary will update on new commits.

Review in cubic

Copilot AI review requested due to automatic review settings June 11, 2026 05:13
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jun 11, 2026
@vercel

vercel Bot commented Jun 11, 2026

Copy link
Copy Markdown

@maiieul is attempting to deploy a commit to the Open Circle Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The PR upgrades @qwik.dev/core from 2.0.0-beta.5 (or beta.9 in website) to 2.0.0-beta.37 and vite to 7.3.5 across all workspaces. To align with the new Qwik version, the ReadonlySignal type is replaced with Readonly<Signal<T>> throughout: in FormStore, FieldStore, and FieldArrayStore interfaces; in the usePathSignal hook return type; and in all playground UI components (Checkbox, FileInput, InputErrors, RadioGroup, Select, Slider, TextInput). Documentation code samples are updated to match. The pnpm-workspace.yaml patch entry for the old @qwik.dev/router@2.0.0-beta.9 is removed, and the playground preview entry drops the qwikRouterConfig option.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: update to latest Qwik v2' clearly and concisely summarizes the main objective of the PR: upgrading Qwik to v2 beta.37 with associated dependency and API migrations.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The pull request description clearly relates to the changeset, detailing Qwik dependency upgrades, Signal API migration, and preview fixes.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Updates the Qwik integration and examples to align with newer Qwik signal typing/behavior and updated tooling dependencies.

Changes:

  • Replaced ReadonlySignal<T> usages with Readonly<Signal<T>> across docs, playground components, and framework Qwik types.
  • Updated Qwik/Vite-related devDependencies (including switching some Qwik deps to pkg.pr.new URLs) and removed a pnpm patched dependency entry.
  • Adjusted Qwik router preview entry and tweaked useResolvedQrl to avoid tracked reads.

Reviewed changes

Copilot reviewed 18 out of 19 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
website/src/routes/(docs)/qwik/guides/(main-concepts)/input-components/index.mdx Updates guide sample types/imports to new Signal typing pattern.
website/package.json Updates Qwik deps to pkg.pr.new URLs, bumps eslint-plugin-qwik and Vite.
playgrounds/qwik/src/entry.preview.tsx Removes router config import/parameter from preview adapter.
playgrounds/qwik/src/components/TextInput.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/src/components/Slider.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/src/components/Select.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/src/components/RadioGroup.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/src/components/InputErrors.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/src/components/FileInput.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/src/components/Checkbox.tsx Migrates component prop types from ReadonlySignal to Readonly<Signal>.
playgrounds/qwik/package.json Updates Qwik deps to pkg.pr.new URLs, bumps eslint-plugin-qwik and Vite.
packages/core/package.json Updates @qwik.dev/core to pkg.pr.new URL.
package.json Removes pnpm patchedDependencies block for @qwik.dev/router.
frameworks/qwik/src/types/form.ts Migrates exported form store signal fields to Readonly<Signal<...>>.
frameworks/qwik/src/types/field.ts Migrates exported field store signal fields to Readonly<Signal<...>>.
frameworks/qwik/src/hooks/useResolvedQrl/useResolvedQrl.ts Uses untrack to avoid tracked reads when resolving QRLs.
frameworks/qwik/src/hooks/usePathSignal/usePathSignal.ts Returns Readonly<Signal<T>> instead of ReadonlySignal<T>.
frameworks/qwik/package.json Updates @qwik.dev/core to pkg.pr.new URL, bumps eslint-plugin-qwik and Vite.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread frameworks/qwik/src/hooks/useResolvedQrl/useResolvedQrl.ts Outdated
Comment thread frameworks/qwik/src/hooks/useResolvedQrl/useResolvedQrl.ts Outdated
Comment thread playgrounds/qwik/src/entry.preview.tsx
Comment thread playgrounds/qwik/src/entry.preview.tsx
Comment thread playgrounds/qwik/src/components/TextInput.tsx Outdated
Comment thread website/package.json Outdated
Comment thread website/package.json Outdated
Comment thread website/package.json Outdated
Comment thread playgrounds/qwik/package.json
@maiieul maiieul force-pushed the update-latest-v2 branch from ed7441a to ff6f3d9 Compare June 11, 2026 05:18

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
playgrounds/qwik/src/components/InputErrors.tsx (1)

5-8: ⚡ Quick win

Use interface for InputErrorProps object shape.

This props object is declared with type, but the TypeScript guideline here requires interface for object shapes.

Suggested change
-type InputErrorProps = {
+interface InputErrorProps {
   name: string;
   errors: Readonly<Signal<[string, ...string[]] | null>>;
-};
+}

As per coding guidelines, "Prefer interface over type for defining object shapes in TypeScript".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@playgrounds/qwik/src/components/InputErrors.tsx` around lines 5 - 8, Change
the props declaration from a type alias to an interface: replace the type
InputErrorProps definition with an interface InputErrorProps that declares the
same members (name: string; errors: Readonly<Signal<[string, ...string[]] |
null>>;), ensuring any usages of InputErrorProps (e.g., component props or
function signatures) remain unchanged.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@frameworks/qwik/package.json`:
- Line 50: Multiple workspace packages are pinned to different Qwik commits;
unify them by choosing one canonical commit SHA (e.g., the one used in
website/package.json or the desired release) and update all occurrences of
`@qwik.dev/core` and `@qwik.dev/router` in frameworks/qwik/package.json,
website/package.json (and any other package manifests) to reference that same
commit tag, then regenerate and commit an updated pnpm-lock.yaml by running pnpm
install so the lockfile matches the manifests; ensure you update the dependency
strings that reference the pkg.pr.new URLs (the `@qwik.dev/core` and
`@qwik.dev/router` entries) and verify the workspace builds.

In `@playgrounds/qwik/src/entry.preview.tsx`:
- Around line 14-15: The top-of-file comment "make sure qwikRouterConfig is
imported before entry" is stale; remove or update it to reflect current imports
in entry.preview.tsx (there is only the render import from './entry.ssr'). Edit
the file to delete the obsolete comment or replace it with a current, accurate
note about import ordering if needed, ensuring references to qwikRouterConfig
are removed and only relevant context for import render is kept.
- Line 20: The pure factory call createQwikRouter({ render }) needs the
tree-shaking purity annotation; add the comment // `@__NO_SIDE_EFFECTS__`
immediately on the line above the createQwikRouter invocation (the default
export) so the pure factory call createQwikRouter is annotated for tree-shaking
optimization.

In
`@website/src/routes/`(docs)/qwik/guides/(main-concepts)/input-components/index.mdx:
- Around line 69-77: The props interface TextInputProps now types input and
errors as Readonly<Signal<...>> but the usage snippets still pass
field.input.value / field.errors.value; update the example(s) that consume
TextInputProps (references: TextInputProps, input, errors, and
FieldElementProps) to pass the signal objects themselves (e.g., field.input,
field.errors) instead of their .value, so the example compiles; apply the same
change to the other occurrence noted around lines 145-153.

---

Nitpick comments:
In `@playgrounds/qwik/src/components/InputErrors.tsx`:
- Around line 5-8: Change the props declaration from a type alias to an
interface: replace the type InputErrorProps definition with an interface
InputErrorProps that declares the same members (name: string; errors:
Readonly<Signal<[string, ...string[]] | null>>;), ensuring any usages of
InputErrorProps (e.g., component props or function signatures) remain unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8e4b5f13-eca2-473d-bc2e-b85511088c81

📥 Commits

Reviewing files that changed from the base of the PR and between be7c39a and ed7441a.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (18)
  • frameworks/qwik/package.json
  • frameworks/qwik/src/hooks/usePathSignal/usePathSignal.ts
  • frameworks/qwik/src/hooks/useResolvedQrl/useResolvedQrl.ts
  • frameworks/qwik/src/types/field.ts
  • frameworks/qwik/src/types/form.ts
  • package.json
  • packages/core/package.json
  • playgrounds/qwik/package.json
  • playgrounds/qwik/src/components/Checkbox.tsx
  • playgrounds/qwik/src/components/FileInput.tsx
  • playgrounds/qwik/src/components/InputErrors.tsx
  • playgrounds/qwik/src/components/RadioGroup.tsx
  • playgrounds/qwik/src/components/Select.tsx
  • playgrounds/qwik/src/components/Slider.tsx
  • playgrounds/qwik/src/components/TextInput.tsx
  • playgrounds/qwik/src/entry.preview.tsx
  • website/package.json
  • website/src/routes/(docs)/qwik/guides/(main-concepts)/input-components/index.mdx
💤 Files with no reviewable changes (1)
  • package.json

Comment thread frameworks/qwik/package.json Outdated
Comment thread playgrounds/qwik/src/entry.preview.tsx Outdated
Comment thread playgrounds/qwik/src/entry.preview.tsx
@maiieul maiieul force-pushed the update-latest-v2 branch from ff6f3d9 to 37c6eee Compare June 11, 2026 05:21

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found and verified against the latest diff

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Re-trigger cubic

Comment thread website/package.json Outdated
Comment thread packages/core/package.json Outdated
Comment thread playgrounds/qwik/package.json
@maiieul maiieul force-pushed the update-latest-v2 branch 3 times, most recently from f7270e9 to 3e3f563 Compare June 11, 2026 05:31
@maiieul maiieul force-pushed the update-latest-v2 branch from 9ebb679 to 9d92871 Compare June 17, 2026 14:19

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pnpm-workspace.yaml`:
- Line 52: The vite@7 override in pnpm-workspace.yaml is pinned to version
7.3.2, which is downgrading the intended upgrade to 7.3.5 specified in the
package manifests. Update the version value for the vite@7 override entry from
7.3.2 to 7.3.5 to align with the manifest bumps and allow packages like website
and frameworks/qwik to use the newer version.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a505646b-58ed-454f-84bd-4ac624265c34

📥 Commits

Reviewing files that changed from the base of the PR and between f7270e9 and 9d92871.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (17)
  • frameworks/qwik/package.json
  • frameworks/qwik/src/hooks/usePathSignal/usePathSignal.ts
  • frameworks/qwik/src/types/field.ts
  • frameworks/qwik/src/types/form.ts
  • packages/core/package.json
  • playgrounds/qwik/package.json
  • playgrounds/qwik/src/components/Checkbox.tsx
  • playgrounds/qwik/src/components/FileInput.tsx
  • playgrounds/qwik/src/components/InputErrors.tsx
  • playgrounds/qwik/src/components/RadioGroup.tsx
  • playgrounds/qwik/src/components/Select.tsx
  • playgrounds/qwik/src/components/Slider.tsx
  • playgrounds/qwik/src/components/TextInput.tsx
  • playgrounds/qwik/src/entry.preview.tsx
  • pnpm-workspace.yaml
  • website/package.json
  • website/src/routes/(docs)/qwik/guides/(main-concepts)/input-components/index.mdx
✅ Files skipped from review due to trivial changes (1)
  • playgrounds/qwik/src/components/Slider.tsx
🚧 Files skipped from review as they are similar to previous changes (13)
  • frameworks/qwik/package.json
  • playgrounds/qwik/src/components/RadioGroup.tsx
  • packages/core/package.json
  • frameworks/qwik/src/hooks/usePathSignal/usePathSignal.ts
  • playgrounds/qwik/src/components/FileInput.tsx
  • website/src/routes/(docs)/qwik/guides/(main-concepts)/input-components/index.mdx
  • playgrounds/qwik/src/components/TextInput.tsx
  • playgrounds/qwik/src/entry.preview.tsx
  • frameworks/qwik/src/types/field.ts
  • playgrounds/qwik/src/components/Checkbox.tsx
  • frameworks/qwik/src/types/form.ts
  • playgrounds/qwik/src/components/Select.tsx
  • playgrounds/qwik/src/components/InputErrors.tsx

Comment thread pnpm-workspace.yaml
@@ -50,5 +50,3 @@ overrides:
'undici@7': '7.24.0'
'vite@6': '6.4.2'
'vite@7': '7.3.2'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== package manifests requesting vite =="
rg -n '"vite"\s*:\s*' --glob '**/package.json'

echo
echo "== workspace overrides for vite =="
rg -n "vite@6|vite@7" pnpm-workspace.yaml

echo
echo "== lockfile resolved vite spec/version excerpts =="
rg -n "specifier:\s*7\.3|version:\s*7\.3" pnpm-lock.yaml -C1 | head -n 120

Repository: open-circle/formisch

Length of output: 2728


vite@7 override is downgrading the intended upgrade target.

Line 52 pins vite@7 to 7.3.2, which overrides the 7.3.5 manifest bumps and forces packages requesting 7.3.5 (website and frameworks/qwik) to use an older version instead.

Suggested fix
-  'vite@7': '7.3.2'
+  'vite@7': '7.3.5'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'vite@7': '7.3.2'
'vite@7': '7.3.5'
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pnpm-workspace.yaml` at line 52, The vite@7 override in pnpm-workspace.yaml
is pinned to version 7.3.2, which is downgrading the intended upgrade to 7.3.5
specified in the package manifests. Update the version value for the vite@7
override entry from 7.3.2 to 7.3.5 to align with the manifest bumps and allow
packages like website and frameworks/qwik to use the newer version.

@fabian-hiller

Copy link
Copy Markdown
Member

There stills seems to be the bug where pages render the same content multiple times when navigating:

CleanShot 2026-06-17 at 21 43 07@2x

@fabian-hiller fabian-hiller self-assigned this Jun 18, 2026
@fabian-hiller fabian-hiller added the priority This has priority label Jun 18, 2026
@fabian-hiller

Copy link
Copy Markdown
Member

beta.37 was published 2 days before the upstream fix QwikDev/qwik#8715 merged, so it ships without it. Verified with Playwright on the Qwik playground: first SPA navigation to a form route renders every field twice (correct on revisit / hard load).

It's a Qwik core projection-diffing bug (triggered by our useResolvedQrl throwing a promise), not something we can fix on our side. The fix is already merged upstream, so let's hold this until beta.38 and bump to that instead.

@maiieul

maiieul commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

Ah my bad I thought it was in 😅. Yeah we can wait for beta 38.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority This has priority size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants