The format has become an informal standard in many contexts of configuration, but many applications on other operating systems use different file name extensions, such as conf and cfg.
This format was used for operating system components, such as device drivers, fonts, and startup launchers.
INI is human-readable and simple to parse, so it is a usable format for configuration files that do not require much greater complexity.
In its broader sense, INI is an informal format which lends itself well to ad-hoc implementation while remaining human-configurable.
INI interpretations depend a lot on personal taste and the needs of the computing environment, such as whitespace preservation, field type information, case sensitivity, or preferred comment delimiters.
Nonetheless, INI-flavoured implementations typically share common design features: a text file consisting of a key-value pair on each line, delimited by an equals sign, organized into sections denoted by square brackets.
Attempts to create parsers able to support as many dialects as possible exist,[13] and in its most complicated interpretation, the INI format is able to express arbitrary S-expressions, making it equivalent to standardised formats like XML or JSON, albeit with a syntax which is not set in stone and to some may feel more comfortable.
As the INI file format is not rigidly defined, many parsers support features beyond those that form the common core.
In the Windows implementation, the equals sign and the semicolon are reserved characters and cannot appear in the key.
Some INI dialects require every key-value pair to be in a section, some allow so-called global properties.
[14] When key-value pairs are grouped, the section name appears on a line by itself, enclosed in square brackets ([, ASCII 0x5B, and ], ASCII 0x5D), and applies to all key-value pairs on subsequent lines until another section is declared.
When required, nesting can be implemented through flattening one's hierarchy and concatenating with a custom delimiter character inside the section name (often ., ASCII 0x2E).
This allows for explicit declaration of whitespace, and/or for quoting of special characters (equals, semicolon, etc.).
The standard Windows function GetPrivateProfileString supports this, and will remove quotation marks that surround the values.
The returned value should be the string "John Doe": INI mapping takes this Profile API call, ignores any path in the given filename and checks to see if there is a Registry key matching the filename under the directory: If this exists, it looks for an entry name matching the requested section.
[62] INI files are typically limited to two levels (sections and properties) and do not handle binary data well.
This decision, however, has not been immune to critiques, due to the fact that the registry is monolithic, opaque and binary, must be in sync with the filesystem, and represents a single point of failure for the operating system.
[citation needed] XML allows arbitrarily complex levels and nesting, and has standard mechanisms for encoding binary data.
[64] The newest INI parsers however allow the same arbitrary level of nesting of XML, JSON, TOML, and YAML, offer equivalent support of typed values and Unicode, although keep the "informal status" of INI files by allowing multiple syntaxes for expressing the same thing.