Skip to content
Go to file


>> The Strangely Familiar Config Parser <<

Codecov Code style: black MIT license

Konfik is a simple configuration parser that helps you access your config variables using dot (.) notation. This lets you to do this β€”

foo_bar_bazz = config.FOO.BAR.BAZZ

β€” instead of this β€”

foo_bar_bazz = config["FOO"]["BAR"]["BAZZ"]

Konfik currently supports TOML, YAML, DOTENV and JSON configuration formats.

βš™οΈ Installation

Install Konfik via pip:

pip install konfik

πŸ’‘ Usage

Let's see how you can parse a TOML config file and access the variables there. For demonstration, we'll be using the following config.toml file:

# Contents of `config.toml`

title = "TOML Example"

name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates

  ip = ""
  dc = "eqdc10"

  ip = ""
  dc = "eqdc10"

data = [ ["gamma", "delta"], [1, 2] ]

To parse this in Python:

from konfik import Konfik

# Define the config path
CONFIG_PATH_TOML = "config.toml"

# Initialize the konfik class
konfik = Konfik(config_path=CONFIG_PATH_TOML)

# Serialize and print the confile file

# Get the configuration dictionary from the konfik class
config_toml = konfik.config

# Access and print the variables
title = config_toml.title
owner = config_toml.owner
dob = config_toml.owner.dob
database = config_toml.database.ports
server_ip = config_toml.servers.alpha.ip
clients = config_toml.clients

The .serialize() method will print your entire config file as a colorized Python dictionary object like this:

    'title': 'TOML Example',
    'owner': {
        'name': 'Tom Preston-Werner',
        'dob': datetime.datetime(1979, 5, 27, 7, 32, tzinfo=< object at
    'database': {
        'server': '',
        'ports': [8001, 8001, 8002],
        'connection_max': 5000,
        'enabled': True
    'servers': {
        'alpha': {'ip': '', 'dc': 'eqdc10'},
        'beta': {'ip': '', 'dc': 'eqdc10'}
    'clients': {'data': [['gamma', 'delta'], [1, 2]]}

Konfik also exposes a few command-line options for you to introspect your config file and variables. Run:

konfik --help

This will reveal the options associated with the CLI tool:

usage: konfik [-h] [--show SHOW] [--path PATH] [--serialize] [--version]

Konfik CLI

optional arguments:
  -h, --help   show this help message and exit
  --show SHOW  show variables from config file
  --path PATH  add custom config file path
  --serialize  print the serialized config file
  --version    print konfik-cli version number

To inspect the value of a specific variable in a config.toml file you can run:

konfik --show servers.alpha.ip

If you're using a config that's not named as config.toml then you can deliver the path using the --path argument like this:

konfik --path examples/config.env --show name

πŸ™‹ Why

While working with machine learning models, I wanted an easier way to tune the model parameters without mutating the Python files. I needed something that would simply enable me to access tuple or dictionary data structures from a config file. I couldn't find anything that doesn't try to do a gazillion of other kinds of stuff or doesn't come with the overhead of a significant learning curve.

Neither DOTENV nor YAML catered to my need as I was after something that gives me the ability to store complex data structures without a lot of fuss β€” so TOML it is. However, Konfik also supports DOTENV, JSON and YAML. Moreover, not having to write angle brackets β€”["key"] β€” to access dictionary values is nice!

πŸŽ‰ Contribution

  • Clone the repo

  • Spin up and activate your virtual environment. You can use anything between Python 3.6 to Python 3.9.

  • Install poetry

  • Install the dependencies via:

    poetry install
  • Make your changes to the konfik/ file

  • Run the tests via the following command. Make sure you've Python 3.6 - Python 3.9 installed, otherwise Tox would throw an error.

    make test
  • Write a simple unit test for your change

  • Run the linter via:

    make linter
You can’t perform that action at this time.