---
title: "Non-serializable props from a Server to a Client Component (next/non-serializable-props)"
description: "Props crossing the server→client boundary are serialized by React Flight."
url: http://localhost:4173/rules/next/non-serializable-props
updated: 2026-11-11
---

# Non-serializable props from a Server to a Client Component

> `next/non-serializable-props` is a vetd rule. It flags: Non-serializable props from a Server to a Client Component. It runs on every `check`, together with the TypeScript check.

| Fact | Value |
| --- | --- |
| Rule id | `next/non-serializable-props` |
| Severity | error or warning |
| Group | Server and client boundaries |
| Tags | react, correctness |

## Why it matters

Props crossing the server→client boundary are serialized by React Flight. Functions (other than Server Actions), class instances and event handlers cannot be serialized; the render throws at runtime.

## How to fix it

Pass plain data, make the function a Server Action ("use server"), or move the handler into the Client Component.

## Credit

Based on work by:

- [React team](https://react.dev): Props passed from a Server to a Client Component must be serializable; functions are only allowed as Server Actions marked 'use server'.

## References

- ['use client' directive](https://react.dev/reference/rsc/use-client), React
- ['use server' directive](https://react.dev/reference/rsc/use-server), React
- [Server and Client Components](https://nextjs.org/docs/app/getting-started/server-and-client-components), Next.js
- [next-best-practices: RSC boundaries](https://github.com/vercel-labs/next-skills/blob/dc1de9caf7612d73f56a8dec3cb1bd6c9ec096b9/skills/next-best-practices/rsc-boundaries.md), Vercel (vercel-labs/next-skills)

## See it

Demos in the vetd Lab:

- [Serializable props only](http://localhost:4173/lab/nextjs/serializable-props)

## Related rules

- [`next/server-actions`](http://localhost:4173/rules/next/server-actions.md)
- [`next/server-hooks`](http://localhost:4173/rules/next/server-hooks.md)

## Get this text from vetd

MCP: call `explain` with `{ "diagnosticId": "next/non-serializable-props" }`. CLI: `npx vetd explain next/non-serializable-props`.

---

[All 92 rules](http://localhost:4173/rules.md) · Previous: [`next/server-hooks`](http://localhost:4173/rules/next/server-hooks.md) · Next: [`next/server-only-in-client`](http://localhost:4173/rules/next/server-only-in-client.md)
