kung-fig

The Kung Fu of configuration files!

Usage no npm install needed!

<script type="module">
  import kungFig from 'https://cdn.skypack.dev/kung-fig';
</script>

README

Kung-Fig

Kung Fig!

The Kung Fu of configuration files!

Kung-Fig is a wonderful file format named KFG, its parser, its stringifier, and a set of great tools.

It is great for:

  • Configuration files
  • Hierarchical configuration files
  • Global/local and vanilla/plugins override and extension management
  • Application data
  • Saving user prefs in a human-friendly format
  • Building scripting language on top of it
  • Game characters, weapons, armors, spells, stats, bonuses, etc
  • Internationalization/localization
  • ... and many more

Now, look at this impressive list of features:

  • Human friendly data structure representation (similar to YAML, but potentially better)
  • Comments support
  • Multi-line strings support, with or without newline folding
  • Sections
  • Nice Map and dictionnary syntax
  • Classes/Constructors (date, binary data, regular expression, and custom constructors!)
  • Including files (.kfg, .json, .js, .txt, etc), featuring globs and recursive parent search
  • Relational data representation support
  • Meta-tags (headers)
  • Tags (to build scripting language on top of KFG)
  • References (i.e. referencing a part of the document from elsewhere)
  • Template strings and internationalization/localization
  • Expressions (arithmetic, logic, maths, etc)
  • Tree operations syntax (merge, combine, etc)
  • ... and many more!

Official support of the Atom editor:

A KFG Primer

Example of simple document:

# This is a comment!

# Set few properties:
first-name: Joe
last-name: Doe
age: 47

# This property contains an array:
interest:
    - science
    - literature
    - computer

# Use the special 'date' constructor:
birth-date: <date> Fri Jan 02 1970 11:17:36 GMT+0100 (CET)

# This include a file
items: @@path/to/file/items.kfg

Example featuring tags, suitable for for scripting (here Spellcast Scripting):

# Meta-tags (like headers)
[[doctype spellcast/story]]
[[locales locales/*]]

# Tags
[chapter story]
    
    [scene intro]
        [image] village.png
        [music] intro-theme.ogg
        
        [message]
            gt; Once upon a time, there was a ${character.class}...
        
        [next end]
    
    [scene end]
        [image] castle.png
        [music] ending-theme.ogg
        
        [message]
            gt; You found the master and learn everything he taught to you.
            gt; You became famous in the entire country.
        
        [win]

Table of Contents