# Declarative Configuration

> A design rule that a system's settings are declared as validated data, and the system configures itself from that data.

Record: `architecture:declarative-configuration`
Kind: principle
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: recommended
Scope: configuration, infrastructure, runtime
Canonical: https://banes-lab.com/ontology#architecture-declarative-configuration

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Metadata-Driven Design](https://banes-lab.com/records/architecture/metadata-driven-design.md) and before [Convention over Configuration](https://banes-lab.com/records/architecture/convention-over-configuration.md).

## Repair

- Refactored by: Extract Config, Add Config Schema
- Detected by: hardcoded environment values
- Violated by: behavior hidden in code constants
- Measured by: configuration externalization coverage
- Enforced by: config linting, [validation](https://banes-lab.com/records/architecture/validation.md)

## Requires

- [Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md)
- [Explicit Semantics](https://banes-lab.com/records/lexicon/explicit-semantics.md)

## Reinforces

- [Predictability](https://banes-lab.com/records/architecture/predictability.md)
- [Infrastructure as Code](https://banes-lab.com/records/architecture/infrastructure-as-code.md)

## Enables

- [Runtime Configuration without Code Change](https://banes-lab.com/records/lexicon/runtime-configuration-without-code-change.md)

## Conflicts with

- [Hardcoded Configuration](https://banes-lab.com/records/architecture/hardcoded-configuration.md)

## In tension with

- [Dynamic Complexity](https://banes-lab.com/records/lexicon/dynamic-complexity.md)

## Tensions

- [Declarative Configuration / Dynamic Complexity](https://banes-lab.com/records/tension/declarative-configuration-dynamic-complexity.md)

## Contracts

- [Declarative Core](https://banes-lab.com/records/algorithms/declarative-core.md)

## Severity

- [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)

## Category

- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/records/architecture-category/metadata-self-description-declarative-systems.md)

## Reinforced by

- [Metadata-Driven Design](https://banes-lab.com/records/architecture/metadata-driven-design.md)
- [Domain-Specific Language](https://banes-lab.com/records/architecture/domain-specific-language.md)
- [Registry-Held Order](https://banes-lab.com/records/architecture/registry-held-order.md)

## Linked from

- [Orchestration as declared structure](https://banes-lab.com/pag/orchestration/declared-structure.md)
- [Definitions own what, code owns how](https://banes-lab.com/software-architecture/model/definitions-own-what.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Portability / Infrastructure / Deployment](https://banes-lab.com/ontology/principles/architecture-category-portability-infrastructure-deployment.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Taxonomy / Classification / Naming](https://banes-lab.com/ontology/principles/architecture-category-taxonomy-classification-naming.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/lexicon/lexicon-category-metadata-self-description-declarative-systems.md)
- [Architectural Clusters](https://banes-lab.com/ontology/algorithms/algorithms-domain-architectural-clusters.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)

## Evidence in the code

- [configuration/constants](https://banes-lab.com/anatomy/tree/folder-configuration-constants.md)
- [configuration/icons](https://banes-lab.com/anatomy/tree/folder-configuration-icons.md)
