← Back to list

validating-string-formats
by djankies
⭐ 0🍴 0📅 Nov 25, 2025
SKILL.md
name: validating-string-formats description: Guide to Zod v4 new features including top-level string formats, string transformations, codecs, and stringbool
Using Zod v4 Features
Purpose
Comprehensive guide to new features introduced in Zod v4 that improve developer experience, performance, and type safety.
Top-Level String Format Functions
Overview
Zod v4 moved string format validations to top-level functions for 14x faster parsing.
All optimized formats:
z.email()- Email validationz.uuid()- UUID validationz.iso.datetime()- ISO datetimez.url()- URL validationz.ipv4()/z.ipv6()- IP addressesz.jwt()- JWT tokensz.base64()- Base64 stringsz.hash('sha256')- Hash strings
Quick example:
const emailSchema = z.email().trim().toLowerCase();
const uuidSchema = z.uuid();
const datetimeSchema = z.iso.datetime();
With custom error:
const emailSchema = z.email({
error: "Please enter a valid email address"
});
String Transformation Methods
Trim, Lower Case, Upper Case
z.string().trim() // Remove whitespace
z.string().toLowerCase() // Convert to lowercase
z.string().toUpperCase() // Convert to uppercase
Chaining:
const emailSchema = z.email().trim().toLowerCase();
Execution order: Transformations execute left-to-right.
StringBool Type
Parse string representations of booleans:
const boolSchema = z.stringbool();
boolSchema.parse('true'); // true
boolSchema.parse('false'); // false
boolSchema.parse('1'); // true
boolSchema.parse('0'); // false
Use case: Query parameters and form data
const querySchema = z.object({
active: z.stringbool(),
verified: z.stringbool()
});
Codec Type
Bidirectional transformations for encode/decode:
const dateCodec = z.codec({
decode: z.string().transform(s => new Date(s)),
encode: z.date().transform(d => d.toISOString())
});
const decoded = dateCodec.parse('2024-01-01T00:00:00Z');
const encoded = dateCodec.encode(new Date());
Safe operations:
const result = dateCodec.safeDecode('invalid-date');
if (!result.success) {
console.error(result.error);
}
Performance Optimizations
Bulk Array Validation (7x faster)
const arraySchema = z.array(itemSchema);
const items = arraySchema.parse([...]);
Passthrough for Performance
const schema = z.object({
id: z.string()
}).passthrough(); // 10-20% faster, keeps extra fields
Best Practices
1. Use Top-Level Functions
z.email() // ✅ 14x faster
z.string().email() // ❌ Deprecated
2. Chain Transformations
z.email().trim().toLowerCase() // ✅ Declarative
3. Leverage StringBool
z.stringbool() // ✅ For "true"/"false" strings
z.boolean() // ✅ For actual booleans
4. Brand IDs
z.string().brand<'UserId'>()
z.string().brand<'OrderId'>()
5. Codecs for Serialization
const dateCodec = z.codec({
decode: z.iso.datetime().transform(s => new Date(s)),
encode: z.date().transform(d => d.toISOString())
});
Migration from v3
String Formats:
z.email() // ✅ v4
z.string().email() // ❌ v3
Error Customization:
z.string({ error: "Required" }) // ✅ v4
z.string({ message: "Required" }) // ❌ v3
Schema Composition:
schemaA.extend(schemaB.shape) // ✅ v4
schemaA.merge(schemaB) // ❌ v3
References
- Validation: Use the validating-schema-basics skill from the zod-4 plugin
- Migration: Use the migrating-v3-to-v4 skill from the zod-4 plugin
- Transformations: Use the transforming-string-methods skill from the zod-4 plugin
- Performance: Use the optimizing-performance skill from the zod-4 plugin
Success Criteria
- ✅ Using top-level format functions
- ✅ String transformations for user input
- ✅ StringBool for query params
- ✅ Codecs for date serialization
- ✅ Branded types for nominal typing
- ✅ Bulk array validation
- ✅ Discriminated unions for faster parsing
Score
Total Score
60/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon