Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
INI file
Configuration file format

An INI file is a configuration file for computer software that consists of plain text with a structure and syntax comprising key–value pairs organized in sections. The name of these configuration files comes from the filename extension INI, short for initialization, used in the MS-DOS operating system which popularized this method of software configuration. 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.

We don't have any images related to INI file yet.
We don't have any YouTube videos related to INI file yet.
We don't have any PDF documents related to INI file yet.
We don't have any Books related to INI file yet.
We don't have any archived web articles related to INI file yet.

History

The primary mechanism of software configuration in Windows was originally a text file format that comprised text lines with one key–value pair per line, organized into sections. This format was used for operating system components, such as device drivers, fonts, and startup launchers. INI files were also generally used by applications to store individual settings.3

The format was maintained in 16-bit Microsoft Windows platforms up through Windows 3.1x. Starting with Windows 95 Microsoft favored the use of the Windows Registry and began to steer developers away from using INI files for configuration. All subsequent versions of Windows have used the Windows Registry for system configuration, but applications built on the .NET Framework use special XML .config files. The initialization-file functions are still available in Windows and developers may still use them.

Besides Windows software, platform-agnostic software may use this file format for configuration. Some Unix-like config files also use a similar format. INI is human-readable and simple to parse, so it is a usable format for configuration files that do not require much greater complexity.

Prevalence

What follows is a non-exhaustive list of places in which INI files appear.

  • Desktop.ini files are still used in Windows to configure properties of directories, e.g. specifying the icon for a folder.45
  • PHP's php.ini file employs the INI format.67
  • Git's .git/config file is written in an INI flavour.8
  • freedesktop.org *.desktop entries are written in an INI flavour.9
  • systemd *.service unit configuration files are written in INI.10
  • Netatalk's afp.conf file is written in an INI-style configuration language.11
  • Pacman's pacman.conf file is written in INI.12
  • Forgejo's app.ini configuration file is written in INI.13

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.

; last modified 1 April 2001 by John Doe [owner] name = John Doe organization = Acme Widgets Inc. [database] ; use IP address in case network name resolution is not working server = 192.0.2.62 port = 143 file = "payroll.dat"

Format

In its broader sense, INI is an informal format which lends itself well to ad-hoc implementation while remaining human-configurable. Consequently, many varying specifications (where sometimes a parser implementation is the only specification ever written) exist, called INI dialects.

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. This makes INI prone to proliferation. 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,14 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. Implemented support is highly volatile.

Key-value pairs

Data in INI is held in key-value pairs called key or property. Key may thus either refer to the entire key-value pair or only its key. A value is also called property name. In its textual representation, the key-value pair is represented by either a line or a multiline where the start of the value is indicated by a delimiter, most often an equals sign (=, ASCII 0x3D) but sometimes also a colon (:, ASCII 0x3A) or whitespace (occasionally used in the GNU world15). The key's key appears to the left of the delimiter, is often non-empty and should not contain the delimiter. Some flavours allow escape sequences in the value.

In the Windows implementation, the equals sign and the semicolon are reserved characters and cannot appear in the key. Any whitespace surrounding the key is stripped by the parser. The value can contain any character (in Windows-style, no whitespace surrounds the delimiter: e.g. IconFile=Folder.ico).

Key-value pairs may textually look like:

key=key=v name =value sem=; semver=v5822.433.2

Sections

