Typed read/write state
Read with GetValueAsync and write with SaveAsync through a small state API. Start from Concepts.
Configlue is typed read/write configuration state for .NET. Application code reads and writes settings through a small state API, while storage and layout concerns stay outside normal application code.
It matters most when an application edits configuration rather than only consuming it.
Read-side abstractions cover a large part of the problem, but once an application edits its own settings, several questions arrive together:
The pattern is familiar from tools such as Git, VS Code, and Chrome: layered scopes, precedence, and separate read and write targets. Configlue brings that pattern to ordinary .NET applications.
Most application code depends only on IReadOnlyState<T> and IWritableState<T>. One compact read/write flow looks like this:
var settings = ConfiglueApp.GetState<AppSettings>();
var current = await settings.GetValueAsync();
await settings.SaveAsync(patch =>{ patch.Theme = "Dark";});Application code says what to read or write. How settings are stored and combined stays configured elsewhere. Concepts defines terms such as source, effective value, and provenance precisely.
Typed read/write state
Read with GetValueAsync and write with SaveAsync through a small state API. Start from Concepts.
Layered configuration and provenance
Combine multiple scopes or sources into one effective value while keeping where each value came from. See Concepts.
Sparse writes
Save only what changed, keeping the distinction between values that were set and values that were left alone. See Guides.
Schema evolution and validation
Grow the settings shape over time and keep stored data readable. See Guides.
Change observation and persistence
Observe external changes and keep persistence behavior outside application code. See Guides.
.NET host and platform integration
Use the same state model across different .NET hosts and UI frameworks. See Integrations.
Start with Getting Started for the smallest runnable setup.
When you already know what you need: