features are more shared across different parsers than others and can be considered as the hard core of the format (e.g. square brackets for sections, newlines for delimiting different nodes, etc.). Attempts to create parsers able to support as many dialects as possible exist, and in its most advanced form the INI format is able to express a tree object with a power comparable to that of other structured formats (JSON, XML) using a more relaxed syntax. Stable features Keys (properties) The basic element contained in an INI file is the key or property. Every key has a name and a value, delimited by an equals sign (=). The name appears to the left of the equals sign. In the Windows implementation the equal sign and the semicolon are reserved characters and cannot appear in the key. The value can contain any character. name = value Leading and trailing whitespaces around the outside of the property name are ignored. Sections Keys may, but need not, be grouped into arbitrarily named sections. The section name appears on a line by itself, in square brackets ([ and ]). All keys after the section declaration are associated with that section. There is no explicit "end of section" delimiter; sections end at the next section declaration, or at the end of the file. Sections cannot be nested. [section] key1 = a key2 = b Case sensitivity Section and property names are case insensitive. Comments Semicolons (;) at the beginning of the line indicate a comment. Comment lines are ignored. ; comment text Order of sections and properties The order of properties in a section and the order of sections in a file is irrelevant. Varying features As the INI file format is not rigidly defined, many parsers support features beyond the basics already described. The following is a list of some common features, which may or may not be implemented in any given program. Global properties Optional "global" properties may also be allowed, that are declared before any section is declared. Name/value delimiter Some implementations allow a colon (:) as the name/value delimiter (instead of the equals sign). Whitespace is occasionally used in the Linux world. Hierarchy (section nesting) Some parsers allow section nesting, using dots as path delimiters: [section] domain = wikipedia.org [section.subsection] foo = bar In some cases relative nesting is supported too, where a leading dot expresses nesting to the previous