Key-value pairs may be grouped under a section. Some INI dialects require every key-value pair to be in a section, some allow so-called global properties.16 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. There is no explicit "end of section" delimiter (such as e.g. XML's </tag>). Thus, sections syntactically cannot be arbitrarily nested. 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). One level of nesting is often supported, called subsections.

Exemplary INI document employing nested sections:

[project] name = orchard rental service (with app) target region = "Bay Area" ; TODO: advertise vacant positions legal team = (vacant) [fruit "Apple"] trademark issues = foreseeable taste = known [fruit.Date] taste = novel Trademark Issues="truly unlikely" [fruit "Raspberry"] anticipated problems ="logistics (fragile fruit)" Trademark Issues=\ possible [fruit.raspberry.proponents.fred] date = 2021-11-23, 08:54 +0900 comment = "I like red fruit." [fruit "Date/proponents/alfred"] comment: Why, \ \ \ I would buy dates. # folding: Is "\\\\\nn" interpreted as "\\n" or "\n"? # Or does "\\\\" prevent folding? editor =My name may contain a \\ newline.

Hierarchy (section nesting)

Some parsers allow section nesting, using dots as path delimiters:

[section] domain = example.com [section.subsection] foo = bar

In some cases relative nesting is supported too, where a leading dot expresses nesting to the previous section:17

[section] domain = example.com [.subsection] foo = bar

Historically, ways for expressing nesting alternative to the dot have existed too (for example, IBM's driver file for Microsoft Windows devlist.ini, in which the backslash was used as nesting delimiter in the form of [A\B\C]; or Microsoft Visual Studio's AEMANAGR.INI file, which used a completely different syntax in the form of [A] 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 [A.B.C] constitutes a unique identifier.

Case sensitivity

Section and property names in Windows are case insensitive.18 Most Unix-style INI interpretations forbid case folding altogether, although case folding for the section name19 or key20 is sometimes allowed.

Comments

A line with contiguous trailing whitespace followed by a semicolon (;, ASCII 0x3E) indicates a comment. Some INI dialects furthermore allow use of the number sign (#, ASCII 0x23) to denote a comment, mirroring Unix shell comments. Some INI dialects but not all allow a comment on a key-value pair line or section line (called in-line comment), where some require whitespace separating the value or section closing bracket from the comment. The number sign might be nonetheless included in the key name in some dialects and ignored as such. Comment lines are designed to be ignored by a parser.

#! /bin/convert-ini-to-perl | perl | ssh wikipedia.org upload --sanitise=no ; Ambiguous without further knowledge of the INI dialect: ; is the value "live" or "live # dangerously"? I like to = live # dangerously #var = a var = a ; This is an inline comment foo = bar # This is another inline comment

Under the WinAPI's GetPrivateProfileString's dialect, comments must occur on lines by themselves.

Order of sections and properties

The order of properties in a section and the order of sections in a file is irrelevant.

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 and/or apostrophes. 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.

Line continuation

Emulating C syntax, some dialects allow line folding by a backslash (\, ASCII 0x5C) as the last character on a line.21 In such line continuation, backslashes followed immediately by EOL (end-of-line) cause the backslash and line break to be dropped, transforming the document's lines into logical lines.

Escape characters

Some dialects offer varying support for character escaping, typically with the backslash character (\, ASCII 0x5C) as a metacharacter and emulating C syntax.22

It is not wise to blindly interpret escape sequences as some specifications explicitly mute their metacharacter for common escape sequences.2324

Common escape sequences
SequenceMeaning
\\\ (a single backslash, escaping the escape character)
\'Apostrophe
\"Double quotes
\0Null character
\aBell/Alert/Audible
\bBackspace, Bell character for some applications
\tTab character
\rCarriage return
\nLine feed
\;Semicolon
\#Number sign
\=Equals sign
\:Colon
\xhhhhUnicode character with code point 0xhhhh, encoded either in UTF-8 or local encoding

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, the GetPrivateProfileString function retrieves a string from the specified section in an initialization file. (The "private" profile is contrasted with GetProfileString, which fetches from WIN.INI.)

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 <windows.h> int main(int argc, TCHAR *argv[]) { TCHAR dbserver[1000]; int dbport; GetPrivateProfileString(TEXT("database"), TEXT("server"), TEXT("127.0.0.1"), dbserver, sizeof(dbserver) / sizeof(dbserver[0]), TEXT(".\\dbsettings.ini")); dbport = GetPrivateProfileInt(TEXT("database"), TEXT("port"), 143, TEXT(".\\dbsettings.ini")); // N.B. WritePrivateProfileInt() does not exist, only WritePrivateProfileString() return 0; }

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 include GLib, iniparser and libconfini.

Comparison of INI parsers

NameSections supportSection nesting supportDisabled entry recognition25Multi-line support26Value typesRead/Write supportPlatformLicenseProgramming languageLatest release version
Python ConfigParser2728YesYesNoNon-standard29Boolean, Number, StringRead + Write*BSD, Linux, macOS, WindowsPSFLC (implementation), Python (usage)3.9.730
GLib31YesYesNoNoBoolean, Number, String, ArrayRead + Write*BSD, Linux, macOS, WindowsLGPLC2.66.7 (February 11, 2021; 4 years ago (2021-02-11)) [±]32

33

inifile34YesNoNoNoBoolean, Number, StringRead + Write*BSD, Linux, macOS, WindowsApacheGo1.2.035
inih36YesNoNoNon-standard37Boolean, Number, StringRead*BSD, Linux, macOS, WindowsBSDC5338
iniparser39YesNoNoYesBoolean, Number, StringRead + Write*BSD, Linux, macOS, WindowsMITC4.2.440
Java (via java.util.Properties)41NoNoNoYesStringRead + WritePlatform-agnosticDual-license: GPL version 2 with classpath exception,42 and a proprietary license.43C (implementation), Java (usage)

23.0.1 (October 15, 2024; 6 months ago (2024-10-15)44) [±]21.0.5 LTS (October 15, 2024; 6 months ago (2024-10-15)45) [±]17.0.13 LTS (October 15, 2024; 6 months ago (2024-10-15)46) [±]11.0.25 LTS (October 15, 2024; 6 months ago (2024-10-15)47) [±]8u431 LTS (October 15, 2024; 6 months ago (2024-10-15)48) [±]

libconfini49YesYesYesYesBoolean, Number, String, ArrayRead*BSD, Linux, macOS, WindowsGPLC1.16.250
PHP (via parse_ini_file())51YesYesYesNoBoolean, Number, String, NullReadLinux, macOS, WindowsPHP License v3.0152C (implementation), PHP (usage)8.4.653  (10 April 2025; 33 days ago (10 April 2025))
PyINI54YesNoYesYesBoolean, Number, StringRead + WritePlatform-agnosticGPLPython1.055
python-ini56YesNoNoYesBoolean, Number, String, NullRead + WritePlatform-agnosticBSDPython1.1.0
RudeConfig57YesNoNoNoBoolean, Number, StringRead + WriteLinux, WindowsGPLC++Discontinued – last version is 5.0.5, from November 200958
Windows APIYesNoNoNoNumber, String, StructRead + Write (non-destructive)WindowsProprietaryC24H2 (10.0.26100.4061) (May 13, 2025; 0 days ago (2025-05-13)59) [±]
Wine (implementation of Windows API)YesNoNoNoNumber, String, StructRead + Write (non-destructive)Linux, macOS, WindowsLGPLC10.060  21 January 2025; 3 months ago (21 January 2025)
Rust configparser61YesNoNoNoBoolean, Number, StringRead + Write*BSD, Linux, macOS, WindowsMIT or LGPL v3.0+Rust3.0.262 11 September 2022; 3 months ago
java-ini-parser63YesNoYesYesBoolean, Number, StringRead + WritePlatform-agnosticApacheJava1.464 29 December 2022; 3 days ago
NameSections supportSection nesting supportDisabled entry recognitionMulti-line supportValue typesRead/Write supportPlatformLicenseProgramming languageLatest release version

File mapping

Initialization file mapping creates a mapping between an INI file and the Windows registry.6566 It was introduced with Windows NT and Windows 95 as a way to migrate from storing settings in classic .ini files to the new 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 <em >(Default)</em> entry name, INI mapping uses that instead. Thus each section name does not need its own entry.

HKEY_LOCAL_MACHINE\Software\...\IniFileMapping\dbsettings.ini
(Default)@USR:Software\oldprogs\inisettings\all
databaseUSR:Software\oldprogs\inisettings\db

So, in this case the profile call for the [owner] section is mapped through to:

HKEY_CURRENT_USER\Software\oldprogs\inisettings\all
nameJohn Doe
organizationAcme Products

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 [database] section only, settings in the Registry are taken first followed by settings in the dbsettings.ini file on disk.

Alternatives

Starting with Windows 95, Microsoft began strongly promoting the use of the Windows Registry over INI files.67 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.68

Later XML-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, TOML, and YAML 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.69

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.70

See also

References

  1. Microsoft TechNet: Configure an Ini File Item https://technet.microsoft.com/en-us/library/cc731332.aspx

  2. .conf initialization files http://www.fileinfo.com/extension/conf

  3. Microsoft: Windows NT Workstation Resource Kit https://www.microsoft.com/resources/documentation/windowsnt/4/workstation/reskit/en-us/26_ini.mspx

  4. Microsoft Learn (2022-02-08). "How to Customize Folders with Desktop.ini". Retrieved 2024-01-10. https://learn.microsoft.com/en-us/windows/win32/shell/how-to-customize-folders-with-desktop-ini

  5. Codrut Neagu, "Why Are There Two Desktop.ini Files On My Desktop & What Do They Do?". https://www.digitalcitizen.life/why-are-there-two-desktopini-files-my-desktop-what-do-they-do

  6. Rasmus Lerdorf, Kevin Tatroe, Peter MacIntyre. "Programming PHP". Sections "parse_ini_file", "Extension INI Entries", etc. https://books.google.com/books?id=h-E1lVko-skC

  7. Christian Wenz. "PHP and MySQL Phrasebook". section "Parsing INI Files". quote: "... the INI file format ... was very widely used in the Windows world, but today also drives the configuration of software products like PHP. For instance, ... php.ini" https://books.google.com/books?id=2ndKH7roqiYC

  8. "git-config CONFIGURATION FILE". https://git-scm.com/docs/git-config#_configuration_file

  9. "Basic format of the file". specifications.freedesktop.org. https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s03.html

  10. "systemd.service". www.freedesktop.org. https://www.freedesktop.org/software/systemd/man/systemd.service.html

  11. "afp.conf — Netatalk configuration file". Retrieved 2024-01-10. https://netatalk.sourceforge.io/3.1/htmldocs/afp.conf.5.html

  12. "pacman.conf(5)". archlinux.org. https://archlinux.org/pacman/pacman.conf.5.html

  13. "Configuration Cheat Sheet". forgejo.org. Retrieved 2025-03-12. https://forgejo.org/docs/v10.0/admin/config-cheat-sheet/

  14. libconfini's Library Function Manual https://madmurphy.github.io/libconfini/html/libconfini.html

  15. libconfini's Library Function Manual https://madmurphy.github.io/libconfini/html/libconfini.html

  16. Apache Documentation for org.apache.commons.configuration2.INIConfiguration, The Apache Software Foundation https://commons.apache.org/proper/commons-configuration/apidocs/org/apache/commons/configuration2/INIConfiguration.html

  17. libconfini's Library Function Manual https://madmurphy.github.io/libconfini/html/libconfini.html

  18. This includes the Windows implementation. See "GetPrivateProfileString function". Microsoft Developer Network. Microsoft. Retrieved 2012-06-02. http://msdn.microsoft.com/en-us/library/ms724353.aspx

  19. The Git Project. "config.txt". Retrieved 2024-01-10. https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/config.txt?id=a54a84b333adbecf7bc4483c0e36ed5878cac17b#n54

  20. The Git Project. "config.txt". Retrieved 2024-01-10. https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/config.txt?id=a54a84b333adbecf7bc4483c0e36ed5878cac17b#n63

  21. The Git Project. "config.txt". Retrieved 2024-01-10. https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/config.txt?id=a54a84b333adbecf7bc4483c0e36ed5878cac17b#n66

  22. Cloanto Implementation

  23. The Git Project. "config.txt". Retrieved 2024-01-10. https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/config.txt?id=a54a84b333adbecf7bc4483c0e36ed5878cac17b#n47

  24. The Git Project. "config.txt". Retrieved 2024-01-10. https://git.kernel.org/pub/scm/git/git.git/tree/Documentation/config.txt?id=a54a84b333adbecf7bc4483c0e36ed5878cac17b#n79

  25. It is a common practice among authors of INI files to "comment out" unwanted entries in order to disable them, instead of removing them completely. See the key a in the following example:[section]#a=ab=b

  26. The standard syntax for line continuation refers here to the sequence of a backslash followed by line break, as implemented by iniparser, libconfini and java.util.Properties /wiki/Backslash

  27. Fredrik Lundh. "Python Standard Library". 2001. Section "The ConfigParser Module". p. 143 https://books.google.com/books?id=PIlQzfnpn5cC

  28. "ConfigParser - Configuration file parser". https://docs.python.org/3/library/configparser.html

  29. Following the syntax of the language it is designed to work with (Python), to span a node over multiple lines ConfigParser requires a deeper indentation in the lines that follow, instead of the more common backslash + line break (see: configparser — Configuration file parser) /wiki/Python_(programming_language)

  30. Python Documentation by Version https://www.python.org/doc/versions/

  31. GLib Key–value file parser https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html

  32. Withnall, Philip (11 Feb 2021). "glib 2.66.7". GNOME ftp-release (Mailing list). Retrieved 12 February 2021. https://mail.gnome.org/archives/ftp-release-list/2021-February/msg00024.html

  33. Releases · GNOME/glib https://github.com/GNOME/glib/releases

  34. inifile documentation https://github.com/graniticio/inifile

  35. Releases · inifile https://github.com/graniticio/inifile/releases

  36. inih README https://github.com/benhoyt/inih/blob/master/README.md

  37. Using indentation, explicitly following ConfigParser's approach (see the project's documentation for more information)

  38. Releases · benhoyt/inih https://github.com/benhoyt/inih/releases

  39. iniparser documentation https://iniparser.gitlab.io/iniparser/

  40. Releases · iniparser/iniparser https://gitlab.com/iniparser/iniparser/-/releases

  41. Properties (Java Platform SE 8) https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Properties.html

  42. "OpenJDK: GPLv2 + Classpath Exception". Openjdk.java.net. 1989-04-01. Retrieved 2016-02-09. https://openjdk.java.net/legal/gplv2+ce.html

  43. "BCL For Java SE". Oracle.com. 2013-04-02. Retrieved 2016-02-09. https://www.oracle.com/technetwork/java/javase/terms/license/index.html

  44. "Java™ SE Development Kit 23, 23.0.1 Release Notes". Oracle Corporation. Retrieved 2024-10-16. https://www.oracle.com/java/technologies/javase/23-0-1-relnotes.html

  45. "Java™ SE Development Kit 21, 21.0.5 Release Notes". Oracle Corporation. Retrieved 2024-10-16. https://www.oracle.com/java/technologies/javase/21-0-5-relnotes.html

  46. "Java™ SE Development Kit 17, 17.0.13 Release Notes". Oracle Corporation. Retrieved 2024-10-16. https://www.oracle.com/java/technologies/javase/17-0-13-relnotes.html

  47. "Java™ SE Development Kit 11, 11.0.25 Release Notes". Oracle Corporation. Retrieved 2024-10-16. https://www.oracle.com/java/technologies/javase/11-0-25-relnotes.html

  48. "Java™ SE Development Kit 8, Update 431 Release Notes". Oracle Corporation. Retrieved 2024-10-16. https://www.oracle.com/java/technologies/javase/8u431-relnotes.html

  49. libconfini documentation https://madmurphy.github.io/libconfini/

  50. Releases · madmurphy/libconfini https://github.com/madmurphy/libconfini/releases

  51. PHP. "parse_ini_file() — Parse a configuration file". Official PHP documentation. Retrieved 2022-07-19. /wiki/PHP

  52. PHP License v3.01 https://www.php.net/license/3_01.txt

  53. "Release 8.4.6". 10 April 2025. https://github.com/php/php-src/releases/tag/php-8.4.6

  54. PyINI https://gitlab.com/whoatemybutter/pyini/

  55. Tags · whoatemybutter / PyINI https://gitlab.com/whoatemybutte7/pyini/-/tags

  56. python-ini https://github.com/ldthomas/python-ini

  57. RudeConfig documentation http://rudeserver.com/config/index.html

  58. Releases · RudeConfig http://rudeserver.com/config/download.html

  59. "May 13, 2025—KB5058411 (OS Build 26100.4061)". Microsoft Support. Microsoft. https://support.microsoft.com/help/5058411

  60. "Wine 10.0 Released". 21 January 2025. Retrieved 21 January 2025. https://www.winehq.org/news/2025012101

  61. "configparser on crates.io". crates.io. 2022-12-12. Archived from the original on 2022-12-12. Retrieved 2022-12-12. https://crates.io/crates/configparser

  62. "configparser on crates.io". crates.io. 2022-12-12. Archived from the original on 2022-12-12. Retrieved 2022-12-12. https://crates.io/crates/configparser

  63. java-ini-parser github page https://github.com/vincentrussell/java-ini-parser

  64. "configparser on crates.io". crates.io. 2022-12-12. Archived from the original on 2022-12-12. Retrieved 2022-12-12. https://crates.io/crates/configparser

  65. Initialization Files and the Registry, Windows NT Workstation Resource Kit, Microsoft TechNet https://technet.microsoft.com/en-ie/library/cc722567(en-us).aspx

  66. Administering the NT Registry, Managing the Windows NT Registry, Paul Robichaux, O'Reilly Media http://oreilly.com/catalog/manwinreg/chapter/ch08.html

  67. The System Registry https://msdn.microsoft.com/en-us/library/ms970651.aspx

  68. Was The Windows Registry a Good Idea? – Coding Horror https://blog.codinghorror.com/was-the-windows-registry-a-good-idea/

  69. "Comment on ".INI compatibility is a worthy goal" issue on GitHub". GitHub. https://github.com/toml-lang/toml/issues/411#issuecomment-219203431

  70. libconfini/README https://github.com/madmurphy/libconfini/