symfony / json-schema
Generates JSON Schema documents from PHP types.
8.2.x-dev
2026-10-14 10:57 UTC
Requires
- php: >=8.4.1
- symfony/property-info: ^7.4|^8.0
- symfony/type-info: ^7.4.6|^8.0.6
Requires (Dev)
- phpdocumentor/reflection-docblock: ^5.2|^6.0
- phpstan/phpdoc-parser: ^1.30|^2.0
- symfony/config: ^7.4|^8.0
- symfony/dependency-injection: ^7.4|^8.2
- symfony/filesystem: ^7.4|^8.0
- symfony/property-access: ^7.4|^8.0
- symfony/serializer: ^7.4|^8.0
- symfony/translation-contracts: ^2.5|^3
- symfony/uid: ^7.4|^8.0
- symfony/validator: ^7.4|^8.0
Suggests
None
Provides
None
Conflicts
- phpdocumentor/reflection-docblock: <5.2|>=7
- phpdocumentor/type-resolver: <1.5.1
- symfony/serializer: <7.4
- symfony/validator: <7.4
Replaces
None
This package is auto-updated.
Last update: 2026-10-14 16:22:17 UTC
README
The JsonSchema component generates JSON Schema documents from PHP types, for API documentation (OpenAPI) and for describing tool inputs and outputs to AI agents.
This Component is experimental. Experimental features are not covered by Symfony's Backward Compatibility Promise.
Getting Started
composer require symfony/json-schema
use Symfony\Component\JsonSchema\Configuration; use Symfony\Component\JsonSchema\Dialect; use Symfony\Component\JsonSchema\SchemaDocument; use Symfony\Component\JsonSchema\SchemaGenerator; use Symfony\Component\TypeInfo\Type; $generator = SchemaGenerator::create(); // {"$schema": "...", "$ref": "#/$defs/Book", "$defs": {"Book": {...}, "Author": {...}}} $schema = $generator->generate(Type::object(Book::class)); // an OpenAPI 3.1 request body, restricted to the "book:write" serialization group $schema = $generator->generate(Type::object(Book::class), new Configuration( dialect: Dialect::openApi31(), groups: ['book:write'], )); $schema->getRoot(); // ['$ref' => '#/components/schemas/Book-book.write'] $schema->getDefinitions(); // ['Book-book.write' => [...]] // the schemas of one OpenAPI document, sharing their definitions $document = new SchemaDocument(); $bookSchema = $generator->generate(Type::object(Book::class), new Configuration(Dialect::openApi31()), $document); $authorSchema = $generator->generate(Type::object(Author::class), new Configuration(Dialect::openApi31()), $document); $document->getDefinitions(); // ['Book' => [...], 'Author' => [...]] // a self-contained schema without any reference, e.g. for an MCP tool $schema = $generator->generate(Type::object(Book::class))->flatten(); // the input of a tool, described by the parameters of its method $schema = $generator->generateForParameters((new \ReflectionMethod(SearchBooks::class, '__invoke'))->getParameters()); echo json_encode($schema);