# nuxt-models > Domain model classes with automatic hydration, relations, and type casting. Use when creating models for API entities, defining relationships between models, casting properties to enums/dates, or creating value objects. - Author: github-actions[bot] - Repository: leeovery/claude-nuxt - Version: 20260120162103 - Stars: 2 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/leeovery/claude-nuxt - Web: https://mule.run/skillshub/@@leeovery/claude-nuxt~nuxt-models:20260120162103 --- --- name: nuxt-models description: Domain model classes with automatic hydration, relations, and type casting. Use when creating models for API entities, defining relationships between models, casting properties to enums/dates, or creating value objects. --- # Nuxt Models Type-safe domain models with automatic hydration, relations, and property casting. ## Core Concepts **[models.md](references/models.md)** - Complete model patterns, lifecycle, relations, casts **[values.md](references/values.md)** - Value objects for typed wrappers (DateValue, etc.) ## Basic Model ```typescript // app/models/Post.ts import Model from '#layers/base/app/models/Model' import type { Castable } from '#layers/base/app/types' import PostStatus from '~/enums/PostStatus' import DateValue from '~/values/DateValue' import Author from '~/models/Author' export default class Post extends Model { ulid: string title: string content: string status: PostStatus isDraft: boolean author: Author createdAt: DateValue public override primaryKey(): string { return 'ulid' } public override casts(): Record { return { status: PostStatus, createdAt: DateValue, } } public override relations(): Record { return { author: Author, } } public isPublished(): boolean { return !this.isDraft } } ``` ## Model Lifecycle ``` API Response → booting() → transform() → Property Assignment → Relations Hydrated → Casts Applied → booted() → Ready ``` ## Usage ```typescript // Hydrate from API response const post = Post.hydrate(apiResponse.data) // Hydrate collection const posts = Post.collect(apiResponse.data) // Access typed properties post.status.color() // Enum method post.createdAt.format() // Value object method post.author.name // Relation property // Compare models post.is(otherPost) // Same primary key? ```