toml_edit 0.19.15

Yet another format-preserving TOML parser.


Build Status codecov docs Join the chat at

This crate allows you to parse and modify toml documents, while preserving comments, spaces and relative order or items.

toml_edit is primarily tailored for cargo-edit needs.


use toml_edit::{Document, value};

fn main() {
    let toml = r#"
"hello" = 'toml!' # comment
    let mut doc = toml.parse::<Document>().expect("invalid doc");
    assert_eq!(doc.to_string(), toml);
    // let's add a new key/value pair inside a.b: c = {d = "hello"}
    doc["a"]["b"]["c"]["d"] = value("hello");
    // autoformat inline table a.b.c: { d = "hello" }
    doc["a"]["b"]["c"].as_inline_table_mut().map(|t| t.fmt());
    let expected = r#"
"hello" = 'toml!' # comment
c = { d = "hello" }
    assert_eq!(doc.to_string(), expected);


Things it does not preserve:

  • Scattered array of tables (tables are reordered by default, see test).
  • Order of dotted keys, see issue.


Licensed under either of


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.