The three main points relevant for most people are:
- Even though Elektra provides a global keydatabase configuration files stay human read- and writable which allows us to integrate unmodified software.
- Flexible adoption on how the configuration is accessed
via plugins: you can run arbitrary code, e.g. do a
git commitor log/notify when configuration files are changed. - Elektra allows you to specify configuration values:
- use the value of other configuration values (symbolic links)
- calculate the values based on other configuration values
- validation configuration files
- generate code based on it
- and much more
Features that rarely can be found elsewhere (at least in this combination):
- Bootstrap code and proper abstraction is included:
- you do not need to worry about the file names of configuration files in the application
- cascading between
/etc,$HOME,cwdand so on - you can change which Elektra path is connected to which configuration file with mounting
- Portable across OS (Linux, BSD, w64, mac os x,.. ) and desktop systems (GNOME, KDE,...)
- No daemon, so no single point of failure but still having guarantees of consistent, validated files with good performance.
- Provides 3-way merging for configuration upgrades.
- Links and automatic calculation of values: unlike with other solutions you do not need to duplicate configuration values for different applications but you can comfortably link between them which makes many inconsistencies impossible.
- Allows us to easily create GUIs and web-UIs for the whole configuration on the system.
- Allows you to import/export all parts of the configuration.
- Syntax independence: you can consistently use your favourite syntax.
- Configuration Management (such as Puppet) can be used on top of it without having to fiddle with specifics of every configuration file.
- CLI-tool available
kdb editorallows you to edit any path of Elektra with your favourite syntax (independent of the actual syntax of the configuration files that store values of this path).- Allows us to also (integrate commandline arguments and environment)[/src/libs/getenv] into a consistent place for configuration.
- Reduces huge amount of code: Nearly every application has very similar code:
- finding the correct configuration file (for different OS)
- parsing configuration files
- validating configuration files
- replace configuration files on changes
- All advantages libraries have:
- Performance: Improvements in the library benefits all applications.
- The library only needs to be loaded once in the memory.
- On fixes not all binaries of all applications need to be replaced.
- All advantages maintained code with a community has:
- If something does not work, open an issue.
- If you have a question, open an issue.
- Regular releases.