sveltejs/kit · warning
${message}\n\n${summary}\n\n${suggestion}
Error message
${message}\n\n${summary}\n\n${suggestion} What it means
SvelteKit remote forms validate inputs and collect `issues` (validation problems) that the client can read via `myForm.fields.myField.issues()` or `myForm.fields.allIssues()`. This DEV warning fires when a form submission produced validation issues but the client never read them, meaning the user receives no actionable feedback about why the form failed. The message combines a description, a summary of the unread issues (path + message per issue), and a suggestion.
Source
Thrown at packages/kit/src/runtime/client/remote-functions/form.svelte.js:184
unread_issues = raw_issues;
setTimeout(() => {
if (unread_issues === null) {
return;
}
if (unread_issues.length > 0) {
const message = `Form submission had invalid data, but the validation issues were ignored:`;
const summary = unread_issues
.map((issue) =>
issue.path.length === 0
? ` - ${issue.message}`
: ` - ${issue.path.join('.')} (${issue.message})`
)
.join('\n');
const suggestion = `Make sure you provide actionable feedback to users, using e.g. \`myForm.fields.myField.issues()\` or \`myForm.fields.allIssues()\``;
console.warn(`${message}\n\n${summary}\n\n${suggestion}`);
}
unread_issues = null;
});
}
/**
* @param {FormData} form_data
* @returns {Record<string, any>}
*/
function convert(form_data) {
const data = convert_formdata(action_id_without_key, form_data);
if (key !== undefined && !('id' in data)) {
data.id = key;
}
return data;
}
View on GitHub (pinned to 03f1687fe6)
Solutions
- Read issues in your form UI: `myForm.fields.myField.issues()` or `myForm.fields.allIssues()`
- Render issue messages next to the relevant fields for user feedback
- If issues are intentionally ignored, read them anyway (or document why) to silence the DEV warning
Example fix
// before
const result = await createUser(data);
if (!result.success) showToast('Something went wrong');
// after
const result = await createUser(data);
for (const issue of result.fields.allIssues()) {
showFieldError(issue.path.join('.'), issue.message);
} Defensive patterns
Strategy: validation
Validate before calling
const result = await myForm.submit(data); const issues = result?.fields?.allIssues?.() ?? []; if (issues.length) renderIssues(issues);
Type guard
const hasUnreadIssues = (r) => typeof r?.fields?.allIssues === 'function';
Prevention
- Always read allIssues() after a submit that may fail validation
- Render issue messages in the UI next to fields
- Add a code-review checklist item: form failures must surface issues()
When it happens
Trigger: A remote form action returns validation issues (e.g. invalid fields) and, during DEV, the runtime's `warn_on_missing_issue_reads` (invoked from the form promise or preflight path) detects the issues were never consumed via `.issues()`/`allIssues()` before being discarded.
Common situations: Custom form UI that only checks success/failure and ignores field-level issues; migrating plain forms to remote forms without wiring up issue rendering; generic error toasts hiding validation detail.
Related errors
- Updates can only be sent once per form submission. Ignoring
- ${keypath} cannot be empty
- Each member of ${keypath} must start with '.' — saw '${exten
- ${keypath} should be one of "${options}" or "${options[optio
- HTTP error status codes must be between 400 and 599 — ${stat
AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02).
Data as JSON: /api/errors/4f6a7740890de9ad.
Report an issue: GitHub.