Generate Kotlin type definitions from CDDL as
data classes,typealiases andenums.
cddl2kotlin converts a parsed CDDL schema into Kotlin source code. Groups become
data classes, named assignments become typealiases, and choices become
enum classes or sealed interfaces.
Use the CLI:
npm install cddl2kotlinUse the programmatic API:
npm install cddl cddl2kotlincddl2kotlin maps common CDDL constructs into idiomatic Kotlin, including:
- named CDDL assignments to
typealiasdeclarations - groups to
data classdeclarations (empty groups become a plainclass) - optional group fields to nullable types with a
= nulldefault - arrays to
List<T> - record groups (
*text => T) toMap<String, T> - string-literal choices to
enum classdeclarations - choices of named types to
sealed interfaces with wrapperdata classes
It also normalizes names for Kotlin code by turning type names into PascalCase,
field names into camelCase (escaping Kotlin keywords with backticks) and enum
constants into UPPER_SNAKE_CASE.
Because Kotlin has no structural union or intersection types, inline unions of
more than one concrete type fall back to Any?, and group mixins (unnamed group
references) are flattened by inlining the referenced group's fields.
The CLI reads a CDDL file and writes generated Kotlin code to stdout, so the
normal workflow is to redirect the output into a .kt file.
npx cddl2kotlin ./path/to/schema.cddl > ./Types.ktShow help:
npx cddl2kotlin --helpThe package exports a single transform() function. It accepts the parsed CDDL
AST and returns the generated Kotlin source as a string.
import { parse } from 'cddl'
import { transform } from 'cddl2kotlin'
const ast = parse('./schema.cddl')
const kotlin = transform(ast)
console.log(kotlin)Input CDDL:
person = {
name: tstr,
age: uint,
?nickname: tstr,
}
Generated Kotlin:
data class Person(
val name: String,
val age: Long,
val nickname: String? = null
)- Generated files include a header comment with the
cddl2kotlinversion used. - The CLI validates that the input file exists before attempting to parse it.
If you want to contribute fixes or improvements, see the repository contributing guide.