Qwik Error Codes
In production, Qwik logs compact error codes like Code(Q8) with a link to this page. Below is a description of every code, what triggers it, and how to fix it.
Q0
Error while serializing class or style attributes
Qwik could not convert a class or style value to a string. Ensure you pass a string, an object, or an array — not a function or symbol.
Q1
Scheduler not found
Internal error: the Qwik scheduler was not available when an effect tried to run. This usually means the container was destroyed or never initialized. If you see this in application code, please file a bug.
Q2
track() received object, without prop to track
You called track(obj) without specifying which property to track. Use track(() => obj.prop) or track(signal) instead.
Q3
Only primitive and object literals can be serialized
You stored a value (class instance, function, DOM node, etc.) in state that Qwik needs to serialize. Move it behind a QRL ($()) or keep it in a non-serialized location. See Serialization.
Q4
You can render over an existing q:container. Skipping render()
render() was called on an element that already hosts a Qwik container. Remove the existing container first, or render into a different element.
Q5
QRL is not a function
A QRL resolved to something other than a function. Make sure the $-suffixed expression exports a function, and that the optimizer is running.
Q6
Dynamic import not found
The chunk file referenced by a QRL could not be loaded. This usually means a build artifact is missing or the base path is misconfigured. Rebuild your project and verify that all chunks are deployed.
Q7
Unknown type argument
Internal error: an unknown type was passed to a core utility. If you see this in application code, please file a bug.
Q8
Actual value for useContext() can not be found
You called useContext(id) but no ancestor called useContextProvider(id, value). Make sure the provider is above the consumer in the component tree, and that the context was used during SSR so its state was serialized.
Q9
Invoking 'use*()' method outside of invocation context
A use*() hook was called outside of a component or task scope. Hooks can only be called synchronously inside component$, useTask$, useComputed$, or similar Qwik entry points.
Q10
Calling a 'use*()' method outside 'component$(() => { HERE })' is not allowed
Similar to Q9 but more specific: you called a hook in a place that is not inside a component$ body or another use* hook. Move the call into the component function. See Use Method Rules.
Q11
The provided Context reference is not a valid context created by createContextId()
The value you passed to useContext() or useContextProvider() was not created with createContextId(). Make sure you are importing and passing the correct context object.
Q12
SsrError(tag)
An error occurred during SSR while processing a specific JSX tag. Check the accompanying message for details about which element failed and why.
Q13
QRLs can not be resolved because it does not have an attached container
A QRL tried to resolve but has no container context. This happens when a QRL is used outside of a rendered Qwik tree. Ensure QRLs are created and used inside a Qwik container.
Q14
QRLs can not be dynamically resolved, because it does not have a chunk path
A QRL has no chunk information. This typically means the optimizer did not process the file. Ensure the Qwik Vite plugin is configured correctly.
Q15
The JSX ref attribute must be a Signal
You passed a non-Signal value to the ref prop. Use useSignal() to create a ref: const myRef = useSignal<Element>(), then pass ref={myRef}.
Q16
Deserialization of data type is not implemented
Internal serialization error: an unknown type ID was encountered during deserialization. This may indicate a version mismatch between SSR and client code. Rebuild and redeploy.
Q17
Expected vnode for ref prop
Internal serialization error: a ref prop pointed to something other than a VNode during serialization. If you see this in application code, please file a bug.
Q18
Cannot allocate data type
Internal serialization error: an unknown type ID was encountered during allocation. This may indicate corrupted serialized state or a version mismatch. Rebuild and redeploy.
Q19
Missing root id
Internal serialization error: a root object has no assigned ID during serialization. If you see this in application code, please file a bug.
Q20
Serialization of data type is not implemented
An object of an unsupported type was encountered during serialization. Only primitives, plain objects, arrays, Signals, Dates, URLs, RegExps, Maps, Sets, and explicitly serializable types can be serialized. See Q3 for guidance.
Q21
Serialization Error: Unvisited
Internal error: an object that should have been visited during the serialization walk was missed. If you see this in application code, please file a bug.
Q22
Missing QRL chunk
A QRL's chunk information was not available during serialization. This usually means the optimizer did not process the code correctly. Rebuild your project.
Q23
The value of the textarea must be a string
You passed a non-string value to a <textarea>. Convert the value to a string, or use a signal that holds a string.
Q24
Unable to find q:container
Qwik could not locate a q:container element. This happens when trying to resume or interact with a container that was not rendered or was removed from the DOM.
Q25
Element must have 'q:container' attribute
An element was expected to have a q:container attribute but did not. This is an internal error — if you see it, please file a bug.
Q26
Unknown vnode type
Internal error: the VNode system encountered a node of an unknown type. If you see this in application code, please file a bug.
Q27
Materialize error: missing element
Internal error: the VNode system could not find an expected DOM element during materialization. This can happen if the DOM was modified externally (e.g., by a browser extension) between SSR and resumption.
Q28
Cannot coerce a Signal, use .value instead
You used a Signal where a primitive was expected (e.g., string concatenation, comparison). Access the underlying value with .value: mySignal.value instead of mySignal.
Q29
useComputed$ QRL cannot return a Promise
The function inside useComputed$ must be synchronous. If you need async computation, use useAsync$ instead.
Q30
Qwik version already imported
Two different copies of Qwik were loaded. This causes shared internal structures to diverge and leads to subtle bugs. Ensure only one version is installed by checking your resolve.noExternal[] and optimizeDeps.exclude settings in Vite config.
Q31
WrappedSignal is read-only
You tried to set .value on a signal that is derived (e.g., from a computed expression or a binding). Derived signals cannot be written to — write to the source signal instead.
Q32
Attribute value is unsafe for SSR
An attribute value contained characters that are unsafe for server-side rendering (e.g., unescaped HTML). Sanitize the value before passing it as an attribute.
Q33
SerializerSymbol function returned rejected promise
A custom serializer (using SerializerSymbol) returned a rejected promise. Ensure your serializer's serialize function resolves successfully.
Q34
Cannot serialize function
A plain function (not wrapped in $()) was found in serializable state. Wrap it with $() to create a QRL, or move it out of serialized state and use a QRL reference instead.
Q35
Cannot read .value of a clientOnly async signal during SSR
You accessed .value on an async signal with clientOnly: true during server-side rendering. Since clientOnly signals skip computation on the server, there is no value available. Use .loading to show a loading state, or provide an initial value in the options.