Provides a defineEntity and field facade that produces Payload field configs and matching Zod schemas from a single definition. Normalization such as trimming also runs on writes through the admin and Local API. It requires Payload 3.85 or newer, Zod 4 and Node 20.9 or newer, and is ESM-only.
Canonical Payload field definitions with reusable Zod schemas.
Installation
npm i @nexload-sdk/payload-schema2
Stars
0
Forks
0
Open Issues
Today
Last Updated
3
Weekly Downloads
v2.0.0
npm Version
167.7 KB
Unpacked Size
0
Dependencies
Trends appear after 7 days of data. Collecting since Oct 22 — 1 daily snapshot so far.
Shared by 4 plugins in gecut/nexload-sdk.
Trends appear after 7 days of data. Collecting since Oct 22 — 1 daily snapshot so far.
Each point is npm's rolling 7-day download count.
Health Score
Composite score based on GitHub activity, stars, npm downloads, publish recency, dependency count, and package size.
Badge for your README
[](https://payloaddirectory.dev/plugins/1086380959-payload-schema)<a href="https://payloaddirectory.dev/plugins/1086380959-payload-schema"><img src="https://payloaddirectory.dev/badge/1086380959-payload-schema.svg" alt="Payload Directory"></a>README
Define intrinsic field validation and normalization once, then reuse it as ordinary Payload fields and ordinary Zod schemas.
pnpm add @nexload-sdk/payload-schema payload zod
Requires Node >=20.9.0, Payload >=3.85.0 <4, and Zod >=4 <5. The package is ESM-only and server/config safe.
import { defineEntity, field } from "@nexload-sdk/payload-schema";
export const productEntity = defineEntity({
name: "Product",
fields: {
title: field.text({ required: true, trim: true }),
slug: field.slug({ required: true }),
inventory: field.number({ integer: true, safe: true, defaultValue: 0 }),
},
});
export const Products = {
slug: "products",
fields: productEntity.payload.all(),
};
Each facade call returns fresh Payload config containers. Canonical normalization also runs for writes through Payload Admin and the Local API.
export const createProductSchema = productEntity.schema(({ pick }) =>
pick(["title", "slug", "inventory"], {
optional: ["inventory"],
}),
);
entity.schema can return any Zod schema, not only objects or picks:
export const titleLengthSchema = productEntity.schema(({ fields }) =>
fields.title.transform((title) => title.length),
);
import { z } from "zod";
const location = field.native({
payload: { type: "point" },
schema: z.tuple([z.number(), z.number()]),
});
A native data field without a schema still compiles for Payload but is unavailable to canonical schema derivation. Layout fields remain directly in collection configuration.
defaultValue accepts a static value, validates it during defineEntity, and passes the canonical result to Payload.dynamicDefaultValue accepts a native Payload function and is forwarded opaquely..default() behavior;payload.defaultValue is reserved.The package does not create collections, infer CRUD schemas, model populated relationship documents, generate persistence types, own access control or hooks, provide a rich-text editor, or implement business workflows.
Payload-generated types remain authoritative for stored documents. See the canonical documentation for architecture, fields, integration, errors, migration, and compatibility.
payload utilities
Developer utilities for traversing, flattening and transforming Payload documents and tidying generated types
6823/wk15v3
payload field factories
Type-safe factory functions for writing Payload field configurations more concisely
502/wk0v3
payload repository
Typed repository and operations classes wrapping Payload's Local API with optional argument transformers
452/wk0v3
payload utilities
Helper functions for composing field validators, extracting IDs and resolving documents in Payload
436/wk0v3
payload arch skill
Claude Code skill enforcing a route, controller, service and store architecture in Payload projects
322v?
payload plugin tooling
Shared lint, format, TypeScript, build, test and CI config for developing Payload plugins
7339/wk0v4