> For the complete documentation index, see [llms.txt](https://www.andhowconfig.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.andhowconfig.org/user-guide/key-concepts.md).

# Key Concepts

### AndHow Properties are configurable constants

AndHow [Properties](/user-guide/andhow-properties.md) are constants in your code, except their value is loaded when your application starts up.  Once loaded during [initialization](/user-guide/andhow-initialization.md), Property values are immutable and will not change for the run-life of the application.

### AndHow initializes and loads property values only once at startup

[Initialization](/user-guide/andhow-initialization.md) is AndHow's startup/bootstrap process where it discovers all Properties in your application, scans multiple configuration sources to load values for them, and validates them.  This will only happen once in the run-lifecycle of the application and once completed, the list of Properties and their values will never change.

### AndHow Fails Fast... and that is a good thing

AndHow detects invalid configuration at startup to [*fail fast*](https://www.martinfowler.com/ieeeSoftware/failFast.pdf).

*Failing late* is the alternative.  Failing late might mean that a misconfigured application runs for a few days, then mysteriously fails when a misconfigured feature is first used  ***\~BOOM\~*** You'll get the call in the middle of the night.  Wouldn't it have been nice to see that error at startup? &#x20;

### Property Names are CaSe InSeNsItIvE

For compatibility with Windows environment variable names, property names are case insensitive.  Proper case names are still used internally for reporting and when creating configuration sample files.  One exception to this is JNDI, which is inherently case sensitive.&#x20;

### Null Handling

AndHow does not have an explicit null value.  If a Property is not set, it is null unless it has a default value.

### Configuration Sources and Loaders

AndHow uses Loaders to load Property values from configuration sources such as System.Properties, environment variable, system properties, JNDI, properties files, etc..  Loaders work on a 'first win' basis:  The first loader to find a non-null for a Property sets the value. &#x20;

Thus, the loader order is significant and [well established](https://sites.google.com/d/1iteScRrSeAtJUnD-3ELYLFaGiQLdAmSP/p/1iPp60twwW_ABWH21-K2Z4p7BzEf8voZV/edit).  The standard Loader order will work for most applications, but if needed, [the load order can be changed](https://sites.google.com/d/1iteScRrSeAtJUnD-3ELYLFaGiQLdAmSP/p/1iFKkeYm4n_NHklIL9xkbf2Y6iMs7iauY/edit), loaders removed and other loaders added.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://www.andhowconfig.org/user-guide/key-concepts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
