Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Parsetoml is a Nim library to parse TOML files ( Currently it supports v0.5.0 of the TOML specification. It passes all of the validation tests in the validation suite, including various 0.5.0 examples.


Use nimble to install it:

nimble install parsetoml



Below are just few snippets of code to show some basic usage of this library. Refer to the above linked documentation for complete details.

Importing the library

import parsetoml

Parsing TOML content

let table1 = parsetoml.parseString("""
file_name = "test.txt"

verbose = true
let table2 = parsetoml.parseFile(f)
let table3 = parsetoml.parseFile("test.toml")

Using the parsed content

The return value of parseString and parseFile is a reference to the TomlValue object, TomlValueRef.

Several getter procs are available to query for specific types of fields for an input TomlValueRef variable:

  • getStr : Get the string value.
  • getInt : Get the integer value.
  • getFloat : Get the float value.
  • getBool : Get the bool value.
  • getElems : Get a sequence of TomlValueRef values.
  • getTable : Get a TomlTableRef value.

Using the same table1 variable from the above example:

# Get the value, or fail if it is not found
let verboseFlag = table1["output"]["verbose"].getBool()

# You can specify a default as well
let input = table1["input"]["file_name"].getStr("some_default.txt")

Transforming the parsed date to JSON / Table

For the validation this library needs to output JSON. Therefore it has a proc to convert the TomlValueRef to JSON nodes.

import parsetoml, json

let table1 = parsetoml.parseString("""
file_name = "test.txt"

verbose = true

echo table1.toJson.pretty()

Above outputs:

  "input": {
    "file_name": {
      "type": "string",
      "value": "test.txt"
  "output": {
    "verbose": {
      "type": "bool",
      "value": "true"

To see the parsed TOML in an alternative Nim AST style indented format, use parsetoml.dump(table1.getTable()) with the above example, and you will get:

input = table
    file_name = string("test.txt")
output = table
    verbose = boolean(true)


Parsetoml is released under a MIT license.