cloudflare/vinext

`next/form` (`<Form>`) soft navigation not implemented

Closed

#1,355 opened on May 20, 2026

 (1 comment) (0 reactions) (0 assignees)TypeScript (371 forks)github user discovery
adapter-api-e2ehelp wanted

Repository metrics

Stars
 (8,563 stars)
PR merge metrics
 (Avg merge 1d 1h) (462 merged PRs in 30d)

Description

This issue was created by an agent analysing CI failures from the Next.js Deploy Suite (vinext main vs Next.js v16.2.6, 2026-05-20).

Problem

The next/form <Form> component does not perform client-side soft navigation. Form submissions fall through to the browser's default behavior (full MPA page navigation) instead of being intercepted for SPA-style transitions.

Tests verify that after a form submission, the page did NOT do a full MPA navigation (didMpaNavigate() should return false). In vinext, it returns true because the form submit causes a full page reload.

Additionally, client action functions passed to action/formAction props do not execute.

Estimated Impact

~14 test failures.

Affected Test Suites

  • test/e2e/next-form/default/pages-dir.test.ts (9 failures)
  • test/e2e/next-form/default/app-dir.test.ts (5 failures)
  • test/e2e/next-form/basepath/next-form-basepath.test.ts (1 failure)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a test with a <Form> component from next/form and verify that submission performs soft navigation. Confirm it currently does a full page reload.

  2. Study the Next.js <Form> implementation. Search .nextjs-ref/packages/next/src/client/form.tsx to understand how form submissions are intercepted and converted to client-side navigations using the router.

  3. Implement <Form> in the next/form shim. The component needs to: (a) intercept the submit event, (b) serialize form data, (c) use router.push() or router.replace() for the navigation, (d) support client action functions via action/formAction props.

  4. Handle both App Router and Pages Router. The Form component should work in both contexts.

Contributor guide