In computing, configuration files, or config files, are used to configure the initial settings for some computer programs. They are used for user applications, server processes and operating system settings. The files are often written in ASCII (rarely UTF-8) and line-oriented, with lines terminated by a newline or carriage return/line feed pair, depending on the operating system. They may be considered a simple database. Some files are created and modified using an ASCII editor. Others are created and modified as a side-effect of changing settings in a graphical user interface (GUI) program. The formats of configuration files are often poorly documented.
Some applications provide tools to create, modify, and verify the syntax of their configuration files. For server processes and operating system settings, the only documentation may be the source code. Some configuration files are partially described by man or help pages.
Some computer programs only read the configuration files at startup. Others periodically check the configuration files for changes. Some can be told to re-read the configuration files and apply the changes to the current process, or indeed to read arbitrary files as a configuration file. There are no standards or strong conventions.
Recently, XML and YAML have become popular as configuration file formats. They have the advantages of having well-defined syntaxes, and tools to validate and verify the syntax of the files that are created in those formats.
Among the Unix
variants, there are hundreds of configuration file formats. Each application or service may have a unique format. Historically, Unix
operating system settings were often modified only by editing configuration files. Some formats allow entries to be disabled by prepending a special comment character
user applications often create a file or directory in the home directory of the user upon startup. To hide the file or directory from casual listing of the contents of the home directory, the name of the file or directory is prepended with a period
, giving rise to the nickname "dotfile" or "dot file". Server processes often use configuration files stored in /etc
, but they may also use their installation directory, the root directory, or a location defined by the system administrator.
Configuration files also did more than just modify settings, they often (in the form of an "rc file") ran a set of commands upon startup (ex. a shell rc file might instruct the shell to change directories, run certain programs, delete or create files - many things which did not involve modifying variables in the shell itself and so were not in the shell's dotfiles); according to the Jargon File, this convention is borrowed from "runcom files" on the CTSS operating system. This functionality can and has been extended for programs written in interpreted languages such that the configuration file is actually another program rewriting or extending or customizing the original program; Emacs is the most prominent such example.
On UNIX variants dot files are 'hidden' from listing by default, On Mac OS X these files are sometimes called "hidden files" although other mechanisms exist on Mac OS X to hide a file from view in various tools. The Explorer interface of Microsoft Windows XP does not allow you to rename a file with an initial '.' though it does allow access to such files, and Windows' Notepad program does allow files to be saved with such names.
IBM's AIX uses an Object Data Manager (ODM) database to store some system settings,
some of which need to be available at boot time.
Primarily relied upon two files called CONFIG.SYS
. These were retained up to Windows 98SE, but were not strictly required to run Windows applications.
Within the Microsoft Windows
family of operating systems and their attendant applications, the situation is similar. Windows 3.0
had an API for INI files
(from "initialization"), but that format is deprecated
and many modern Windows programs forgo configuration files to use only the Windows Registry
to store information.
uses a binary format also named INI but it is different from the Windows versions.
It contains a list
of lists of untyped key-value pairs.
There are two files for system-wide settings, OS2.INI and OS2SYS.INI.
Application developers can choose whether to use them or create a specific file for their applications.
Many language specifications have been created specifically to describe and retain
configurations. These are frequently not Turing complete
(nor need to be, by definition). A notable exception is Lua
, which started out specifically as a configuration language for use in other programs. It evolved into a complete programming language, but retains a phrasing that allows configuration descriptions to be read directly into a native, stateful, tabulated set of variable-key pairings accessible to other programs (via a library), as well as allowing (self or external) invocation of commands to augment configuration activities.
The class includes all markup languages. The trend in the increase of XML and YAML (among other formats) for use as configuration file formats is at least partially attributable to the increase in popularity of Open source and Platform neutral software applications and libraries. Moreover, the specifications describing these formats are routinely made available to the public, thus increasing the availability of parsers and emitters across programming languages.
- dotfiles.com – a site for users to share configuration files for Unix applications and utilities
- dotfiles.org – community for sharing dotfiles
- libprf1 - alpha cross-platform, multi-language support for accessing the Preferences Registry Format (PRF) 1.0 configuration files
- www.libelektra.org- Elektra provides a universal and secure framework to store configuration parameters in a hierarchical key-value pair mechanism, instead of each program using its own text configuration files
- gconf - GConf is a system for storing application preferences. It is intended for user preferences; not configuration of something like Apache, or arbitrary data storage
- Augeas - a configuration editing tool and API. Parses existing configuration files into a tree, that can be modified through its public API and saved back into those files.
- rc.conf - BSD system startup configuration file
- libconfig - Libconfig (LGPL) is a simple library for parsing structured configuration files, with a file format that is more compact and more readable than XML. And unlike XML, it is type-aware, so it is not necessary to do string parsing in application code. The library includes bindings for both the C and C++ languages.
- GetPot GetPot (LPGL) (note not LGPL!) is a sophisticated command line and input file parsing library, contained in a header file. Provided for C++, Java, Python, and Ruby.
- Boost.Program_options - Boost.Program_options, part of the Boost library, is a C++ library for reading (name,value) pairs from the command line, a config file, or environment variables.
- AutoOpts - AutoOpts is a tool for command line and configuration file parsing from C programs. It is part of the AutoGen suite.
- Config::Loader - a Perl module which merges the files in a configuration directory tree into a single hash. Can read XML, YAML, JSON, INI, or Apache configuration file formats. It also allows the overriding of configuration settings locally for working in a development environment.
- App::Options - a Perl module that combines command line options, environment vars, and option file values (for program configuration) into a Perl Hash. Allows hierarchical file configuration for larger applications.
- Config::Hierarchical - a Perl module implementing a configuration variable container. The container has multiple categories with priority order. A full history of the variables manipulation is accessible.