Learn how Qwik's resumability differs from hydration, how $() serialises handlers, and why startup is near-instant regardless of app size
0 / 5 completed
1 / 5
What is resumability in Qwik and how does it differ from hydration?
Resumability: With hydration (React/Vue), the client must download and re-execute all component code to attach event listeners. Qwik serialises the execution state — component props, event listener locations, reactive subscriptions — into HTML as JSON. The browser resumes from that snapshot, so zero JS executes on load unless the user interacts.
2 / 5
What is the purpose of the $() suffix in Qwik APIs like onClick$?
$() in Qwik: The Qwik compiler detects the $ suffix (or explicit $() wrapper) and code-splits the closure into a separate chunk. The HTML receives a URL reference, not the function code. When the user triggers the event, Qwik fetches that chunk on demand — achieving true lazy loading at the event-handler level.
3 / 5
What does useSignal() provide in Qwik?
useSignal(): returns a Signal<T> with a .value property. Reading signal.value in a component template creates a fine-grained subscription. Only components that consume that signal re-render on change — similar to SolidJS signals but integrated with Qwik's serialisation system so state survives server-to-client transfer without code execution.
4 / 5
Why does Qwik achieve instant startup on the client by default?
Qwik startup: Traditional frameworks must hydrate (download + execute component tree) before the app is interactive. Qwik's HTML is already interactive — listeners are serialised references. The browser fires a tiny Qwik loader (~1 KB) to intercept the first event, then lazily fetches only the handler code needed. App size does not affect TTI.
5 / 5
How does Qwik handle component state serialisation between server and client?
Qwik serialisation: After SSR, Qwik embeds a <script type="qwik/json"> block containing serialised signal values, component ownership maps, and subscription graphs. The tiny client runtime deserialises this, reconstructing the reactive graph. No component functions re-run — the app resumes exactly where the server left off.