Skip to content

Zod 4 date field validation fails with dateProxy ("expected date, received string") #629

@NicoRio42

Description

@NicoRio42

Minimal reproduction: NicoRio42/sveltekit-superforms-zod4-date

First, thank you for this amazing library.

I'm encountering an issue when using a Zod 4 schema with a date field in combination with Sveltekit Superforms and dateProxy. When submitting a form with input type="datetime-local", the validation fails with:

Invalid input: expected date, received string

The validation works fine if I use Zod 3.

form-schema.ts:

import z4 from "zod/v4";

export const v4FormSchema = z4.object({
  dateTime: z4.date(),
});

+page.server.ts:

import { fail, superValidate } from "sveltekit-superforms";
import { zod4 } from "sveltekit-superforms/adapters";
import { v4FormSchema } from "./form-schema";

export async function load() {
  const v4Form = await superValidate(zod4(v4FormSchema));

  return { v4Form };
}

export const actions = {
  default: async ({ request }) => {
    const form = await superValidate(request, zod4(v4FormSchema));
    if (!form.valid) return fail(400, { form });

    console.log("Form submitted successfully:", form.data);

    return { form };
  },
};

+page.svelte:

<script lang="ts">
  import { dateProxy, superForm } from "sveltekit-superforms";
  import { zod4Client } from "sveltekit-superforms/adapters";
  import { v4FormSchema } from "./form-schema";

  let { data } = $props();

  const v4Form = superForm(data.v4Form, {
    validators: zod4Client(v4FormSchema),
  });

  const { errors: v4Errors, enhance: v4Enhance } = v4Form;
  const v4DateValue = dateProxy(v4Form, "dateTime", {
    format: "datetime-local",
  });
</script>

<form method="post" use:v4Enhance>
  <input type="datetime-local" name="dateTime" bind:value={$v4DateValue} />

  {#if $v4Errors.dateTime}
    {#each $v4Errors.dateTime as error}
      <small>{error}</small>
    {/each}
  {/if}

  <button>Submit</button>
</form>

You can find a minimal reproduction in this repo: NicoRio42/sveltekit-superforms-zod4-date

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions