A schema system that does exactly what you need.
Type inference. Runtime validation. JSON Schema generation.
Zero build steps. No extra fluff. It just works.
LOOM Schema was built because nothing else got this balance right:
- ✅ Type-safe and composable
- ✅ Validates at runtime
- ✅ Emits spec-compliant JSON Schema
- ❌ No codegen
- ❌ No decorators
- ❌ No build step
You write schema-like TypeScript. You get real JSON Schema and real validation. That’s the whole point.
bun add loom-schema
Everything’s bundled — including ajv
and ajv-formats
. No extra dependencies.
import { object, string, number, Infer } from "loom-schema";
const User = object({
name: string({ minLength: 1 }),
age: number({ minimum: 0 }),
});
type UserType = Infer<typeof User>;
const result = await User.validate({ name: "Ada", age: 32 });
if (!result.valid) {
console.error(result.errors);
}
Use LOOM Schema when you need to feed schemas into systems that expect schemas:
- OpenAI Function calling
- MCP & function serialization
- API endpoints with runtime enforcement
- Config validation and generation
- Frontend forms based on types
- CLI arg structure and validation
If it wants a schema, LOOM can give it one — safely, programmatically, and without ceremony.
- 📐 TypeScript-first: deeply inferred types
- 🧩 Composable fragments: mix and reuse schema pieces with ease
- 🎛 All the basics:
allOf
,anyOf
,oneOf
, conditionals, etc. - 📄 Standards-based: JSON Schema 2020-12 compliance
- 🧪 Runtime validation: powered by AJV with formats out of the box
- 📦 No config, no build step, no codegen
const Config = object({
apiKey: string(),
retries: number({ default: 3 }),
});
type ConfigType = Infer<typeof Config>;
// {
// apiKey: string;
// retries: number;
// }
import { allOf, object, string } from "loom-schema";
const WithId = object({ id: string({ format: "uuid" }) });
const Product = allOf([
WithId,
object({
name: string(),
description: string(),
}),
]);
const result = await Product.validate({
id: "123e4567-e89b-12d3-a456-426614174000",
name: "Widget",
description: "An example widget",
});
Returns { valid, errors }
from AJV — clean and informative.
LOOM Schema wasn’t built to be trendy. It was built to be minimal, practical, and actually usable across systems that expect real JSON Schema. It gives you the right pieces to build and validate data shapes at runtime — without taking over your project.
You write types.
You get schemas.
That’s it.