| Crates.io | rpkl |
| lib.rs | rpkl |
| version | 0.6.0 |
| created_at | 2024-06-28 07:07:20.490913+00 |
| updated_at | 2025-07-27 15:21:09.279432+00 |
| description | Bindings and codegen for Apple's Pkl configuration language |
| homepage | |
| repository | https://github.com/z-jxy/rpkl |
| max_upload_size | |
| id | 1286495 |
| size | 194,955 |
Language bindings to Pkl for Rust.
Requires the pkl binary to be available on your path. You can install pkl for your os using the steps from their docs: https://pkl-lang.org/main/current/pkl-cli/index.html#installation
ip = "127.0.0.1"
database {
username = "admin"
password = "secret"
}
#[derive(Deserialize)]
struct Config {
ip: String,
database: Database,
}
#[derive(Deserialize)]
struct Database {
username: String,
password: String,
}
let config: Config = rpkl::from_config("./config.pkl")?;
You can pass options to the evaluator, such as properties, by using [from_config_with_options].
username = read("prop:username")
password = read("prop:password")
let options = EvaluatorOptions::default()
.properties([("username", "root"), ("password", "password123")]);
let config: Config = rpkl::from_config_with_options("./config.pkl", Some(options))?;
Codegen can be enabled by adding the codegen feature.
use rpkl::{api::Evaluator, codegen::CodegenOptions};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut evaluator = Evaluator::new()?;
let pkl_mod = evaluator.evaluate_module("example.pkl")?;
let code: String = pkl_mod.codegen()?;
std::fs::write("src/example.rs", code)?;
Ok(())
}
You can also generate code using the experimental CLI.
For more info on codegen, see the docs.