{"id":13495147,"url":"https://github.com/chimpler/pyhocon","last_synced_at":"2025-09-01T20:16:01.213Z","repository":{"id":24227715,"uuid":"27620136","full_name":"chimpler/pyhocon","owner":"chimpler","description":"HOCON parser for Python","archived":false,"fork":false,"pushed_at":"2024-05-30T02:08:02.000Z","size":699,"stargazers_count":518,"open_issues_count":103,"forks_count":119,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-06-30T17:18:40.743Z","etag":null,"topics":["configuration","hocon","parser","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chimpler.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-12-06T03:01:57.000Z","updated_at":"2025-06-16T21:12:57.000Z","dependencies_parsed_at":"2024-06-18T12:37:46.692Z","dependency_job_id":null,"html_url":"https://github.com/chimpler/pyhocon","commit_stats":{"total_commits":449,"total_committers":62,"mean_commits":7.241935483870968,"dds":0.3652561247216035,"last_synced_commit":"2bacf9b4e3288ae4621a1875120787d7fb930e9a"},"previous_names":[],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/chimpler/pyhocon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chimpler%2Fpyhocon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chimpler%2Fpyhocon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chimpler%2Fpyhocon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chimpler%2Fpyhocon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chimpler","download_url":"https://codeload.github.com/chimpler/pyhocon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chimpler%2Fpyhocon/sbom","scorecard":{"id":277779,"data":{"date":"2025-08-11","repo":{"name":"github.com/chimpler/pyhocon","commit":"50e9c6ea6a00a11e1526735e25a98989b1c21ad6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":4,"reason":"Found 11/23 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T14:57:36.194Z","repository_id":24227715,"created_at":"2025-08-17T14:57:36.194Z","updated_at":"2025-08-17T14:57:36.194Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273183240,"owners_count":25059814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","hocon","parser","python"],"created_at":"2024-07-31T19:01:31.641Z","updated_at":"2025-09-01T20:16:01.191Z","avatar_url":"https://github.com/chimpler.png","language":"Python","readme":"pyhocon\n=======\n\n[![pypi](http://img.shields.io/pypi/v/pyhocon.png)](https://pypi.python.org/pypi/pyhocon)\n[![Supported Python Versions](https://img.shields.io/pypi/pyversions/Pyhocon.svg)](https://pypi.python.org/pypi/pyhocon/)\n[![Build Status](https://app.travis-ci.com/chimpler/pyhocon.svg?branch=master)](https://app.travis-ci.com/chimpler/pyhocon)\n[![Downloads](https://img.shields.io/pypi/dm/pyhocon.svg)](https://pypistats.org/packages/pyhocon)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/23504feba7974e429c6641c660b7959b)](https://www.codacy.com/gh/chimpler/pyhocon/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=chimpler/pyhocon\u0026amp;utm_campaign=Badge_Grade)\n[![License](https://img.shields.io/pypi/l/Pyhocon.svg)](https://pypi.python.org/pypi/pyhocon/)\n[![Coverage Status](https://coveralls.io/repos/chimpler/pyhocon/badge.svg)](https://coveralls.io/r/chimpler/pyhocon)\n\nHOCON parser for Python\n\n## Specs\n\nhttps://github.com/typesafehub/config/blob/master/HOCON.md\n\n# Installation\n\nIt is available on pypi so you can install it as follows:\n\n    $ pip install pyhocon\n\n## Usage\n\nThe parsed config can be seen as a nested dictionary (with types automatically inferred) where values can be accessed using normal\ndictionary getter (e.g., `conf['a']['b']` or using paths like `conf['a.b']`) or via the methods `get`, `get_int` (throws an exception\nif it is not an int), `get_string`, `get_list`, `get_float`, `get_bool`, `get_config`.\n```python\nfrom pyhocon import ConfigFactory\n\nconf = ConfigFactory.parse_file('samples/database.conf')\nhost = conf.get_string('databases.mysql.host')\nsame_host = conf.get('databases.mysql.host')\nsame_host = conf['databases.mysql.host']\nsame_host = conf['databases']['mysql.host']\nport = conf['databases.mysql.port']\nusername = conf['databases']['mysql']['username']\npassword = conf.get_config('databases')['mysql.password']\npassword = conf.get('databases.mysql.password', 'default_password') #  use default value if key not found\n```\n\n## Example of HOCON file\n\n    //\n    // You can use # or // for comments\n    //\n    {\n      databases {\n        # MySQL\n        active = true\n        enable_logging = false\n        resolver = null\n        # you can use substitution with unquoted strings. If it it not found in the document, it defaults to environment variables\n        home_dir = ${HOME} # you can substitute with environment variables\n        \"mysql\" = {\n          host = \"abc.com\" # change it\n          port = 3306 # default\n          username: scott // can use : or =\n          password = tiger, // can optionally use a comma\n          // number of retries\n          retries = 3\n        }\n      }\n\n      // multi line support\n      motd = \"\"\"\n                Hello \"man\"!\n                How is it going?\n             \"\"\"\n      // this will be appended to the databases dictionary above\n      databases.ips = [\n        192.168.0.1 // use white space or comma as separator\n        \"192.168.0.2\" // optional quotes\n        192.168.0.3, # can have a trailing , which is ok\n      ]\n\n      # you can use substitution with unquoted strings\n      retries_msg = You have ${databases.mysql.retries} retries\n\n      # retries message will be overridden if environment variable CUSTOM_MSG is set\n      retries_msg = ${?CUSTOM_MSG}\n    }\n\n    // dict merge\n    data-center-generic = { cluster-size = 6 }\n    data-center-east = ${data-center-generic} { name = \"east\" }\n\n    // list merge\n    default-jvm-opts = [-XX:+UseParNewGC]\n    large-jvm-opts = ${default-jvm-opts} [-Xm16g]\n\n## Conversion tool\n\nWe provide a conversion tool to convert from HOCON to the JSON, .properties and YAML formats.\n\n```\nusage: tool.py [-h] [-i INPUT] [-o OUTPUT] [-f FORMAT] [-n INDENT] [-v]\n\npyhocon tool\n\noptional arguments:\n  -h, --help                 show this help message and exit\n  -i INPUT, --input INPUT    input file\n  -o OUTPUT, --output OUTPUT output file\n  -c, --compact              compact format\n  -f FORMAT, --format FORMAT output format: json, properties, yaml or hocon\n  -n INDENT, --indent INDENT indentation step (default is 2)\n  -v, --verbosity            increase output verbosity\n```\n\nIf `-i` is omitted, the tool will read from the standard input. If `-o` is omitted, the result will be written to the standard output.\nIf `-c` is used, HOCON will use a compact representation for nested dictionaries of one element (e.g., `a.b.c = 1`)\n\n####  JSON\n\n    $ cat samples/database.conf | pyhocon -f json\n\n    {\n      \"databases\": {\n        \"active\": true,\n        \"enable_logging\": false,\n        \"resolver\": null,\n        \"home_dir\": \"/Users/darthbear\",\n        \"mysql\": {\n          \"host\": \"abc.com\",\n          \"port\": 3306,\n          \"username\": \"scott\",\n          \"password\": \"tiger\",\n          \"retries\": 3\n        },\n        \"ips\": [\n          \"192.168.0.1\",\n          \"192.168.0.2\",\n          \"192.168.0.3\"\n        ]\n      },\n      \"motd\": \"\\n            Hello \\\"man\\\"!\\n            How is it going?\\n         \",\n      \"retries_msg\": \"You have 3 retries\"\n    }\n\n####  .properties\n\n    $ cat samples/database.conf | pyhocon -f properties\n\n    databases.active = true\n    databases.enable_logging = false\n    databases.home_dir = /Users/darthbear\n    databases.mysql.host = abc.com\n    databases.mysql.port = 3306\n    databases.mysql.username = scott\n    databases.mysql.password = tiger\n    databases.mysql.retries = 3\n    databases.ips.0 = 192.168.0.1\n    databases.ips.1 = 192.168.0.2\n    databases.ips.2 = 192.168.0.3\n    motd = \\\n                Hello \"man\"\\!\\\n                How is it going?\\\n\n    retries_msg = You have 3 retries\n\n#### YAML\n\n    $ cat samples/database.conf | pyhocon -f yaml\n\n    databases:\n      active: true\n      enable_logging: false\n      resolver: None\n      home_dir: /Users/darthbear\n      mysql:\n        host: abc.com\n        port: 3306\n        username: scott\n        password: tiger\n        retries: 3\n      ips:\n        - 192.168.0.1\n        - 192.168.0.2\n        - 192.168.0.3\n    motd: |\n\n                Hello \"man\"!\n                How is it going?\n\n    retries_msg: You have 3 retries\n\n## Includes\n\nWe support the include semantics using one of the followings:\n\n    include \"test.conf\"\n    include \"http://abc.com/test.conf\"\n    include \"https://abc.com/test.conf\"\n    include \"file://abc.com/test.conf\"\n    include file(\"test.conf\")\n    include required(file(\"test.conf\"))\n    include url(\"http://abc.com/test.conf\")\n    include url(\"https://abc.com/test.conf\")\n    include url(\"file://abc.com/test.conf\")\n    include package(\"package:assets/test.conf\")\n\nWhen one uses a relative path (e.g., test.conf), we use the same directory as the file that includes the new file as a base directory. If\nthe standard input is used, we use the current directory as a base directory.\n\nFor example if we have the following files:\n\ncat.conf:\n\n    {\n      garfield: {\n        say: meow\n      }\n    }\n\ndog.conf:\n\n    {\n      mutt: {\n        say: woof\n        hates: {\n          garfield: {\n            notes: I don't like him\n            say: meeeeeeeooooowww\n          }\n          include \"cat.conf\"\n        }\n      }\n    }\n\nanimals.conf:\n\n    {\n      cat : {\n        include \"cat.conf\"\n      }\n\n      dog: {\n        include \"dog.conf\"\n      }\n    }\n\nThen evaluating animals.conf will result in the followings:\n\n    $ pyhocon -i samples/animals.conf\n    {\n      \"cat\": {\n        \"garfield\": {\n          \"say\": \"meow\"\n        }\n      },\n      \"dog\": {\n        \"mutt\": {\n          \"say\": \"woof\",\n          \"hates\": {\n            \"garfield\": {\n              \"notes\": \"I don't like him\",\n              \"say\": \"meow\"\n            }\n          }\n        }\n      }\n    }\n\nAs you can see, the attributes in cat.conf were merged to the ones in dog.conf. Note that the attribute \"say\" in dog.conf got overwritten by the one in cat.conf.\n\n## Duration/Period support\n\n### Difference from HOCON spec\n\n* **nanoseconds** supported only in the sense that it is converted to **microseconds** with lowered accuracy (divided by 1000 and rounded to int).\n* **m** suffix only applies to **minutes**. Spec specifies that **m** can also be applied to **months**, but that would cause a conflict in syntax.\n* **months** and **years** only available if dateutils is installed (relativedelta is used instead of timedelta).\n\n## Misc\n\n### with_fallback\n\n- `with_fallback`: Usage: `config3 = config1.with_fallback(config2)` or `config3 = config1.with_fallback('samples/aws.conf')`\n\n### from_dict\n\n```python\nd = OrderedDict()\nd['banana'] = 3\nd['apple'] = 4\nd['pear'] = 1\nd['orange'] = 2\nconfig = ConfigFactory.from_dict(d)\nassert config == d\n```\n\n## TODO\n\n| Items                                             |       Status       |\n| ------------------------------------------------- | :----------------: |\n| Comments                                          | :white_check_mark: |\n| Omit root braces                                  | :white_check_mark: |\n| Key-value separator                               | :white_check_mark: |\n| Commas                                            | :white_check_mark: |\n| Whitespace                                        | :white_check_mark: |\n| Duplicate keys and object merging                 | :white_check_mark: |\n| Unquoted strings                                  | :white_check_mark: |\n| Multi-line strings                                | :white_check_mark: |\n| String value concatenation                        | :white_check_mark: |\n| Array concatenation                               | :white_check_mark: |\n| Object concatenation                              | :white_check_mark: |\n| Arrays without commas                             | :white_check_mark: |\n| Path expressions                                  | :white_check_mark: |\n| Paths as keys                                     | :white_check_mark: |\n| Substitutions                                     | :white_check_mark: |\n| Self-referential substitutions                    | :white_check_mark: |\n| The `+=` separator                                | :white_check_mark: |\n| Includes                                          | :white_check_mark: |\n| Include semantics: merging                        | :white_check_mark: |\n| Include semantics: substitution                   | :white_check_mark: |\n| Include semantics: missing files                  |        :x:         |\n| Include semantics: file formats and extensions    |        :x:         |\n| Include semantics: locating resources             |        :x:         |\n| Include semantics: preventing cycles              |        :x:         |\n| Conversion of numerically-index objects to arrays | :white_check_mark: |\n\n| API Recommendations                               | Status |\n| ------------------------------------------------- | :----: |\n| Conversion of numerically-index objects to arrays |  :x:   |\n| Automatic type conversions                        |  :x:   |\n| Units format                                      |  :x:   |\n| Duration format                                   |  :x:   |\n| Size in bytes format                              |  :x:   |\n| Config object merging and file merging            |  :x:   |\n| Java properties mapping                           |  :x:   |\n\n### Contributors\n\n  - Aleksey Ostapenko ([@kbabka](https://github.com/kbakba))\n  - Martynas Mickevičius ([@2m](https://github.com/2m))\n  - Joe Halliwell ([@joehalliwell](https://github.com/joehalliwell))\n  - Tasuku Okuda ([@okdtsk](https://github.com/okdtsk))\n  - Uri Laserson ([@laserson](https://github.com/laserson))\n  - Bastian Kuberek ([@bkuberek](https://github.com/bkuberek))\n  - Varun Madiath ([@vamega](https://github.com/vamega))\n  - Andrey Proskurnev ([@ariloulaleelay](https://github.com/ariloulaleelay))\n  - Michael Overmeyer ([@movermeyer](https://github.com/movermeyer))\n  - Virgil Palanciuc ([@virgil-palanciuc](https://github.com/virgil-palanciuc))\n  - Douglas Simon ([@dougxc](https://github.com/dougxc))\n  - Gilles Duboscq ([@gilles-duboscq](https://github.com/gilles-duboscq))\n  - Stefan Anzinger ([@sanzinger](https://github.com/sanzinger))\n  - Ryan Van Gilder ([@ryban](https://github.com/ryban))\n  - Martin Kristiansen ([@lillekemiker](https://github.com/lillekemiker))\n  - Yizheng Liao ([@yzliao](https://github.com/yzliao))\n  - atomerju ([@atomerju](https://github.com/atomerju))\n  - Nick Gerow ([@NickG123](https://github.com/NickG123))\n  - jjtk88 ([@jjtk88](https://github.com/jjtk88))\n  - Aki Ariga ([@chezou](https://github.com/chezou))\n  - Joel Grus ([@joelgrus](https://github.com/joelgrus))\n  - Anthony Alba ([@aalba6675](https://github.com/aalba6675))\n  - hugovk ([@hugovk](https://github.com/hugovk))\n  - chunyang-wen ([@chunyang-wen](https://github.com/chunyang-wen))\n  - afanasev ([@afanasev](https://github.com/afanasev))\n  - derkcrezee ([@derkcrezee](https://github.com/derkcrezee))\n  - Roee Nizan ([@roee-allegro](https://github.com/roee-allegro))\n  - Samuel Bible ([@sambible](https://github.com/sambible))\n  - Christophe Duong ([@ChristopheDuong](https://github.com/ChristopheDuong))\n  - lune* ([@lune-sta](https://github.com/lune-sta))\n  - Sascha ([@ElkMonster](https://github.com/ElkMonster))\n  - Tomas Witzany ([@Tommassino](https://github.com/Tommassino))\n  - Gabriel Shaar ([@gabis-precog](https://github.com/gabis-precog))\n  - Brandon Martin ([@bdmartin](https://github.com/bdmartin))\n  - Bryan Richter ([@chreekat](https://github.com/chreekat))\n  - dtarakanov1 ([@dtarakanov](https://github.com/dtarakanov))\n  - Anuj Kumar ([@anujkumar93](https://github.com/anujkumar93))\n  - Guillaume Poulin ([@gpoulin](https://github.com/gpoulin))\n  - Scott Johnson ([@scottj97](https://github.com/scottj97))\n  - Pablo Manso ([@manso92](https://github.com/manso92))\n  - Marc Rijken ([@mrijken](https://github.com/mrijken))\n  - Michel Rouly ([@jrouly](https://github.com/jrouly))\n  - Xing Hai Xu ([@xinghaixu](https://github.com/xinghaixu))\n  - Peter Zaitcev ([@USSX-Hares](https://github.com/USSX-Hares))\n  - Oliver Nemček ([@olii](https://github.com/olii))\n  - Guillaume George ([@LysanderGG](https://github.com/LysanderGG))\n  - Sebastian Straub ([@klamann](https://github.com/klamann))\n  - Oliver Nemček ([@olii](https://github.com/olii))\n  - Jett Jones ([@JettJones](https://github.com/JettJones))\n  - Gabriel Shaar ([@gabis-precog](https://github.com/gabis-precog))\n  - Boris Smidt ([@borissmidt](https://github.com/borissmidt))\n  - Scott Johnson ([@scottj97](https://github.com/scottj97))\n  - Yifei Tao ([@yifeitao](https://github.com/yifeitao))\n  - Kevin Fong ([@KevinMFong](https://github.com/KevinMFong))\n  - Erik Cederstrand ([@ecederstrand](https://github.com/ecederstrand))\n  - Pierre Souchay ([@pierresouchay](https://github.com/pierresouchay))\n  - Josh Soref ([@jsoref](https://github.com/jsoref))\n  - Carol Guo ([@carolguo-dd](https://github.com/carolguo-dd))\n  - Jakub Kubík ([@M0dEx](https://github.com/M0dEx))\n  - Jakub Szewczyk ([@jakub-szewczyk-exa](https://github.com/jakub-szewczyk-exa))\n\n### Thanks\n\n  - Agnibha ([@agnibha](https://github.com/agnibha))\n  - Ernest Mishkin ([@eric239](https://github.com/eric239))\n  - Alexey Terentiev ([@alexey-terentiev](https://github.com/alexey-terentiev))\n  - Prashant Shewale ([@pvshewale](https://github.com/pvshewale))\n  - mh312 ([@mh321](https://github.com/mh321))\n  - François Farquet ([@farquet](https://github.com/farquet))\n  - Gavin Bisesi ([@Daenyth](https://github.com/Daenyth))\n  - Cosmin Basca ([@cosminbasca](https://github.com/cosminbasca))\n  - cryptofred ([@cryptofred](https://github.com/cryptofred))\n  - Dominik1123 ([@Dominik1123](https://github.com/Dominik1123))\n  - Richard Taylor ([@richard534](https://github.com/richard534))\n  - Sergii Lutsanych ([@sergii1989](https://github.com/sergii1989))\n\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchimpler%2Fpyhocon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchimpler%2Fpyhocon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchimpler%2Fpyhocon/lists"}