This config format is meant to encode arrays of data, primarily strings. The top level of the config file is an array, and array depth is controlled by indentation. The format should be quick to parse and encode, and must support unicode (UTF-8). Unfortunately no appropriate file formats are supported by PHP natively: XML is too slow and verbose, JSON would require some extensions and is more difficult to write, INI is not flexible enough and would put make it impossible to express some string values. YAML is probably closest, but optional and unmaintained. The format: By default, a line specifies a key in an array. When not followed by a colon, the value associated with the key is assumed to be another array. Outer array Inner array # => array("Outer array" => array("Inner array" => array())) When the key is followed by a colon, the value is a "simple" one, a string which may evaluate to one of a few special values (true, false and null). It may be written over multiple (indented) lines, in which case the result is obtained by removing the indentation and trimming the string. Simple key: Long value over multiple lines # => array("Simple key" => "Long value over\nmultiple lines") Keys and values may be quoted. Inside quotation marks, the escape sequences \t, \r, \n and \" are recognized. When not quoted, keys and values are automatically trimmed. Quoting also prevents special values (true, false, null) and numbers (0, 0.0, 0.0E0..) from being automatically interpreted. Three quotation marks (""") may be used to encode multi-line strings without indenting the contents. Between the two delimiters a single quotation mark (") does not need to be escaped, unless it occurs at the end of the string. When a line begins with a hyphen and space, the key is taken to be the next numeric index of the array. The following value is appended to the array. Certain special directives are supported: @tabsize n, for specifying the tab size of the file (default 4) @cfg-version n, for specifying the config format version number @info, for specifying metadata. should be followed by an indented block specifying key/value pairs. Others may be added to specify string formatting features (@raw, @binary..) and array manipulations (@remove key, @update key, @append key..) Single-line comments may be prefixed with #. Multi-line comments span from {# to #}. Some things to add: Use "--" on a line to append a new array to the current array (starting with "-" assumes a simple value). Add inline array support along the lines of [value1, value2]?