Elektra

Elektra: universal framework to access configuration parameters - Published in JOSS (2016)

https://github.com/elektrainitiative/libelektra

Science Score: 95.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in JOSS metadata
  • Academic publication links
  • Committers with academic emails
    23 of 141 committers (16.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

administrator c c-plus-plus configuration configuration-files configuration-management configuration-parser elektra key-database

Keywords from Contributors

meshes gravitational-lenses parallel blackhole cryptocurrencies hydrology computational-chemistry metabolomics fourier spectral
Last synced: 6 months ago · JSON representation

Repository

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.

Basic Info
  • Host: GitHub
  • Owner: ElektraInitiative
  • License: bsd-3-clause
  • Language: C
  • Default Branch: master
  • Homepage: https://www.libelektra.org
  • Size: 94 MB
Statistics
  • Stars: 208
  • Watchers: 17
  • Forks: 123
  • Open Issues: 9
  • Releases: 31
Archived
Topics
administrator c c-plus-plus configuration configuration-files configuration-management configuration-parser elektra key-database
Created over 11 years ago · Last pushed over 2 years ago
Metadata Files
Readme Contributing License Code of conduct

README.md

Elektra

Release Jenkins Build Status macOS Build Status Cirrus Build Status Coverage Status

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.

Elektra

Elektra provides a mature, consistent and easily comprehensible API. Its modularity effectively avoids code duplication across applications and tools concerning their configuration tasks. Elektra abstracts from cross-platform-related issues and enables applications to be aware of other applications' configurations, leveraging easy application integration.

Often Used Links

Overview

Elektra provides benefits for:

  1. Application Developers by making it easier to access configuration settings in a modular, reliable, and extensible way.
  2. System Administrators by making it possible to access configuration settings in the same way applications access them.
  3. Everyone by making application integration possible and less misconfiguration a reality.

Elektra consists of three parts:

  1. LibElektra is a modular configuration access toolkit to construct and integrate applications into a global, hierarchical key database. The building blocks are:
    • language bindings (inclusive high-level interfaces)
    • GenElektra, the code generator for type-safe bindings
    • plugins for configuration access behavior and validation
  2. SpecElektra is a configuration specification language that is easy to use and self-contained in the same key database (i.e. written in any of the configuration file formats Elektra supports).
  3. Tools on top of LibElektra for system administrators, such as CLI tools, web UIs, and GUIs.

To highlight a few concrete things about Elektra, configuration settings can come from any data source, but usually comes from configuration files that are mounted into Elektra similar to mounting a file system. Elektra is a plugin-based framework, for example, plugins implement various configuration formats like INI, JSON, XML, etc. There is a lot more to discover like executing scripts (python, lua or shell) when a configuration value changes, or, enhanced validation plugins that will not allow corrupted configuration settings to reach your application.

As an application developer you get instant access to various configuration formats and the ability to fallback to default configuration settings without having to deal with this on your own. As an system administrator you can choose your favorite configuration format and mount this configuration for the application. Mounting enables easy application integration as any application using Elektra can access any mounted configuration. You can even mount /etc files such as hosts or fstab, so that there is no need to configure the same values twice in different files.

In case you are worried about linking to such a powerful library. The core is a small library implemented in C, works cross-platform, and does not need any external dependencies. There are bindings for other languages in case C is too low-level for you.

Contact

Do not hesitate to ask any question on GitHub issue tracker or directly to one of the authors.

Quickstart

Installation

The preferred way to install Elektra is by using packages provided for your distribution, see INSTALL for available packages and alternative ways for installation.

Note: It is preferable to use a recent version: They contain many bug fixes and usability improvements.

Usage

Now that we have Elektra installed, we can start:

  • using the kdb command,
  • using qt-gui for people preferring graphical user interfaces, and
  • using web-ui for people preferring web user interfaces.

Documentation

To get an idea of Elektra, you can take a look at the presentation.

In the GitHub repository the full documentation is available, including:

You can read the documentation for the kdb tool, either

Note: All these ways to read the documentation provide the same content, all generated from the GitHub repository.

Facts and Features

  • Elektra uses simple key-value pairs.
  • Elektra uses the BSD licence.
  • Elektra implements an API to fully access a global key database.
  • Elektra can be thought of a virtual file system for configuration.
  • Elektra supports mounting of existing configuration files into a global key database.
  • Elektra has dozens of Plugins that make it possible to have a tiny core, but still support many features, including:
    • Elektra can import and export configuration files in any supported format.
    • Elektra is able to log and notify other software on any configuration changes, for example, using Dbus and Journald.
    • Elektra can improve robustness by rejecting invalid configuration via type checking, regex and more.
    • Elektra provides different mechanisms to locate configuration files.
    • Elektra supports different ways to escape and encode content of configuration files.
  • Elektra is multi-process safe and can be used in multi-threaded programs.
  • Elektra (except for some plugins) is portable and completely written in ANSI C99.
  • Elektra (except for some plugins) has no external dependency.
  • Elektra is suitable for embedded systems and early boot stage programs.
  • Elektra provides many powerful Bindings to avoid low-level access code.
  • Elektra provides powerful Code Generation Techniques for high-level configuration access.

News

Go to the website, see the news, and its RSS feed.

Download

Elektra uses a Git repository at GitHub.

You can clone the latest version of Elektra by running:

sh git clone https://github.com/ElektraInitiative/libelektra.git

Releases can be downloaded from here.

Build Server

The build server builds Elektra for every pull request and on every commit in various ways and also produces LCOV code coverage report.

Contributing

Take a look at how to start contributing.

Goals

  • Make developer's life easier by proving a well-tested mature library instead of rolling your own configuration system for every application. This reduces rank growth of configuration systems (including but not limited to configuration file parsers) in our ecosystem and fosters well-maintained plugins instead.
  • Postpone configuration decisions (such as which configuration files to use) from developers to system administrators and package maintainers to provide an overall more consistent and user-friendly system. (Default behavior of applications still is in control of developers, you can even roll your own plugins to provide exactly the same behavior as your application has now.)
  • Make configuration storage more safe: avoid that applications receive wrong or unexpected values that could lead to undefined behavior.

And in terms of quality, we want:

  1. Simplicity (make configuration tasks, like access of configuration settings, simple),
  2. Robustness (no undefined behavior of applications), and
  3. Extensibility (gain control over configuration access)

Continue reading about the goals of Elektra

Owner

  • Name: Elektra Initiative
  • Login: ElektraInitiative
  • Kind: organization
  • Email: elektra@libelektra.org

JOSS Publication

Elektra: universal framework to access configuration parameters
Published
December 14, 2016
Volume 1, Issue 8, Page 44
Authors
Markus Raab ORCID
TU Wien (TUW)
Editor
Daniel S. Katz ORCID
Tags
configuration context awareness configuration files interception integration

GitHub Events

Total
  • Watch event: 3
  • Fork event: 1
Last Year
  • Watch event: 3
  • Fork event: 1

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 24,367
  • Total Committers: 141
  • Avg Commits per committer: 172.816
  • Development Distribution Score (DDS): 0.779
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Markus Raab e****a@m****g 5,378
René Schwaiger s****s@m****m 4,344
Mihael Pranjic m****j@l****g 1,661
Klemens Böswirth k****t@g****m 1,243
Markus Raab u****i@m****g 671
Maximilian Irlinger m****x@m****t 613
Thomas Waser t****r@l****g 607
Peter Nirschl p****l@g****m 569
e1528532 e****2@s****t 539
Daniel Bugl me@o****t 530
Namoshek m****l@m****m 453
aviram a****m@3****3 386
derwinlu d****t@g****m 365
PhilippGackstatter p****r@s****t 345
Robert Sowula r****t@s****t 319
0003088 0****8@s****t 308
Michael Zronek m****k@g****m 300
Kurt Micheli e****8@s****t 255
ylecaillez y****z@3****3 252
Richard Stöckl r****l@a****t 249
tmakar t****3@g****m 225
Felix Berlakovich e****a@b****t 223
Jakob Fischer j****3@g****m 219
Restyled.io c****s@r****o 214
Thomas Wahringer t****r@l****g 210
Florian Lindner f****r@s****t 210
Stefan Hanreich s****i@g****m 209
manuel m****l@m****t 177
Dominic Jäger d****r@g****m 172
mraab m****b@3****3 170
and 111 more...

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 146
  • Total pull requests: 97
  • Average time to close issues: over 2 years
  • Average time to close pull requests: 4 months
  • Total issue authors: 28
  • Total pull request authors: 16
  • Average comments per issue: 13.66
  • Average comments per pull request: 6.73
  • Merged pull requests: 63
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • markus2330 (86)
  • kodebach (25)
  • tucek (8)
  • atmaxinger (8)
  • lawli3t (7)
  • tmakar (6)
  • mpranj (6)
  • hannes99 (3)
  • fel115 (3)
  • sanssecours (3)
  • lukashartl (2)
  • dev2718 (2)
  • qwepoizt (2)
  • eiskasten (2)
  • Kochise (2)
Pull Request Authors
  • tmakar (25)
  • hannes99 (20)
  • flo91 (11)
  • atmaxinger (9)
  • Eiskasten (6)
  • kodebach (6)
  • lawli3t (5)
  • eiskasten (4)
  • tucek (3)
  • markus2330 (2)
  • horenso (2)
  • Janldeboer (2)
  • 4ydan (2)
  • Gratla (1)
  • mpranj (1)
Top Labels
Issue Labels
stale (142) floss2022w (38) lang/c (25) bug (20) 1p (15) continuous integration (15) enhancement (15) documentation (14) proposal (13) triage needed (12) build (10) testing (9) project2022w (9) 3p (9) lang/java (8) usability (8) cleanup (7) low priority (7) lang/shell (6) H1 (5) lang/cpp (5) lang/cmake (5) question (5) 7p (3) lang/markdown (3) lang/web (3) cm2022s (3) lang/rust (2) decisions (2) important (2)
Pull Request Labels
stale (31) ready to merge (18) lang/c (10) documentation (10) lang/markdown (9) work in progress (7) floss2022w (6) needs review (4) decisions (3) H3 (3) lang/cpp (2) lang/cmake (2) help wanted (2) enhancement (1) continuous integration (1) T2 (1)

Packages

  • Total packages: 6
  • Total downloads: unknown
  • Total dependent packages: 1
    (may contain duplicates)
  • Total dependent repositories: 19
    (may contain duplicates)
  • Total versions: 28
proxy.golang.org: github.com/ElektraInitiative/libelektra
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Forks count: 2.4%
Stargazers count: 3.6%
Average: 6.4%
Dependent packages count: 8.9%
Dependent repos count: 10.6%
Last synced: 6 months ago
proxy.golang.org: github.com/elektrainitiative/libelektra/src/bindings/go-elektra
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Forks count: 2.4%
Stargazers count: 3.6%
Average: 6.4%
Dependent packages count: 8.9%
Dependent repos count: 10.6%
Last synced: 6 months ago
proxy.golang.org: github.com/ElektraInitiative/libelektra/src/bindings/go-elektra
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Forks count: 2.4%
Stargazers count: 3.6%
Average: 6.4%
Dependent packages count: 8.9%
Dependent repos count: 10.6%
Last synced: 6 months ago
proxy.golang.org: github.com/elektrainitiative/libelektra
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Forks count: 2.4%
Stargazers count: 3.6%
Average: 6.4%
Dependent packages count: 8.9%
Dependent repos count: 10.6%
Last synced: 6 months ago
repo1.maven.org: org.libelektra:libelektra

Low-level Elektra Java binding to elektrify Java applications and write Elektra plugins using Java.

  • Versions: 16
  • Dependent Packages: 1
  • Dependent Repositories: 19
Rankings
Dependent repos count: 5.5%
Forks count: 17.3%
Average: 19.6%
Stargazers count: 22.7%
Dependent packages count: 33.0%
Last synced: 6 months ago
repo1.maven.org: org.libelektra:libelektra-kotlin

Elektra Kotlin binding to elektrify Kotlin applications and write Elektra plugins using Kotlin.

  • Versions: 8
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Forks count: 12.2%
Stargazers count: 16.2%
Average: 27.3%
Dependent repos count: 32.0%
Dependent packages count: 48.9%
Last synced: 6 months ago

Dependencies

src/bindings/rust/example/Cargo.lock cargo
  • aho-corasick 0.7.6
  • ansi_term 0.11.0
  • atty 0.2.13
  • backtrace 0.3.35
  • backtrace-sys 0.1.31
  • bindgen 0.50.0
  • bitflags 1.1.0
  • byteorder 1.3.2
  • cc 1.0.41
  • cexpr 0.3.5
  • cfg-if 0.1.9
  • clang-sys 0.28.1
  • clap 2.33.0
  • env_logger 0.6.2
  • failure 0.1.5
  • fxhash 0.2.1
  • glob 0.3.0
  • humantime 1.2.0
  • lazy_static 1.4.0
  • libc 0.2.62
  • libloading 0.5.2
  • log 0.4.8
  • memchr 2.2.1
  • nom 4.2.3
  • peeking_take_while 0.1.2
  • proc-macro2 0.4.30
  • quick-error 1.2.2
  • quote 0.6.13
  • regex 1.2.1
  • regex-syntax 0.6.11
  • rustc-demangle 0.1.16
  • shlex 0.1.1
  • strsim 0.8.0
  • termcolor 1.0.5
  • textwrap 0.11.0
  • thread_local 0.3.6
  • unicode-width 0.1.6
  • unicode-xid 0.1.0
  • vec_map 0.8.1
  • version_check 0.1.5
  • which 2.0.1
  • winapi 0.3.8
  • winapi-i686-pc-windows-gnu 0.4.0
  • winapi-util 0.1.2
  • winapi-x86_64-pc-windows-gnu 0.4.0
  • wincolor 1.0.2
src/tools/elektrad/go.mod go
  • github.com/google/uuid v1.3.0
  • github.com/gorilla/mux v1.8.0
  • go.libelektra.org v0.0.0-20220529165759-8d7288960e91
src/tools/elektrad/go.sum go
  • github.com/google/uuid v1.1.1
  • github.com/google/uuid v1.2.0
  • github.com/google/uuid v1.3.0
  • github.com/gorilla/mux v1.7.3
  • github.com/gorilla/mux v1.8.0
  • go.libelektra.org v0.0.0-20200214215340-d51fc6073e5d
  • go.libelektra.org v0.0.0-20200630103018-330ea4c6fc3e
  • go.libelektra.org v0.0.0-20210416152159-0b40417c1c25
  • go.libelektra.org v0.0.0-20210713160219-0462a716b697
  • go.libelektra.org v0.0.0-20220529165759-8d7288960e91
examples/external/java/read-keys-example/build.gradle maven
  • org.libelektra:libelektra SNAPSHOT implementation
examples/external/java/read-keys-example/pom.xml maven
  • org.libelektra:libelektra SNAPSHOT
src/plugins/xerces/xerces/pom.xml maven
  • org.testng:testng 6.8.8 compile
  • com.fasterxml.jackson.core:jackson-annotations 2.2.2
  • com.fasterxml.jackson.core:jackson-core 2.2.2
  • com.fasterxml.jackson.core:jackson-databind 2.10.0.pr1
  • com.google.inject:guice 3.0
  • com.sun.mail:javax.mail 1.5.2
  • joda-time:joda-time 2.3
  • org.apache.commons:commons-lang3 3.3.2
  • org.apache.logging.log4j:log4j-api 2.17.1
  • org.apache.logging.log4j:log4j-core 2.17.1
  • org.seleniumhq.selenium:selenium-java 2.42.2
src/tools/webd/package-lock.json npm
  • 576 dependencies
src/tools/webd/package.json npm
  • babel-cli ^6.26.0 development
  • babel-core ^6.26.3 development
  • babel-eslint ^8.2.6 development
  • babel-loader ^7.1.5 development
  • babel-plugin-transform-object-rest-spread ^6.26.0 development
  • babel-preset-env ^1.7.0 development
  • babel-register ^6.26.0 development
  • babel-runtime ^6.26.0 development
  • babel-watch ^2.0.8 development
  • concurrently ^3.6.1 development
  • webpack ^3.12.0 development
  • body-parser ^1.20.0
  • cookie-session ^1.4.0
  • cors ^2.8.5
  • cross-env ^5.2.1
  • crypto-random-string ^3.3.1
  • debug ^2.6.9
  • debug-dude ^1.0.3
  • express ^4.18.1
  • node-fetch ^1.7.3
  • uuid ^3.4.0
src/tools/website/package-lock.json npm
  • 521 dependencies
src/tools/website/package.json npm
  • @iamadamjowett/angular-logger-max ^1.2.3 development
  • @uirouter/angularjs ^0.4.2 development
  • angular ^1.8.2 development
  • angular-animate ^1.8.2 development
  • angular-breadcrumb ^0.5.0 development
  • angular-clipboard ^1.7.0 development
  • angular-file-saver ^1.1.3 development
  • angular-marked github:mpranj/angular-marked#v1.2.4 development
  • angular-messages ^1.8.2 development
  • angular-sanitize ^1.8.2 development
  • angular-slugify ^1.0.3 development
  • angular-translate ^2.18.4 development
  • angular-translate-loader-static-files ^2.18.4 development
  • angular-typewriter 0.0.15 development
  • angular-ui-bootstrap ^2.5.6 development
  • angular-ui-notification ^0.3.6 development
  • bootstrap ^3.4.1 development
  • connect-modrewrite ^0.10.2 development
  • docsearch.js ^2.6.3 development
  • fs-extra ^0.30.0 development
  • grunt ^1.3.0 development
  • grunt-browserify ^6.0.0 development
  • grunt-cli latest development
  • grunt-contrib-concat ^1.0.1 development
  • grunt-contrib-connect ^3.0.0 development
  • grunt-contrib-copy ^1.0.0 development
  • grunt-contrib-cssmin latest development
  • grunt-contrib-jshint latest development
  • grunt-contrib-less latest development
  • grunt-contrib-uglify latest development
  • grunt-contrib-watch latest development
  • grunt-preprocess latest development
  • highlight.js ^11.4.0 development
  • jquery ^3.6.0 development
  • jshint-stylish latest development
  • ng-tags-input ^3.2.0 development
  • rss ^1.2.2 development
  • satellizer ^0.15.5 development
  • slugify ^1.5.0 development
  • underscore ^1.12.1 development
  • xmlbuilder ^15.1.1 development
src/tools/webui/package-lock.json npm
  • 1175 dependencies
src/tools/webui/package.json npm
  • concurrently ^3.5.1 development
  • webpack ^3.11.0 development
  • @bosket/core ^0.4.4
  • @bosket/tools ^0.4.4
  • ajv ^6.12.6
  • bosket-react ^0.4.6
  • focus-trap-react ^3.1.4
  • material-ui ^0.20.2
  • react ^16.14.0
  • react-copy-to-clipboard ^5.1.0
  • react-dom ^16.14.0
  • react-redux ^5.1.2
  • react-router-dom ^4.3.1
  • react-scripts 1.0.17
  • redux ^3.7.2
  • redux-logger ^3.0.6
  • redux-promises ^1.0.0
  • redux-undo-redo-middleware ^1.2.0
src/tools/fuse/setup.py pypi
  • fusepy >=3.0.1
src/tools/fuse/src/elektra_fuse.egg-info/requires.txt pypi
  • fusepy >=3.0.1
  • psutil >=5.8.0
.github/workflows/codeql.yml actions
  • actions/checkout v3 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/autobuild v2 composite
  • github/codeql-action/init v2 composite
.github/workflows/macOS.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/stale.yml actions
  • actions/stale v6.0.1 composite
scripts/dev/.devcontainer/Dockerfile docker
  • debian bullseye build
scripts/docker/alpine/3.16/Dockerfile docker
  • alpine 3.16.3 build
scripts/docker/arch/Dockerfile docker
  • archlinux base build
scripts/docker/centos/stream8/Dockerfile docker
  • quay.io/centos/centos stream8 build
scripts/docker/cirrus/arch/Dockerfile docker
  • archlinux base-devel build
scripts/docker/cirrus/fedora/Dockerfile docker
  • fedora 37 build
scripts/docker/debian/bullseye/Dockerfile docker
  • debian bullseye build
scripts/docker/debian/buster/Dockerfile docker
  • debian buster build
scripts/docker/debian/sid/Dockerfile docker
  • debian sid build
scripts/docker/fedora/31/Dockerfile docker
  • fedora 31 build
scripts/docker/fedora/32/Dockerfile docker
  • fedora 32 build
scripts/docker/fedora/33/Dockerfile docker
  • fedora 33 build
scripts/docker/fedora/34/Dockerfile docker
  • fedora 34 build
scripts/docker/fedora/35/Dockerfile docker
  • fedora 35 build
scripts/docker/fedora/36/Dockerfile docker
  • fedora 36 build
scripts/docker/fedora/37/Dockerfile docker
  • fedora 37 build
scripts/docker/jenkinsnode/Dockerfile docker
  • debian bullseye build
scripts/docker/legacy/Dockerfile docker
  • ubuntu artful build
scripts/docker/opensuse/15.3/Dockerfile docker
  • opensuse/leap 15.3 build
scripts/docker/openwrt/sdk/Dockerfile docker
  • openwrtorg/sdk latest build
scripts/docker/ubuntu/bionic/Dockerfile docker
  • ubuntu bionic build
scripts/docker/ubuntu/disco/Dockerfile docker
  • ubuntu disco build
scripts/docker/ubuntu/focal/Dockerfile docker
  • ubuntu focal build
scripts/docker/website/Dockerfile docker
  • debian bullseye build
scripts/docker/webui/base/Dockerfile docker
  • ubuntu 20.04 build
scripts/docker/webui/elektrad/Dockerfile docker
  • elektra/web-base latest build
scripts/docker/webui/elektrad-demo/Dockerfile docker
  • hub.libelektra.org/build-elektra-web-base $PIPELINE_TAG build
scripts/docker/webui/web/Dockerfile docker
  • elektra/web-base latest build
scripts/docker/webui/webd/Dockerfile docker
  • elektra/web-base latest build
scripts/docker/webui/webd-demo/Dockerfile docker
  • hub.libelektra.org/build-elektra-web-base $PIPELINE_TAG build
src/tools/fuse/docker/Dockerfile docker
  • ubuntu focal build