Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: resumable #2780

Merged
merged 5 commits into from
Jun 30, 2023
Merged

docs: resumable #2780

merged 5 commits into from
Jun 30, 2023

Conversation

aboudard
Copy link
Contributor

@aboudard aboudard commented Feb 1, 2023

What is it?

  • Feature / enhancement
  • Bug
  • Docs / tests

Description

Notes about the concepts/resumable docs page. Few links added but mostly questions for clarification.

@stackblitz
Copy link

stackblitz bot commented Feb 1, 2023

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@@ -15,8 +15,10 @@ When an SSR/SSG application boots up on a client, it requires that the framework
1. Listeners - locate event listeners and install them on the DOM nodes to make the application interactive.
2. Component tree - build up an internal data structure representing the application component tree.
3. Application state - restore the application state.
[//]: # (What state are we talking about ? Is there an application-wise state in Qwik ?)
Copy link
Collaborator

Choose a reason for hiding this comment

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

this means that the app ran on the server and built up state - like list of products from the server etc... if it was saved in a store or a signal on the server it is the "app state".. so it gets restored on the client


Collectively, this is known as hydration. All current generations of frameworks require this step to make the application interactive.
[//]: # (What kind of framework are talking about ? It looks like we are talking about SSR/SSG frameworks.)
Copy link
Collaborator

Choose a reason for hiding this comment

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

yes

I would modify it to say - currently, all SSR frameworks require this step...

@@ -27,13 +29,15 @@ Collectively, this is known as hydration. All current generations of frameworks

Qwik is different because it does not require hydration to resume an application on the client. Not requiring hydration is what makes the Qwik application startup instantaneous.

All other frameworks' hydration **replays** all the application logic in the client. Qwik instead pauses execution in the server, and resumes execution in the client.
All other frameworks' hydration **replays** all the application logic in the client. Qwik instead pauses execution in the server , and resumes execution in the client.
[//]: # (The very consept of pausing the application is huge, a schema or a quick explaination could help making a mental model.)
Copy link
Collaborator

Choose a reason for hiding this comment

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

agree

I have something I prepared for the course
I can add it after I'm done with the first version of the course


## Introducing Resumability

Resumability is about pausing execution in the server and resuming execution in the client without having to replay and download all of the application logic.

A good mental model is that Qwik applications at any point in their lifecycle can be serialized and moved to a different VM instance (server to browser). There, the application simply resumes where the serialization stopped. No hydration is required. This is why we say that Qwik applications don't hydrate; they resume.
[//]: # (This is confusing, why speak about another VM, which makes think about some server instance, when right after it says (server to browser). Can we not simply say that apps are anyway serialized and sent to the browser ? Also why would serialization stop ?)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Yes... it should come as a metaphor at the beginning, saying the "pausing and resuming are just like in VMs, where you pause the VM and send it to another computer.. with Qwik you pause the application on the server and send it inside the smart HTML file to the client, where it resumes"

@@ -48,6 +52,7 @@ Existing frameworks solve the event listener by downloading the components and e
3. Requires the event handler code to be downloaded eagerly (to be attached).

The above approach does not scale. As the application becomes more complicated, the amount of code needed to download eagerly and execute grows proportionally with the size of the application. This negatively impacts the application startup performance and hence the user experience.
[//]: # (This is why frameworks introduced differents levels of lazy loading chunks of application js with different kind of granularity, wether being SPA or SSR.)
Copy link
Collaborator

Choose a reason for hiding this comment

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

yes, but this is a manual optimization devs need to do.. plus it is limited to routes and not closures...

2. The HTML contains a URL to the chunk and symbol name. The attribute tells Qwikloader which code chunk to download and which symbol to retrieve from the chunk.
[//]: # (by looking at the compiled code, symbol likely to be a function, is "retrieve" the proper term ?)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Well, it need to first get a hold of it before it can run it

3. Finally, to make all of the above possible, Qwik's event processing implementation understands asynchronicity which allows insertion of asynchronous lazy loading.
[//]: # (I can’t really figure the meaning of this and what is synchronous lazy-loading. What does it mean for Qwik to "understand asynchronicity" ?)
Copy link
Collaborator

@shairez shairez Feb 2, 2023

Choose a reason for hiding this comment

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

Yes, all lazy loading is async, so this doesn't make sense, I agree

I would change it to:

"Finally, to make all of the above possible, Qwik's event processing implementation understands asynchronicity which allows it to lazy load closuers, automatically."


### Component Trees

Frameworks work with component trees. To that end, frameworks need a complete understanding of the component trees to know which components need to be rerendered and when. If you look into the existing framework SSR/SSG output, the component boundary information has been destroyed. There is no way of knowing where component boundaries are by looking at the resulting HTML. To recreate this information, frameworks re-execute the component templates and memoize the component boundary location. Re-execution is what hydration is. Hydration is expensive as it requires both the download of component templates and their execution.

Qwik collects component boundary information as part of the SSR/SSG and then serializes that information into HTML. The result is that Qwik can:
Qwik collects [component boundary information](https://qwik.builder.io/docs/cheat/serialization/) as part of the SSR/SSG and then serializes that information into HTML. The result is that Qwik can:
[//]: # (Can we explain that part with some code example to demonstrate ? Are we talking about the $ sign when mentioning boundaries ?)
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think diagrams are better than code here

@@ -91,6 +99,7 @@ Limitations of JSON which Qwik solves:
- `Map` and `Set` instances

Limitations of JSON that Qwik does not solve:
[//]: # (What does it mean ? Some parts of an app would not be serialized / resumed ? Is there a plan B ?)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Well, if it can't be serialized, it should be only run on the client first, ,so my guess is useClientEffect$ should be used in those occasions

@@ -101,6 +110,7 @@ Limitations of JSON that Qwik does not solve:
The resumability property of the framework must extend to resumability of the application as well. This means that the framework must provide mechanisms for the developer to express Components and Entities of the applications in a way which can be serialized and then resumed (without re-bootstrapping). This necessitates that applications are written with resumability constraints in mind. It is simply not possible for developers to continue to write applications in a heap-centric way and expect that a better framework can somehow make up for this sub-optimal approach.

Developers must write their applications in a DOM-centric way. This will require a change of behavior and retooling of web developers' skills. Frameworks need to provide guidance and APIs to make it easy for developers to write the applications in this way.
[//]: # (Can we explain the difference between heap-centric and DOM-centric ? Is this whole paragraph helping me to develop my application ? If I use Qwik, am I not just wrinting my application the "right" way ?)
Copy link
Collaborator

Choose a reason for hiding this comment

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

I agree

@manucorporat or @mhevery - mind helping out here?

@zanettin zanettin added COMP: docs Improvements or additions to documentation docs-task-force labels Feb 15, 2023
@zanettin zanettin changed the title Docs resumable docs: resumeability Feb 22, 2023
@zanettin zanettin changed the title docs: resumeability docs: resumable Feb 22, 2023
@netlify
Copy link

netlify bot commented Jun 30, 2023

Deploy Preview for qwik-insights canceled.

Name Link
🔨 Latest commit 05af2b2
🔍 Latest deploy log https://app.netlify.com/sites/qwik-insights/deploys/649f0bf7b296a8000816710a

@mhevery mhevery enabled auto-merge (squash) June 30, 2023 17:08
@mhevery mhevery merged commit 6ee578c into QwikDev:main Jun 30, 2023
24 checks passed
kodiakhq bot pushed a commit to ascorbic/unpic-img that referenced this pull request Jul 9, 2023
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@builder.io/qwik](https://qwik.builder.io/) ([source](https://togithub.com/BuilderIO/qwik)) | [`1.1.5` -> `1.2.6`](https://renovatebot.com/diffs/npm/@builder.io%2fqwik/1.1.5/1.2.6) | [![age](https://badges.renovateapi.com/packages/npm/@builder.io%2fqwik/1.2.6/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@builder.io%2fqwik/1.2.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@builder.io%2fqwik/1.2.6/compatibility-slim/1.1.5)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@builder.io%2fqwik/1.2.6/confidence-slim/1.1.5)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>BuilderIO/qwik (@&#8203;builder.io/qwik)</summary>

### [`v1.2.6`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.6)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.2.5...v1.2.6)

##### What's Changed

-   feat(server-functions): routeAction$ validation based on RequestEvent by [@&#8203;tzdesign](https://togithub.com/tzdesign) in [QwikDev/qwik#4727
-   fix: visual cms starter by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4731
-   feat: add jokes by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4734
-   docs: fix example in Best Practices Guide by [@&#8203;octoper](https://togithub.com/octoper) in [QwikDev/qwik#4733
-   fix: force spa-init into client symbols in dev builds by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4738
-   fix: cli accept empty folder by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4740
-   fix: configure jsx import by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4741
-   chore: update deps by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4742
-   fix: case for images by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4744
-   1.2.6 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4743

##### New Contributors

-   [@&#8203;octoper](https://togithub.com/octoper) made their first contribution in [QwikDev/qwik#4733

**Full Changelog**: QwikDev/qwik@v1.2.5...v1.2.6

### [`v1.2.5`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.5)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.2.4...v1.2.5)

#### What's Changed

-   Insights by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4707
-   docs(cart): remove padding-left from cart overlay by [@&#8203;gioboa](https://togithub.com/gioboa) in [QwikDev/qwik#4705
-   docs: correct the capture index for qrl by [@&#8203;wtlin1228](https://togithub.com/wtlin1228) in [QwikDev/qwik#4706
-   fix: add .pnpm-store to .prettierignore by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4710
-   docs: add route handler menu + ecpsystem case studies  by [@&#8203;hamatoyogi](https://togithub.com/hamatoyogi) in [QwikDev/qwik#4713
-   fix(aws): bundle all without express by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4691
-   fix: multiple cookies in azure by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4716
-   fix: vite csr mode by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4719
-   fix: clear attribute when undefined by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4721
-   docs: fixed typo in labs index.mdx by [@&#8203;Craiqser](https://togithub.com/Craiqser) in [QwikDev/qwik#4573
-   fix: routes plugins with tsx by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4726
-   fix: update pandacss dep by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4725
-   1.2.5 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4729
-   fix(vite): \n escaping in  vite plugin by [@&#8203;FlatMapIO](https://togithub.com/FlatMapIO) in [QwikDev/qwik#4730

**Full Changelog**: QwikDev/qwik@v1.2.4...v1.2.5

### [`v1.2.4`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.4)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.2.3...v1.2.4)

##### What's Changed

-   fix(eslint): useMethod rule for regular functions by [@&#8203;shairez](https://togithub.com/shairez) in [QwikDev/qwik#4666
-   fix: typo by [@&#8203;yaikohi](https://togithub.com/yaikohi) in [QwikDev/qwik#4655
-   fix: the property parameter can be symbol by [@&#8203;wtlin1228](https://togithub.com/wtlin1228) in [QwikDev/qwik#4668
-   docs css: fix shop cart floating button by [@&#8203;gioboa](https://togithub.com/gioboa) in [QwikDev/qwik#4669
-   shop: added colors to icons and small changes by [@&#8203;the-r3aper7](https://togithub.com/the-r3aper7) in [QwikDev/qwik#4670
-   doc: optional font by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4672
-   fix: image tools improvements by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4671
-   perf: preload css fonts by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4673
-   chore: update deps by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4674
-   fix(optimizer): ssr transform for rollup by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4675
-   fix: add loc to symbol manifest by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4676
-   fix: add crossorigin attribute by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4677
-   docs(request-handling): cookie has method by [@&#8203;tzdesign](https://togithub.com/tzdesign) in [QwikDev/qwik#4632
-   feat(labs): add clustering to symbols by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4648
-   fix: inlined signals in library mode by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4684
-   fix: always try relative path for mapped hooks by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4686
-   fix: configurable getOrigin for node servers by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4687
-   fix: staticFile() api in node middleware by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4693
-   fix(entry.deno.ts): fix wrong parameters by [@&#8203;arkhvoid](https://togithub.com/arkhvoid) in [QwikDev/qwik#4696
-   fix: migrate to modern Deno Server by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4697
-   fix: add vanilla node server by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4699
-   1.2.4 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4690
-   docs(mdx): fixed path to counter component by [@&#8203;YannickFricke](https://togithub.com/YannickFricke) in [QwikDev/qwik#4680
-   chore: add aws badge by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4703
-   chore: fix \n is pure text in console by [@&#8203;minsoo-web](https://togithub.com/minsoo-web) in [QwikDev/qwik#4700
-   fix: PROTOCOL and HOST header are case insensitive by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4704

##### New Contributors

-   [@&#8203;yaikohi](https://togithub.com/yaikohi) made their first contribution in [QwikDev/qwik#4655
-   [@&#8203;tzdesign](https://togithub.com/tzdesign) made their first contribution in [QwikDev/qwik#4632
-   [@&#8203;arkhvoid](https://togithub.com/arkhvoid) made their first contribution in [QwikDev/qwik#4696
-   [@&#8203;YannickFricke](https://togithub.com/YannickFricke) made their first contribution in [QwikDev/qwik#4680
-   [@&#8203;minsoo-web](https://togithub.com/minsoo-web) made their first contribution in [QwikDev/qwik#4700

**Full Changelog**: QwikDev/qwik@v1.2.3...v1.2.4

### [`v1.2.3`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.3)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.2.2...v1.2.3)

#### What's Changed

-   docs(utilities): adding documentation for the `new` cli command  by [@&#8203;thejackshelton](https://togithub.com/thejackshelton) in [QwikDev/qwik#4649
-   docs: aws lambda documentation by [@&#8203;leifermendez](https://togithub.com/leifermendez) in [QwikDev/qwik#4642
-   fix: server$ error when request is closed by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4653
-   docs: resumable by [@&#8203;aboudard](https://togithub.com/aboudard) in [QwikDev/qwik#2780
-   fix: add dependencies to pkg by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4656
-   fix: navigation crash with plugins by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4657
-   fix: unit test jsx image by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4660
-   docs: ecosystem improvements by [@&#8203;the-r3aper7](https://togithub.com/the-r3aper7) in [QwikDev/qwik#4659
-   fix(slot): rendering variable slot projection by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4661
-   fix: svg rendering + test by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4663
-   1.2.3 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4662

#### New Contributors

-   [@&#8203;aboudard](https://togithub.com/aboudard) made their first contribution in [QwikDev/qwik#2780

**Full Changelog**: QwikDev/qwik@v1.2.2...v1.2.3

### [`v1.2.2`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.2)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.2.1...v1.2.2)

#### What's Changed

-   fix: csstypes dep by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4644
-   feat(qwik): encode the manifest hash into the container. by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4647

**Full Changelog**: QwikDev/qwik@v1.2.1...v1.2.2

### [`v1.2.1`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.1)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.2.0...v1.2.1)

#### What's Changed

-   docs header: add shop link by [@&#8203;gioboa](https://togithub.com/gioboa) in [QwikDev/qwik#4641
-   fix: tailwind integration by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4640

**Full Changelog**: QwikDev/qwik@v1.2.0...v1.2.1

### [`v1.2.0`](https://togithub.com/BuilderIO/qwik/releases/tag/v1.2.0)

[Compare Source](https://togithub.com/BuilderIO/qwik/compare/v1.1.5...v1.2.0)

##### What's Changed

-   docs: fix link to `speculative-module-fetching` by [@&#8203;Craiqser](https://togithub.com/Craiqser) in [QwikDev/qwik#4421
-   fix: use levenshtein distance to provide even better 404 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4389
-   feat: serialize support for Set and Map by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4375
-   \[✨] Critical DX/UX improvement to SPA navigation in Qwik City by [@&#8203;billykwok](https://togithub.com/billykwok) in [QwikDev/qwik#3244
-   docs: add CodeSandbox demo to Modular Forms guide by [@&#8203;fabian-hiller](https://togithub.com/fabian-hiller) in [QwikDev/qwik#4095
-   docs: fix link to `Bundle Optimization` by [@&#8203;Craiqser](https://togithub.com/Craiqser) in [QwikDev/qwik#4418
-   feat: image performance dev tools by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4424
-   fix: slow test by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4431
-   docs: qwiksand-box by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4429
-   fix: image-size dep by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4435
-   docs: fix example to match by [@&#8203;hamatoyogi](https://togithub.com/hamatoyogi) in [QwikDev/qwik#4439
-   chore: remove unused starter file by [@&#8203;adamdbradley](https://togithub.com/adamdbradley) in [QwikDev/qwik#4446
-   fix: set qwik builder counter initial value by [@&#8203;adamdbradley](https://togithub.com/adamdbradley) in [QwikDev/qwik#4449
-   fix: cli background install by [@&#8203;adamdbradley](https://togithub.com/adamdbradley) in [QwikDev/qwik#4450
-   feat: client info API by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4433
-   fix: jsx rendering order by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4458
-   Reorganize .gitignore by [@&#8203;szepeviktor](https://togithub.com/szepeviktor) in [QwikDev/qwik#4456
-   docs: Routing - Change getLocation() to useLocation() by [@&#8203;chsanch](https://togithub.com/chsanch) in [QwikDev/qwik#4454
-   fix: visible task execution after removal by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4459
-   Fix typo in MDX example code by [@&#8203;erikras](https://togithub.com/erikras) in [QwikDev/qwik#4457
-   feat(adapter): aws starter adapter by [@&#8203;leifermendez](https://togithub.com/leifermendez) in [QwikDev/qwik#4390
-   fix(use-on.ts): fixed useOn methods to pass correct eventName to \_useOn by [@&#8203;OrenSayag](https://togithub.com/OrenSayag) in [QwikDev/qwik#4453
-   docs: routeLoader adjustment by [@&#8203;hamatoyogi](https://togithub.com/hamatoyogi) in [QwikDev/qwik#4462
-   fix: root gitignore file by [@&#8203;zanettin](https://togithub.com/zanettin) in [QwikDev/qwik#4460
-   fix: add missing nonce to popstate script by [@&#8203;DustinJSilk](https://togithub.com/DustinJSilk) in [QwikDev/qwik#4468
-   feat: CLI option `new` by [@&#8203;zanettin](https://togithub.com/zanettin) in [QwikDev/qwik#4273
-   Include a woman in the "community" emoji by [@&#8203;erikras](https://togithub.com/erikras) in [QwikDev/qwik#4471
-   docs: Update the middleware / endpoint documentation by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4442
-   fix: prefetch urls with different search queries by [@&#8203;DustinJSilk](https://togithub.com/DustinJSilk) in [QwikDev/qwik#4474
-   refactor: improve DX of "qwik new" by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4472
-   fix: bundling for testing by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4475
-   feat: image vite transform by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4479
-   refactor: containerState for appendHeadStyle by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4478
-   fix: implicitly end middleware chain on response by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4441
-   refactor: visible tasks can run in parallel by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4477
-   Update pages.json by [@&#8203;hexa-it](https://togithub.com/hexa-it) in [QwikDev/qwik#4473
-   feat: update starter dev-tools by [@&#8203;adamdbradley](https://togithub.com/adamdbradley) in [QwikDev/qwik#4483
-   perf: optimizer knows non-variadic components by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4484
-   Add new documentation for deprecated features. by [@&#8203;nsdonato](https://togithub.com/nsdonato) in [QwikDev/qwik#4476
-   feat: add no-unnecessary-condition eslint rule by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4485
-   fix(parse-pathname): path segment encoding by [@&#8203;Varixo](https://togithub.com/Varixo) in [QwikDev/qwik#4486
-   docs(\*): update contribution docs by [@&#8203;Wimpert](https://togithub.com/Wimpert) in [QwikDev/qwik#4490
-   Allow replace state when navigating by [@&#8203;Wimpert](https://togithub.com/Wimpert) in [QwikDev/qwik#4488
-   fix: test bundle mode by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4491
-   fix: 'Numberish' type used for width/height didn't allow % by [@&#8203;KenAKAFrosty](https://togithub.com/KenAKAFrosty) in [QwikDev/qwik#4434
-   fix: missing navigation update to static page by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4493
-   🦄 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4495
-   feat: add image to starter by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4497
-   fix: $localize optimizer bug by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4498
-   docs(adding content security policy to the advanced topics) by [@&#8203;the-zimmermann](https://togithub.com/the-zimmermann) in [QwikDev/qwik#4440
-   fix: clientConn types by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4501
-   Pr docs qwik city by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4494
-   chore: fix dev release by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4511
-   refactor: simplify new templates by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4512
-   fix: cli new interactive by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4516
-   feat: svg optimization with esm by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4526
-   fix: spa redirects from non-pages by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4518
-   docs: fix typos in Overview and State files. by [@&#8203;eecopa](https://togithub.com/eecopa) in [QwikDev/qwik#4524
-   docs: fixed a typo in image link by [@&#8203;avanderpluijm](https://togithub.com/avanderpluijm) in [QwikDev/qwik#4514
-   docs: fixed small typos in qwik-city documentation. by [@&#8203;VinuB-Dev](https://togithub.com/VinuB-Dev) in [QwikDev/qwik#4522
-   feat: pandacss integration by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4515
-   docs: added custom icons  by [@&#8203;LoganAffleck](https://togithub.com/LoganAffleck) in [QwikDev/qwik#4513
-   Update app.tsx in runtime-less example by [@&#8203;primeagen-rustaceans](https://togithub.com/primeagen-rustaceans) in [QwikDev/qwik#4467
-   docs: fix typos by [@&#8203;enesflow](https://togithub.com/enesflow) in [QwikDev/qwik#4500
-   docs: move think-qwik page to concepts route by [@&#8203;moinulmoin](https://togithub.com/moinulmoin) in [QwikDev/qwik#4499
-   feat: frame-perfect and state-backed durable SPA scroll restoration by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4509
-   docs: fixed typos in comments and docs by [@&#8203;ehrencrona](https://togithub.com/ehrencrona) in [QwikDev/qwik#4430
-   doc: add redirect to new think-qwik docs by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4533
-   fix: missing component in layout by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4535
-   fix(router): use encodeURI instead by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4534
-   fix: click to component for svg by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4537
-   fix: regression when navigating to / by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4538
-   fix: save scrollState on visibilitychange by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4536
-   feat: automatically set qwik icons by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4539
-   fix: renderToString mode is always ignored and returns an empty page by [@&#8203;ncharalampidis](https://togithub.com/ncharalampidis) in [QwikDev/qwik#4528
-   fix: image?jsx strip export default by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4541
-   fix(router): redirect handling by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4543
-   chore: update deps by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4540
-   chore: create `@builder.io/qwik-labs` by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4545
-   perf: leverage modulepreload for common chunks by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4546
-   fix: perfect hash scroll by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4550
-   perf: enable navigationPreload by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4548
-   Sidebar style by [@&#8203;LoganAffleck](https://togithub.com/LoganAffleck) in [QwikDev/qwik#4554
-   fix: QwikIntrinsicElements does not include ref by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4555
-   docs: add panda css by [@&#8203;anubra266](https://togithub.com/anubra266) in [QwikDev/qwik#4544
-   feat(insights): create a new insights application by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4547
-   docs: add ss-link to showcase by [@&#8203;Leizhenpeng](https://togithub.com/Leizhenpeng) in [QwikDev/qwik#2689
-   fix: navigationPreload waitUntil by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4561
-   feat: layout shift detection by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4560
-   docs: add resource + fix css by [@&#8203;hamatoyogi](https://togithub.com/hamatoyogi) in [QwikDev/qwik#4562
-   fix(qwik-city buildtime): make generated file ids unique by [@&#8203;hbendev](https://togithub.com/hbendev) in [QwikDev/qwik#4564
-   feat: transform compiler architecture by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4566
-   feat(insights): basic UI for seeing symbols by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4565
-   docs: Add Qwik Labs section by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4568
-   chore: fix broken lock file by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4574
-   fix: route new template by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4576
-   docs(qwik-labs edit link route): fixed qwik labs "edit page" link & so… by [@&#8203;thejackshelton](https://togithub.com/thejackshelton) in [QwikDev/qwik#4571
-   feat(labs): typed routes by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4580
-   docs(labs): add typed routes by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4582
-   chore: fix saving of artifacts to build by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4583
-   chore(labs): fix distribution build by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4584
-   Internal renaming suggestions by [@&#8203;shairez](https://togithub.com/shairez) in [QwikDev/qwik#4581
-   fix(labs): encodeencodeURIComponent for params by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4587
-   feat: panda css use vite-macro plugin by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4588
-   Qwik shop 🎁 by [@&#8203;gioboa](https://togithub.com/gioboa) in [QwikDev/qwik#4225
-   fix: shop cache by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4590
-   docs(advanced & concepts docs improvements): clarity / structure changes by [@&#8203;thejackshelton](https://togithub.com/thejackshelton) in [QwikDev/qwik#4592
-   Add replaceState to link component by [@&#8203;Wimpert](https://togithub.com/Wimpert) in [QwikDev/qwik#4492
-   docs: simplify menu by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4593
-   fix: improve pandacss integration by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4594
-   fix: default prettier format for starters by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4595
-   chore(labs): copy build artifacts into the build git repo by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4589
-   chore: update deps by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4597
-   docs: fix insights docs by [@&#8203;gioboa](https://togithub.com/gioboa) in [QwikDev/qwik#4598
-   chore(labs): include package.json in full build by [@&#8203;mhevery](https://togithub.com/mhevery) in [QwikDev/qwik#4599
-   docs: Dynamic og image implementation by [@&#8203;mrhoodz](https://togithub.com/mrhoodz) in [QwikDev/qwik#4579
-   fix: correct documentation URLs for rules created by ESLintUtils.RuleCreator by [@&#8203;wtlin1228](https://togithub.com/wtlin1228) in [QwikDev/qwik#4604
-   feat: bulletproof SPA recovery by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4558
-   fix: Social and Vendor are production only components by [@&#8203;wtlin1228](https://togithub.com/wtlin1228) in [QwikDev/qwik#4610
-   docs: image optimization by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4608
-   chore: change useStore link by [@&#8203;GustavoMelloGit](https://togithub.com/GustavoMelloGit) in [QwikDev/qwik#4601
-   fix(qwik-core): add types for the style attribute by [@&#8203;hbendev](https://togithub.com/hbendev) in [QwikDev/qwik#4577
-   docs: Update deprecation information about the basePathname by [@&#8203;julianobrasil](https://togithub.com/julianobrasil) in [QwikDev/qwik#4437
-   docs: fix typos on Qwik City home by [@&#8203;corydeppen](https://togithub.com/corydeppen) in [QwikDev/qwik#4602
-   feat: improve error message for duplicated loaders by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4619
-   docs: dynamic ogImage feature url format fix and clean up by [@&#8203;mrhoodz](https://togithub.com/mrhoodz) in [QwikDev/qwik#4617
-   fix: detect invalid html by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4623
-   1.2.0 by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4600
-   fix: image devtools by [@&#8203;manucorporat](https://togithub.com/manucorporat) in [QwikDev/qwik#4626
-   feat: qwik add builder.io by [@&#8203;adamdbradley](https://togithub.com/adamdbradley) in [QwikDev/qwik#4627
-   feat: scroll opt-out on nav() and Link by [@&#8203;jordanw66](https://togithub.com/jordanw66) in [QwikDev/qwik#4622

##### New Contributors

-   [@&#8203;erikras](https://togithub.com/erikras) made their first contribution in [QwikDev/qwik#4457
-   [@&#8203;OrenSayag](https://togithub.com/OrenSayag) made their first contribution in [QwikDev/qwik#4453
-   [@&#8203;hexa-it](https://togithub.com/hexa-it) made their first contribution in [QwikDev/qwik#4473
-   [@&#8203;the-zimmermann](https://togithub.com/the-zimmermann) made their first contribution in [QwikDev/qwik#4440
-   [@&#8203;eecopa](https://togithub.com/eecopa) made their first contribution in [QwikDev/qwik#4524
-   [@&#8203;avanderpluijm](https://togithub.com/avanderpluijm) made their first contribution in [QwikDev/qwik#4514
-   [@&#8203;VinuB-Dev](https://togithub.com/VinuB-Dev) made their first contribution in [QwikDev/qwik#4522
-   [@&#8203;LoganAffleck](https://togithub.com/LoganAffleck) made their first contribution in [QwikDev/qwik#4513
-   [@&#8203;primeagen-rustaceans](https://togithub.com/primeagen-rustaceans) made their first contribution in [QwikDev/qwik#4467
-   [@&#8203;enesflow](https://togithub.com/enesflow) made their first contribution in [QwikDev/qwik#4500
-   [@&#8203;moinulmoin](https://togithub.com/moinulmoin) made their first contribution in [QwikDev/qwik#4499
-   [@&#8203;jordanw66](https://togithub.com/jordanw66) made their first contribution in [QwikDev/qwik#4509
-   [@&#8203;ehrencrona](https://togithub.com/ehrencrona) made their first contribution in [QwikDev/qwik#4430
-   [@&#8203;ncharalampidis](https://togithub.com/ncharalampidis) made their first contribution in [QwikDev/qwik#4528
-   [@&#8203;anubra266](https://togithub.com/anubra266) made their first contribution in [QwikDev/qwik#4544
-   [@&#8203;Leizhenpeng](https://togithub.com/Leizhenpeng) made their first contribution in [QwikDev/qwik#2689
-   [@&#8203;mrhoodz](https://togithub.com/mrhoodz) made their first contribution in [QwikDev/qwik#4579
-   [@&#8203;corydeppen](https://togithub.com/corydeppen) made their first contribution in [QwikDev/qwik#4602

**Full Changelog**: QwikDev/qwik@v1.1.5...v1.2.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 9pm on sunday" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ascorbic/unpic-img).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi41LjMiLCJ1cGRhdGVkSW5WZXIiOiIzNi41LjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
COMP: docs Improvements or additions to documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants