joi

SKILL.md

Joi

Quick Start

const Joi = require('@hapi/joi');

const schema = Joi.object({
    name: Joi.string().min(1).max(100).required(),
    age: Joi.number().integer().min(0),
    email: Joi.string().email()
});

const { error, value } = schema.validate(input);

Critical Rules

  1. Schemas are immutable - Every method returns a new schema instance; never mutate
  2. Validate at boundaries - Use validate() or attempt() at input boundaries; see validation
  3. Types extend base - All types inherit from any(); see types overview
  4. Refs for cross-field - Use Joi.ref() for dynamic values across fields; see references
  5. Extend for custom types - Use Joi.extend() to create custom types; see extensions

Workflow

  1. Choose a type - types overview for all built-in types
  2. Add constraints - Chain rules like .min(), .max(), .pattern(), .valid()
  3. Compose schemas - Nest Joi.object(), Joi.array(), Joi.alternatives()
  4. Add conditionals - Use .when() for dynamic schemas; see conditionals
  5. Customize errors - Override messages via .messages() or .error(); see errors

Key Patterns

Topic Reference
All built-in types types
Validation & options validation
References & templates references
Conditional schemas conditionals
Error handling errors
Custom extensions extensions
Metadata & introspection metadata
Common methods (any) any
Testing patterns testing
Weekly Installs
14
Repository
damusix/skills
GitHub Stars
8
First Seen
Feb 15, 2026
Installed on
opencode14
github-copilot14
codex14
kimi-cli14
gemini-cli14
amp14