History
The primary mechanism of software configuration inExamples of use
Desktop.ini files determine the display of directories in Windows, e.g., the icons for a directory. * Git configuration files are similar to INI files. * Thephp.ini
" configuration file in both Windows and Linux systems.
Example
The following example file has two sections: one for the owner of the software, and one for a payroll database connection. Comments record the last person who modified the file and the reason for modification.Format
INI is an informal format, with features that vary from parser to parser (INI dialects). Some 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,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 anSections
Keys may, but need not, be grouped into arbitrarily named ''sections''. The section name appears on a line by itself, inCase sensitivity
Section and property names are case insensitive.Comments
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:devlist.ini
, in which the backslash was used as nesting delimiter in the form of \B\C/code>; or Microsoft Visual Studio's AEMANAGR.INI
file, which used a completely different syntax in the form of /code> and B,C,P = V
). Some parsers did not offer nesting support at all and were hierarchy-blind, but nesting could still be partially emulated by exploiting the fact that .B.C/code> constitutes a unique identifier.
Comments
Some software supports the use of the number sign (#) as an alternative to the semicolon for indicating comments, especially under Unix, where it mirrors shell comments. The number sign might be included in the key name in other dialects and ignored as such. For instance, the following line may be interpreted as a comment in one dialect, but create a variable named "#var" in another dialect. If the "#var" value is ignored, it would form a pseudo-implementation of a comment.
#var = a
In some implementations, a comment may begin anywhere on a line after a space (inline comments), including on the same line after properties or section declarations.
var = a ; This is an inline comment
foo = bar # This is another inline comment
In others, including the WinAPI
The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations ...
function ''GetPrivateProfileString'', comments must occur on lines by themselves.
Duplicate names
Most implementations only support having one property with a given name in a section. The second occurrence of a property name may cause an abort, it may be ignored (and the value discarded), or it may override the first occurrence (with the first value discarded). Some programs use duplicate property names to implement multi-valued properties.
Interpretation of multiple section declarations with the same name also varies. In some implementations, duplicate sections simply merge their properties, as if they occurred contiguously. Others may abort, or ignore some aspect of the INI file.
Quoted values
Some implementations allow values to be quoted, typically using double quotes
Quotation marks (also known as quotes, quote marks, speech marks, inverted commas, or talking marks) are punctuation marks used in pairs in various writing systems to set off direct speech, a quotation, or a phrase. The pair consists of an ...
and/or apostrophe
The apostrophe ( or ) is a punctuation mark, and sometimes a diacritical mark, in languages that use the Latin alphabet and some other alphabets. In English, the apostrophe is used for two basic purposes:
* The marking of the omission of one o ...
s. This allows for explicit declaration of whitespace, and/or for quoting of special characters (equals, semicolon, etc.). The standard Windows functio
GetPrivateProfileString
supports this, and will remove quotation marks that surround the values.
Escape characters
Some implementations offer varying support for an escape character
In computing and telecommunication, an escape character is a character (computing), character that invokes an alternative interpretation on the following characters in a character sequence. An escape character is a particular case of metacharac ...
, typically with the backslash (\
) following the C syntax. Some support "line continuation", where a backslash followed immediately by EOL (end-of-line) causes the line break to be ignored, and the "logical line" to be continued on the next actual line from the INI file. Implementation of various "special characters" with escape sequences is also seen.
Accessing INI files
Under Windows, the ''Profile API'' is the programming interface used to read and write settings from classic Windows .ini files. For example, th
GetPrivateProfileString
function retrieves a string from the specified section in an initialization file. (The "private" profile is contrasted with , which fetches from WIN.INI
WIN.INI is a basic INI file that was used in versions of the Microsoft Windows operating environment up to Windows 3.11 to store basic settings at boot time. By default, all font, communications drivers, wallpaper, screen saver, and language set ...
.)
The following sample C program demonstrates reading property values from the above sample INI file (let the name of configuration file be dbsettings.ini
):
#include
int main(int argc, _TCHAR *argv[])
The third parameter of the GetPrivateProfileString function is the default value, which are "127.0.0.1" and 143 respectively in the two function calls above. If the argument supplied for this parameter is NULL, the default is an empty string, "".
Under Unix, many different configuration libraries exist to access INI files. They are often already included in frameworks and toolkits. Examples of INI parsers for Unix includ
GLib
iniparser
an
libconfini
Comparison of INI parsers
File mapping
Initialization file mapping creates a mapping between an INI file and the Registry Registry may refer to:
Computing
* Container registry, an operating-system-level virtualization registry
* Domain name registry, a database of top-level internet domain names
* Local Internet registry
* Metadata registry, information system for re ...
. It was introduced with Windows NT and Windows 95 as a way to migrate from storing settings in classic .ini files to the new Windows Registry. File mapping traps the Profile API calls and, using settings from the IniFileMapping
Registry section, directs reads and writes to appropriate places in the Registry.
Using the example below, a string call could be made to fetch the ''name'' key from the ''owner'' section from a settings file called, say, ''dbsettings.ini''. The returned value should be the string "John Doe":
GetPrivateProfileString("owner", "name", ... , "c:\\programs\\oldprogram\\dbsettings.ini");
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:
:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
CurrentVersion\IniFileMapping
If this exists, it looks for an entry name matching the requested section. If an entry is found, INI mapping uses its value as a pointer to another part of the Registry. It then looks up the requested INI setting in that part of the Registry.
If no matching entry name is found and there is an entry under the (Default)
entry name, INI mapping uses that instead. Thus each section name does not need its own entry.
So, in this case the profile call for the wner
WNER (1410 AM broadcasting, AM) is a sports radio station in Watertown (city), New York, Watertown, New York, United States. The station is owned by Stephens Media Group (broadcasting), Stephens Media Group. It broadcasts the national programming ...
/nowiki> section is mapped through to:
where the "name
" Registry entry name is found to match the requested INI key. The value of "John Doe" is then returned to the Profile call. In this case, the @ prefix on the default prevents any reads from going to the dbsettings.ini file on disk. The result is that any settings not found in the Registry are not looked for in the INI file.
The "database
" Registry entry does not have the @ prefix on the value; thus, for the atabase/nowiki> section ''only'', settings in the Registry are taken first followed by settings in the dbsettings.ini file on disk.
Alternatives
Starting with Windows 95
Windows 95 is a consumer-oriented operating system developed by Microsoft as part of its Windows 9x family of operating systems. The first operating system in the 9x family, it is the successor to Windows 3.1x, and was released to manufacturin ...
, Microsoft began strongly promoting the use of Windows registry over the INI file. 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.
Later XML
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing arbitrary data. It defines a set of rules for encoding documents in a format that is both human-readable and machine-readable. T ...
-based configuration files became a popular choice for encoding configuration in text files. XML allows arbitrarily complex levels and nesting, and has standard mechanisms for encoding binary data.
More recently, data serialization formats, such as JSON
JSON (JavaScript Object Notation, pronounced ; also ) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other ser ...
, TOML, and YAML
YAML ( and ) (''see '') is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. YAML targets many of the same communications applications as Exte ...
can serve as configuration formats. These three alternative formats can nest arbitrarily, but have a different syntax than the INI file. Among them, TOML most closely resembles INI, but the idea to make TOML deliberately compatible with a large subset of INI was rejected.
The newest INI parsers however allow the same arbitrary level of nesting of XML
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing arbitrary data. It defines a set of rules for encoding documents in a format that is both human-readable and machine-readable. T ...
, JSON
JSON (JavaScript Object Notation, pronounced ; also ) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other ser ...
, TOML, and YAML
YAML ( and ) (''see '') is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. YAML targets many of the same communications applications as Exte ...
, offer equivalent support of typed values and Unicode
Unicode, formally The Unicode Standard,The formal version reference is is an information technology Technical standard, standard for the consistent character encoding, encoding, representation, and handling of Character (computing), text expre ...
, although keep the "informal status" of INI files by allowing multiple syntaxes for expressing the same thing.libconfini/README
/ref>
See also
* BOOT.INI
* MSConfig
MSConfig (officially called System Configuration in Windows Vista, Windows 7, Windows 8 or Windows 10, or Windows 11 and Microsoft System Configuration Utility in previous operating systems) is a system utility to troubleshoot the Microsoft Windo ...
* Sysedit
Sysedit () is a specialized text/ASCII editor for core Microsoft Windows configuration files (such as , , , , and ). This executable is installed in the Windows system directory: (Windows 3.x and 9x editions) or (Windows NTx editions). Sysedit ...
* SYSTEM.INI
* TOML, a very similar but more formally-specified configuration file format
* WIN.INI
WIN.INI is a basic INI file that was used in versions of the Microsoft Windows operating environment up to Windows 3.11 to store basic settings at boot time. By default, all font, communications drivers, wallpaper, screen saver, and language set ...
* Amiga
Amiga is a family of personal computers introduced by Commodore in 1985. The original model is one of a number of mid-1980s computers with 16- or 32-bit processors, 256 KB or more of RAM, mouse-based GUIs, and significantly improved graphi ...
's IFF
In logic and related fields such as mathematics and philosophy, "if and only if" (shortened as "iff") is a biconditional logical connective between statements, where either both statements are true or both are false.
The connective is bicon ...
files
* .DS_Store
In the Apple macOS operating system, .DS_Store is a file that stores custom attributes of its containing folder, such as folder view options, icon positions, and other visual information. The name is an abbreviation of ''Desktop Services Store' ...
* .properties
.properties is a file extension for files mainly used in Java-related technologies to store the configurable parameters of an application. They can also be used for storing strings for Internationalization and localization; these are known as P ...
References
{{Reflist
* Infobox - http://filext.com/file-extension/INI
* Infobox - https://wikiext.com/ini
External links
libconfini's Library Function Manual
The particular syntax allowed by libconfini.
Cloanto Implementation of INI File Format
The particular syntax allowed by a parser implemented by Cloanto.
A very simple data file metaformat
INI parser tutorial in Apache Groovy.
* Microsoft'
GetPrivateProfileString()
an
WritePrivateProfileStringA()
functions
Configuration files
Computer file formats