Use subjectOf to attach a 3D model — enables 3D product views in Google Images and Shopping:
import{createProduct,ThreeDModelSchema}from'schemaorg-kit';constproduct=createProduct({name:'Trail Runner Pro',subjectOf:ThreeDModelSchema.parse({contentUrl:'https://example.com/models/trail-runner.glb',encodingFormat:'model/gltf-binary',name:'Trail Runner Pro 3D Model',}),});
import{createProduct,createProductGroup,createOffer,ReviewSchema}from'schemaorg-kit';constproduct=createProduct({name:'Trail Runner Pro — Men\'s, Size 10',description:'Lightweight trail running shoe for technical terrain.',image:['https://example.com/shoes/trail-runner-1200x900.jpg','https://example.com/shoes/trail-runner-side.jpg',],brand:{'@type':'Brand',name:'TrailTech'},sku:'TR-PRO-M-10',gtin13:'0123456789012',color:'Midnight Blue',material:'Mesh / Rubber',offers:{'@type':'Offer',price:129.99,priceCurrency:'USD',availability:'InStock',url:'https://example.com/shop/trail-runner-pro',priceValidUntil:'2025-12-31',},aggregateRating:{'@type':'AggregateRating',ratingValue:4.7,reviewCount:892,bestRating:5,},review:ReviewSchema.parse({author:{'@type':'Person',name:'Marcus J.'},reviewRating:{'@type':'Rating',ratingValue:5,bestRating:5},reviewBody:'Excellent grip on wet rocks. Very comfortable for long runs.',datePublished:'2025-02-10',}),});
LocalBusiness extends Place with business-specific fields.
Factory
@type default
createLocalBusiness
"LocalBusiness" (overridable)
createRestaurant
"Restaurant"
createHotel
"Hotel"
Overriding @type for specific subtypes:
// These are all valid @type values for createLocalBusiness:createLocalBusiness({'@type':'HairSalon',name:'Cuts & Co.'})createLocalBusiness({'@type':'DaySpa',name:'Zen Spa'})createLocalBusiness({'@type':'GroceryStore',name:'Fresh Mart'})
Additional LocalBusiness fields
Field
Type
Notes
legalName
string?
Full legal name
email
string?
Business email
logo
string \| ImageObject?
Business logo
aggregateRating
AggregateRating?
Rating from reviews
review
Review \| Review[]?
Individual reviews
priceRange
string?
e.g. "$", "$$", "$$$", "$$$$"
servesCuisine
string \| string[]?
Restaurant only — cuisine types
hasMenu
string?
URL to menu
acceptsReservations
boolean \| string?
Whether reservations are accepted
vatID
string?
VAT number
hasMerchantReturnPolicy
MerchantReturnPolicy?
Return policy
department
LocalBusiness?
A department within the business
openingHours
string \| string[]?
Alternative to openingHoursSpecification
createMovie
import{createMovie}from'schemaorg-kit';
Fields
Field
Type
Notes
name
string?
Movie title
description
string?
Plot summary
image
string \| ImageObject \| []?
Poster images
director
Person?
Director
actor
Person \| Person[]?
Cast members
datePublished
string?
Release date
duration
string?
ISO 8601 duration
genre
string \| string[]?
Genre(s)
contentRating
string?
e.g. “PG-13”, “R”
aggregateRating
AggregateRating?
Critical/audience rating
review
Review \| Review[]?
Reviews
trailer
VideoObject?
Trailer video
productionCompany
Organization?
Studio
countryOfOrigin
string?
Country of production
inLanguage
string?
Original language
Example
constmovie=createMovie({name:'The Last Algorithm',description:'A thriller about an AI that becomes self-aware.',director:{'@type':'Person',name:'Maria Santos'},actor:[{'@type':'Person',name:'James Park'},{'@type':'Person',name:'Elena Kovacs'},],datePublished:'2025-07-04',duration:'PT2H18M',genre:['Thriller','Science Fiction'],contentRating:'PG-13',aggregateRating:{'@type':'AggregateRating',ratingValue:8.2,ratingCount:45000,bestRating:10,},});