Skip to content
MrJev

zod-jev

Adds Jev semantic checks to Zod 4 schemas. Zod validates the shape; Jev validates the meaning.

View on GitHub →

Hands-on review

Adds semantic rules to a Zod 4 schema, sends them all in one request, and turns probabilities into ordinary Zod issues. Neatly done.

Good for

  • Teams already validating with Zod who want meaning checked in the same pass
  • One request per parse, however many semantic rules the schema carries
  • Keeping the failure shape familiar: semantic misses arrive as Zod issues

Watch out for

  • Whatever the schema validates is what gets sent — that's the object, whole
  • Seven stars and ten commits; the API surface may still move
  • You choose the thresholds; a probability is not a validation result

Tested Sep 20, 2026 at 700bd256fe94 · Node 24 in Docker, offline; 78 tests across 8 files

How we reviewed this: we ran its 78 tests in Docker on Node 24 with no network and read the request builder. We made no Jev calls.

What it does

zod-jev, by jomatsu, extends Zod 4 with semantic rules:

const z = createJevZod();
const Ticket = z.semantic(z.object({ subject: z.string(), body: z.string() }), [ /* rules */ ]);

Shape rules stay in Zod. Meaning rules — “does this body contain personal data?”, “is this price plausible for this item?” — become Nouls, and a single parseAsync sends every rule of that schema in one request, then converts probabilities that miss your threshold into ordinary Zod issues.

That last part is the good design decision: callers keep using safeParse, error.issues and everything else they already have, rather than learning a new failure shape. The default messages are localised, with the instructions sent to the model kept in English deliberately.

All 78 tests pass offline.

What to know

The state is the object being validated, so whatever your schema covers is what leaves the process. For a support ticket that’s fine; for a user record, decide first.

And a probability isn’t a verdict: you pick the threshold, and the library is explicit that this is your call.

Verdict

A clean, small idea executed without ceremony — one request per parse, familiar error objects, no new vocabulary. If your codebase already runs on Zod, this is the least intrusive way to add a judgment to a boundary you already validate.

For the same instinct in Ruby, see ruby_llm-typesafe.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 20, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Libraries & Integrations

agentrun

★ 423▲ 13

Parcha-ai/agentrun

A workflow DSL for agents with a Jev package for the steps that are decisions rather than generation.

TypeScript

switch

★ 420▲ 170

osolmaz/switch

TypeScript framework for decision-model harnesses: your program offers a short list of next steps and the model picks one at a time until it can answer, with chess, wikirace and rubric-judge examples run on Jev.

TypeScript

Ten Levels of Jev

★ 264▲ 10

disler/ten-levels-of-jev

Thirty worked uses arranged in ten levels, from one if statement to an agent that reaches for Jev itself, with a video walkthrough.

TypeScriptReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.