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

  1. Read issues in your form UI: `myForm.fields.myField.issues()` or `myForm.fields.allIssues()`
  2. Render issue messages next to the relevant fields for user feedback
  3. 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

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


AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02). Data as JSON: /api/errors/4f6a7740890de9ad. Report an issue: GitHub.