{"id":13420675,"url":"https://github.com/ElektraInitiative/libelektra","last_synced_at":"2025-03-15T07:31:26.492Z","repository":{"id":37470815,"uuid":"21063580","full_name":"ElektraInitiative/libelektra","owner":"ElektraInitiative","description":"Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.","archived":false,"fork":false,"pushed_at":"2023-09-07T13:34:29.000Z","size":98567,"stargazers_count":208,"open_issues_count":19,"forks_count":123,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-07-31T22:56:11.568Z","etag":null,"topics":["administrator","c","c-plus-plus","configuration","configuration-files","configuration-management","configuration-parser","elektra","key-database"],"latest_commit_sha":null,"homepage":"https://www.libelektra.org","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ElektraInitiative.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2014-06-21T08:01:04.000Z","updated_at":"2024-06-22T20:19:35.000Z","dependencies_parsed_at":"2023-02-14T07:16:23.539Z","dependency_job_id":"948f0c67-2f0c-4343-9cff-18650c5bec08","html_url":"https://github.com/ElektraInitiative/libelektra","commit_stats":{"total_commits":23560,"total_committers":161,"mean_commits":"146.33540372670808","dds":0.7718166383701188,"last_synced_commit":"66fdece03827aec000e6f05ad3b9511af27c68e8"},"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElektraInitiative%2Flibelektra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElektraInitiative%2Flibelektra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElektraInitiative%2Flibelektra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElektraInitiative%2Flibelektra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ElektraInitiative","download_url":"https://codeload.github.com/ElektraInitiative/libelektra/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243701098,"owners_count":20333614,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["administrator","c","c-plus-plus","configuration","configuration-files","configuration-management","configuration-parser","elektra","key-database"],"created_at":"2024-07-30T22:01:38.816Z","updated_at":"2025-03-15T07:31:26.486Z","avatar_url":"https://github.com/ElektraInitiative.png","language":"C","funding_links":[],"categories":["TODO scan for Android support in followings"],"sub_categories":[],"readme":"# Elektra\n\n[![Release](https://img.shields.io/github/release/ElektraInitiative/libelektra.svg)](https://github.com/ElektraInitiative/libelektra/releases/latest)\n[![Jenkins Build Status](https://img.shields.io/jenkins/t/https/build.libelektra.org/job/libelektra/job/master.svg)](https://build.libelektra.org/job/libelektra/job/master/lastBuild)\n[![macOS Build Status](https://github.com/ElektraInitiative/libelektra/actions/workflows/macOS.yml/badge.svg)](https://github.com/ElektraInitiative/libelektra/actions/workflows/macOS.yml)\n[![Cirrus Build Status](https://api.cirrus-ci.com/github/ElektraInitiative/libelektra.svg)](https://cirrus-ci.com/github/ElektraInitiative/libelektra)\n[![Coverage Status](https://coveralls.io/repos/github/ElektraInitiative/libelektra/badge.svg?branch=master)](https://coveralls.io/github/ElektraInitiative/libelektra?branch=master)\n\n_Elektra serves as a universal and secure framework to access configuration\nsettings in a global, hierarchical key database._\n\n\u003cimg src=\"https://cdn.rawgit.com/ElektraInitiative/libelektra/master/doc/images/logo/logo_color.svg\" alt=\"Elektra\" width=\"150\" /\u003e\n\nElektra provides a mature, consistent and easily comprehensible API.\nIts modularity effectively avoids code duplication across applications\nand tools concerning their configuration tasks. Elektra abstracts from\ncross-platform-related issues and enables applications to be aware of other\napplications' configurations, leveraging easy application integration.\n\n## Often Used Links\n\n- If you are new, start reading [Get Started](doc/GETSTARTED.md)\n- If you enjoy working with docker take a look at [our](/scripts/docker/README.md) docker images.\n- [Build server](https://build.libelektra.org/)\n- [Website](https://www.libelektra.org)\n- [API documentation](https://doc.libelektra.org/api/master/html/)\n\n## Overview\n\nElektra provides benefits for:\n\n1. _Application Developers_ by making it easier to access configuration settings in a modular, reliable, and extensible way.\n2. _System Administrators_ by making it possible to access configuration settings in the same way applications access them.\n3. _Everyone_ by making application integration possible and less misconfiguration a reality.\n\nElektra consists of three parts:\n\n1. _LibElektra_ is a modular configuration access toolkit to\n   construct and integrate applications into a global,\n   hierarchical key database. The building blocks are:\n   - language bindings (inclusive high-level interfaces)\n   - GenElektra, the code generator for type-safe bindings\n   - plugins for configuration access behavior and validation\n2. _SpecElektra_ is a configuration specification language\n   that is easy to use and self-contained in the same key database (i.e.\n   written in any of the configuration file formats Elektra supports).\n3. Tools on top of LibElektra for system administrators, such as\n   CLI tools, web UIs, and GUIs.\n\nTo highlight a few concrete things about Elektra, configuration settings can come from any\ndata source, but usually comes from configuration files that are [_mounted_](doc/help/elektra-mounting.md) into Elektra\nsimilar to mounting a file system. Elektra is a plugin-based framework, for example,\nplugins implement various configuration formats like INI, JSON, XML, etc.\nThere is a lot more to discover like executing scripts (`python`, `lua` or\n`shell`) when a configuration value changes, or, enhanced validation plugins that will not\nallow corrupted configuration settings to reach your application.\n\nAs an application developer you get instant access to various configuration formats and the ability\nto fallback to default configuration settings without having to deal with this on your own. As an system administrator\nyou can choose your favorite configuration format and _mount_ this configuration for the application.\n_Mounting_ enables easy application integration as any application using Elektra can access any _mounted_\nconfiguration. You can even _mount_ `/etc` files such as `hosts` or `fstab`, so that there is no need to\nconfigure the same values twice in different files.\n\nIn case you are worried about linking to such a powerful library. The core is a small library\nimplemented in C, works cross-platform, and does not need any external dependencies. There are\n[bindings](src/bindings) for other languages in case C is too low-level for you.\n\n## Contact\n\nDo not hesitate to ask any question on\n[GitHub issue tracker](https://issues.libelektra.org/)\nor directly to one of the [authors](doc/AUTHORS.md).\n\n## Quickstart\n\n### Installation\n\nThe preferred way to install Elektra is by using packages provided for\nyour distribution, see [INSTALL](/doc/INSTALL.md) for available packages and alternative ways for installation.\n\n\u003e Note: It is preferable to use a recent version: They contain many bug fixes and usability improvements.\n\n### Usage\n\nNow that we have Elektra installed, we can start:\n\n- using the [kdb command](/doc/help/kdb.md),\n- using [qt-gui](/src/tools/qt-gui/) for people preferring graphical user interfaces, and\n- using [web-ui](/src/tools/webui/) for people preferring web user interfaces.\n\n### Documentation\n\nTo get an idea of Elektra, you can take a look at the\n[presentation](https://www.libelektra.org/ftp/elektra/presentations/2016/FOSDEM/fosdem.odp).\n\nIn the GitHub repository the full documentation is available, including:\n\n- [tutorials](/doc/tutorials/),\n- [FAQ](/doc/help/elektra-faq.md),\n- [glossary](/doc/help/elektra-glossary.md), and\n- [concepts and man pages](/doc/help/elektra-introduction.md)\n\nYou can read the documentation for the kdb tool, either\n\n- [on the Website](https://www.libelektra.org/man-pages/kdb)\n- [in the API documentation](https://doc.libelektra.org/api/master/html/doc_help_kdb_md.html)\n- by using `man kdb`\n- by using `kdb --help` or `kdb help \u003ccommand\u003e`\n- [on GitHub](https://master.libelektra.org/doc/help/kdb.md)\n\n\u003e Note: All these ways to read the documentation provide the same content,\n\u003e all generated from the GitHub repository.\n\n## Facts and Features\n\n- Elektra uses simple key-value pairs.\n- Elektra uses the [BSD licence](LICENSE.md).\n- Elektra implements an [API](https://doc.libelektra.org/api/master/html/) to fully access a global key database.\n- Elektra can be thought of a [virtual file system for configuration](/doc/BIGPICTURE.md).\n- Elektra supports mounting of existing configuration files into a global key database.\n- Elektra has dozens of [Plugins](src/plugins/) that make it possible\n  to have a tiny core, but still support many features, including:\n  - Elektra can import and export configuration files in any [supported format](src/plugins/).\n  - Elektra is able to log and notify other software on any configuration changes, for example,\n    using [Dbus](src/plugins/dbus/) and [Journald](src/plugins/journald/).\n  - Elektra can improve robustness by rejecting invalid configuration via [type checking](src/plugins/type/), [regex](src/plugins/validation/) and more.\n  - Elektra provides different mechanisms to [locate configuration files](src/plugins/resolver/).\n  - Elektra supports different ways to [escape](src/plugins/ccode/) and [encode](src/plugins/iconv/) content of configuration files.\n- Elektra is multi-process safe and can be used in multi-threaded programs.\n- Elektra (except for some [plugins](src/plugins/)) is portable and completely written in ANSI C99.\n- Elektra (except for some [plugins](src/plugins/)) has no external dependency.\n- Elektra is suitable for embedded systems and early boot stage programs.\n- Elektra provides many powerful [Bindings](src/bindings) to avoid low-level access code.\n- Elektra provides powerful [Code Generation Techniques](src/tools/pythongen) for high-level configuration access.\n\n## News\n\nGo to the [website](https://www.libelektra.org), see the [news](doc/news/), and its [RSS feed](https://www.libelektra.org/news/feed.rss).\n\n## Download\n\nElektra uses a [Git repository at GitHub](https://github.com/ElektraInitiative/libelektra).\n\nYou can clone the latest version of Elektra by running:\n\n```sh\ngit clone https://github.com/ElektraInitiative/libelektra.git\n```\n\nReleases can be downloaded from [here](https://www.libelektra.org/ftp/elektra/releases/).\n\n## Build Server\n\nThe [build server](https://build.libelektra.org/) builds\nElektra for every pull request and on every commit in various ways and also produces [LCOV code\ncoverage report](https://doc.libelektra.org/coverage/master/debian-buster-full/).\n\n## Contributing\n\nTake a look at [how to start contributing](doc/IDEAS.md).\n\n## Goals\n\n- Make developer's life easier by proving a well-tested mature library\n  instead of rolling your own configuration system for every application.\n  This reduces rank growth of configuration systems (including but not limited\n  to configuration file parsers) in our ecosystem and fosters well-maintained\n  plugins instead.\n- Postpone configuration decisions (such as which configuration files to use)\n  from developers to system administrators and package maintainers to\n  provide an overall more consistent and user-friendly system.\n  (Default behavior of applications still is in control of developers,\n  you can even roll your own plugins to provide exactly the same behavior\n  as your application has now.)\n- Make configuration storage more safe: avoid that applications\n  receive wrong or unexpected values that could lead to undefined behavior.\n\nAnd in terms of quality, we want:\n\n1. Simplicity (make configuration tasks, like access of configuration settings, simple),\n2. Robustness (no undefined behavior of applications), and\n3. Extensibility (gain control over configuration access)\n\n[Continue reading about the goals of Elektra](doc/GOALS.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FElektraInitiative%2Flibelektra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FElektraInitiative%2Flibelektra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FElektraInitiative%2Flibelektra/lists"}