pkl is a purpose-built configuration-as-code language developed by Apple that combines declarative structure, validation, and tooling to improve over traditional configuration formats like JSON, YAML, or Plists. Its goal is to let you write configuration logic (modules, imports, conditions, defaults) while still producing static outputs suitable for tools that expect JSON, YAML, or other formats. Configurations in Pkl are type-safe and support validation constraints (e.g. bounds, relations) so many errors can be caught before deployment. The language is embeddable, meaning it can run inside applications (Java, Swift, Go, etc.) to load configuration dynamically with the same safety guarantees. There’s also code generation support: writing Pkl modules can generate matching classes or data structures in target languages (Swift, Go, Java, Kotlin) so runtime config and statically typed code stay in sync.
Features
- Declarative configuration language with embedded validation and type checking
- Ability to compile or emit JSON, YAML, Plist, or other static config formats
- Embeddable runtime in multiple languages (Swift, Go, Java, etc.)
- Code generation for typed classes/modules in host languages
- Tooling support: syntax checking, editor integrations, IDE plugins
- Modular configuration with imports, parameter defaults, and expressive scoping