kotlinx-schema-generator-json
Runtime JSON Schema generation from Kotlin classes and functions.
Concrete implementations of schema generators using Kotlin reflection (JVM) and kotlinx-serialization (Multiplatform).
Platform Support:
Multiplatform: Transformers and serialization-based generators (Common)
JVM only: Reflection-based generators (require kotlin-reflect)
Generators
Reflection-Based (JVM Only)
kotlinx.schema.generator.json.ReflectionClassJsonSchemaGenerator - generates schemas from any KClass via reflection
kotlinx.schema.generator.json.ReflectionFunctionCallingSchemaGenerator - generates function calling schemas from KCallable
Serialization-Based (Multiplatform)
SerializationClassJsonSchemaGenerator - generates schemas from @Serializable classes (works on JVM, Native, JS, Wasm)
Examples
Reflection Generator (JVM)
// Class schema generation
val generator = ReflectionClassJsonSchemaGenerator.Default
val schema: JsonObject = generator.generateSchema(User::class)
// Function calling schema generation
val funcGenerator = ReflectionFunctionCallingSchemaGenerator.Default
val funcSchema = funcGenerator.generateSchema(::myFunction)Serialization Generator (Multiplatform)
import kotlinx.serialization.Serializable
import kotlinx.schema.generator.json.serialization.SerializationClassJsonSchemaGenerator
@Serializable
data class User(val name: String, val email: String? = null)
val generator = SerializationClassJsonSchemaGenerator.Default
val schema = generator.generateSchema(User.serializer().descriptor)Features
Reflection Generators (JVM only):
Analyze third-party classes without source modification
Extract default values from data class properties
Recognize foreign annotations (Jackson, Koog, LangChain4j)
OpenAI/Anthropic function calling format
Sealed class hierarchies with
oneOf
Serialization Generators (Multiplatform):
Works on all kotlinx-serialization targets (JVM, Native, JS, Wasm)
Consistent with kotlinx-serialization behavior
@SerialSchemaIgnoreto exclude sealed subtypes from generated schemas
Limitations
Reflection Generators:
Function parameter defaults cannot be extracted (data class property defaults work)
JVM only
Serialization Generators:
Requires
@SerializableannotationCannot extract actual default values (only detects presence)
@Descriptionis not visible inSerialDescriptor(it lacks@SerialInfo). Use@SerialDescriptioninstead, which is recognized automatically without any extra configuration.
Runtime JSON Schema generation from Kotlin classes and functions.
Concrete implementations of schema generators using Kotlin reflection (JVM) and kotlinx-serialization (Multiplatform).
Platform Support:
Multiplatform: Transformers and serialization-based generators (Common)
JVM only: Reflection-based generators (require kotlin-reflect)
Generators
Reflection-Based (JVM Only)
ReflectionClassJsonSchemaGenerator - generates schemas from any KClass via reflection
ReflectionFunctionCallingSchemaGenerator - generates function calling schemas from KCallable
Serialization-Based (Multiplatform)
SerializationClassJsonSchemaGenerator - generates schemas from @Serializable classes (works on JVM, Native, JS, Wasm)
Examples
Reflection Generator (JVM)
// Class schema generation
val generator = ReflectionClassJsonSchemaGenerator.Default
val schema: JsonObject = generator.generateSchema(User::class)
// Function calling schema generation
val funcGenerator = ReflectionFunctionCallingSchemaGenerator.Default
val funcSchema = funcGenerator.generateSchema(::myFunction)Serialization Generator (Multiplatform)
import kotlinx.serialization.Serializable
import kotlinx.schema.generator.json.serialization.SerializationClassJsonSchemaGenerator
@Serializable
data class User(val name: String, val email: String? = null)
val generator = SerializationClassJsonSchemaGenerator.Default
val schema = generator.generateSchema(User.serializer().descriptor)Features
Reflection Generators (JVM only):
Analyze third-party classes without source modification
Extract default values from data class properties
Recognize foreign annotations (Jackson, Koog, LangChain4j)
OpenAI/Anthropic function calling format
Sealed class hierarchies with
oneOf
Serialization Generators (Multiplatform):
Works on all kotlinx-serialization targets (JVM, Native, JS, Wasm)
Consistent with kotlinx-serialization behavior
@SerialSchemaIgnoreto exclude sealed subtypes from generated schemas
Limitations
Reflection Generators:
Function parameter defaults cannot be extracted (data class property defaults work)
JVM only
Serialization Generators:
Requires
@SerializableannotationCannot extract actual default values (only detects presence)
@Descriptionis not visible inSerialDescriptor(it lacks@SerialInfo). Use@SerialDescriptioninstead, which is recognized automatically without any extra configuration.