All Projects → bitwalker → Conform

bitwalker / Conform

Licence: mit
Easy, powerful, and extendable configuration tooling for releases.

Programming Languages

elixir
2628 projects

Projects that are alternatives of or similar to Conform

envkey-node
EnvKey's official Node.js client library
Stars: ✭ 46 (-88.02%)
Mutual labels:  configuration, configuration-management
puppet-augeasproviders
Alternative Augeas-based providers for Puppet
Stars: ✭ 64 (-83.33%)
Mutual labels:  configuration, configuration-management
1config
A command line tool and a library to manage application secrets and configuration safely and effectively.
Stars: ✭ 24 (-93.75%)
Mutual labels:  configuration, configuration-management
climatecontrol
Python library for loading settings and config data from files and environment variables
Stars: ✭ 20 (-94.79%)
Mutual labels:  configuration, configuration-management
envkeygo
EnvKey's official Go client library
Stars: ✭ 36 (-90.62%)
Mutual labels:  configuration, configuration-management
envkey-python
EnvKey's python library. Protect API keys and credentials. Keep configuration in sync.
Stars: ✭ 24 (-93.75%)
Mutual labels:  configuration, configuration-management
dotfiles
My personal app/env configs and dotfiles.
Stars: ✭ 27 (-92.97%)
Mutual labels:  configuration, configuration-management
libconfini
Yet another INI parser
Stars: ✭ 106 (-72.4%)
Mutual labels:  configuration, configuration-management
nest-typed-config
Intuitive, type-safe configuration module for Nest framework ✨
Stars: ✭ 47 (-87.76%)
Mutual labels:  configuration, configuration-management
envkey-ruby
EnvKey's official Ruby client library
Stars: ✭ 24 (-93.75%)
Mutual labels:  configuration, configuration-management
apollo.net
Apollo配置中心.Net客户端
Stars: ✭ 449 (+16.93%)
Mutual labels:  configuration, configuration-management
Centraldogma
Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2
Stars: ✭ 378 (-1.56%)
Mutual labels:  configuration-management, configuration
js-sdk
JavaScript frontend SDK for ConfigCat. ConfigCat is a hosted feature flag service: https://configcat.com. Manage feature toggles across frontend, backend, mobile, desktop apps. Alternative to LaunchDarkly. Management app + feature flag SDKs.
Stars: ✭ 21 (-94.53%)
Mutual labels:  configuration, configuration-management
CoSky
High-performance, low-cost microservice governance platform. Service Discovery and Configuration Service | 高性能、低成本微服务治理平台
Stars: ✭ 57 (-85.16%)
Mutual labels:  configuration, configuration-management
superconfig
Access environment variables. Also includes presence validation, type coercion and default values.
Stars: ✭ 33 (-91.41%)
Mutual labels:  configuration, configuration-management
parse it
A python library for parsing multiple types of config files, envvars & command line arguments that takes the headache out of setting app configurations.
Stars: ✭ 86 (-77.6%)
Mutual labels:  configuration, configuration-management
Microconfig
Modern tool for microservice configuration management
Stars: ✭ 180 (-53.12%)
Mutual labels:  configuration-management, configuration
sitri
Sitri - powerful settings & configs for python
Stars: ✭ 20 (-94.79%)
Mutual labels:  configuration, configuration-management
easy-props
The simple, stupid properties library for Java
Stars: ✭ 76 (-80.21%)
Mutual labels:  configuration, configuration-management
Duic
分布式配置中心,集中化配置管理,应用配置权限管理,配置实时更新等功能
Stars: ✭ 289 (-24.74%)
Mutual labels:  configuration-management, configuration

Conform

Master Hex.pm Version

See the full documentation here.

The definition of conform is "Adapt or conform oneself to new or different conditions". As this library is used to adapt your application to its deployed environment, I think it's rather fitting. It's also a play on the word configuration, and the fact that Conform uses an init-style configuration, maintained in a .conf file.

Deprecation Notice

IMPORTANT: I am discontinuing maintenance of this project moving forward, in favor of a replacement based on TOML, found here. It is has a formal specification and supports much richer ways of expressing complex data (maps and lists), and supports several Elixir data types out of the box. The toml-elixir library also provides a simple transformation mechnanism for extending the basic set of datatypes with your own (including structs and records). Everything you could accomplish with Conform is doable with toml-elixir, and in a cleaner, easier to maintain format. In addition, it has full support for Distillery 2.0's config provider framework, allowing you to natively configure your Elixir releases with TOML config files

If anyone is interested in taking over maintainership of this library, please reach out to me here via issue, or by email, and I'll be glad to discuss the transition with you.


Features

It provides the following features:

  • An easy-to-use configuration file to end-users and/or system administrators.
  • Post-processing of simplified configuration options to more complex forms required by your application, without pushing that complexity on the user.
  • Richly-typed configuration options, such as IP addresses, URIs, etc., with the ability to define your own types.
  • Automatic validation of end-user configuration against a schema
  • Keep documentation of configuration options synced up automatically
  • Hidden configuration options: hide advanced options from end-users, but leave them available for power users or developers
  • Allow fetching information dynamically when the configuration is evaluated.
  • Can be used with releases

Rationale

Conform was designed for Elixir applications which are deployed via releases built with exrm or distillery. It was created in order to resolve some painful issues with the configuration mechanisms provided out of the box by both Erlang and Elixir.

Elixir offers a convenient configuration mechanism via config/config.exs, but it has downsides:

  • To change config settings, it requires you to recompile your app to regenerate the app.config/sys.config files used by the VM. Alternatively you can modify the sys.config file directly during deployment, using Erlang terms. Neither of these things are ops-friendly, or necessarily accessible to sysadmins who may not understand Elixir or Erlang semantics.
  • You can put comments in config/config.exs, but once transformed to app.config/sys.config, those comments are lost, leaving sysadmins lost when trying to understand what configuration values are allowed and what they do.
  • There is no config validation
  • You can't offer a nice interface for configuration to your apps users via something akin to conform's translations. They have to know how to work in Elixir terms, which is pleasant enough for a dev, but not so much for someone unfamiliar with programming.

Conform is intended to fix these problems in the following way:

  • It uses an init-style configuration, which should be very familiar to any sysadmin.
  • It is intended to be used during the release process, once your app has been deployed.
  • Conform works by taking the schema, the .conf file, and config.exs if it is being used, and combines them into the sys.config file used by the Erlang VM. However, unlike config.exs, you can bring the .conf into production with you, and use it for configuration instead of sys.config. This means that the docs provided in your schema file are available to the users configuring your application in production. The .conf is validated when it is parsed as well, so your users will get immediate feedback if they've provided invalid config settings.

I'm glad to hear from anyone using this on what problems they are having, if any, and any ideas you may have. Feel free to open issues on the tracker or come find me in #elixir-lang on freenode.

License

The .conf parser in conform_parse.peg is licensed under Apache 2.0, per Basho.

The rest of this project is licensed under the MIT license. Use as you see fit.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].