Skip to content

Package map

Use this page when deciding which package belongs in which layer.

PackageRoleInstall when
@xndrjs/domainValidator-agnostic domain coreYou want primitives, shapes, proofs, capabilities, compose, or pipe
@xndrjs/domain-zodZod 4 adapterYour boundary already uses Zod or needs Zod transforms
@xndrjs/domain-valibotValibot adapterYou prefer Valibot schemas or small function-first validators
@xndrjs/domain-ajvAJV adapterYour contracts are JSON Schema or OpenAPI
@xndrjs/tasksLazy async tasks with retryYou want composable async effects in infrastructure code
@xndrjs/bench-perfPrivate benchmark suiteInternal monorepo performance comparisons

If you use an adapter, import domain APIs from the adapter package:

import { domain, zodToValidator } from "@xndrjs/domain-zod";

If you do not use an adapter, import from the core:

import { compose, domain, pipe } from "@xndrjs/domain";
  • @xndrjs/domain-zod expects Zod 4.
  • @xndrjs/domain-valibot expects Valibot matching the adapter major.
  • @xndrjs/domain-ajv expects AJV and ajv-formats.