You know that moment when you tweak a feature flag or an email template prefix in appsettings.json, rebuild, redeploy, waitβ¦ and then tweak it again? I got tired of that loop. So I built something to fix it β and decided to open source it.
Meet ConfigWay β a runtime configuration editor for ASP.NET Core. It lets you view and modify your IOptions<T> values through a built-in web UI, without ever restarting the application.
This is my first open source project, and I'm genuinely excited to share it.
The problem
ASP.NET Core's configuration system is great, but once the app is running, changing a value means editing a file and restarting. For settings that need frequent tuning β timeouts, feature flags, email templates, rate limits β that cycle adds up fast.
I wanted something that:
- works with the existing
IOptions<T>pattern I already use - requires minimal setup
- stores overrides in a real database so they survive restarts
- gives me a clean UI to make changes from a browser
What ConfigWay does
ConfigWay adds a small web UI to your application. Any IOptions<T> class you register becomes an editable form β with type-aware controls (toggle for bool, dropdown for enum, array editor for collections, etc.).
Changes are applied immediately via hot-reload. No restart needed.
Here's a quick demo: kododo.dev/configway/demo
Getting started in 3 steps
1. Install the packages
dotnet add package Kododo.ConfigWay
dotnet add package Kododo.ConfigWay.UI
dotnet add package Kododo.ConfigWay.PostgreSQL # optional β for persistence
2. Register everything
builder.AddConfigWay(x =>
{
x.AddOptions<EmailOptions>();
x.AddOptions<FeatureFlagOptions>();
x.AddUiEditor();
x.UsePostgreSql(builder.Configuration.GetConnectionString("DefaultConnection")!);
});
3. Mount the UI
app.UseConfigWay(); // mounts the editor at /config
That's it. Open /config in your browser and you'll see all your registered options, editable in real time.
A few things I'm particularly happy with
It plays nicely with validation. If you already have ValidateDataAnnotations() or a custom IValidateOptions<T> wired up, ConfigWay will show validation errors in the UI and block saving until they're resolved.
Sensitive fields stay hidden. Mark any string with [DataType(DataType.Password)] and ConfigWay treats it as a secret β rendered as βββββ, never returned from the API, requiring an explicit reset to remove.
Reset to default. Every field has a β© button that appears when the stored value differs from the underlying config layer (appsettings.json, environment variable). One click removes the override and the original value takes effect β no restart.
Customizable labels. Use [Display(Name = "...", Description = "...")] to control how fields and sections appear in the UI. The Description shows up as a tooltip icon next to the label.
Architecture in a nutshell
The library is split into focused packages:
| Package | Role |
|---|---|
Kododo.ConfigWay.Core |
Abstractions (IStore, Setting) |
Kododo.ConfigWay |
DI registration, in-memory store, hot-reload logic |
Kododo.ConfigWay.UI |
Embedded React SPA served from the host app |
Kododo.ConfigWay.PostgreSQL |
PostgreSQL persistence |
The UI is embedded as a resource inside the DLL β no CDN, no separate static file deployment. The PostgreSQL store creates a single configway.settings table on first startup and handles everything from there.
You can also plug in your own backend by implementing the IStore interface from Kododo.ConfigWay.Core:
builder.AddConfigWay(x =>
{
x.Store = new MyRedisStore();
x.AddOptions<AppOptions>();
});
This is just the beginning
ConfigWay is my first open source project, and shipping it has been equal parts exciting and nerve-wracking. There's a lot I want to add β more storage providers, role-based field access, change history β but I wanted to get something real and useful out first.
I'm also working on more projects in the Kododo family. If this kind of thing is useful to you, I'd love it if you:
- β Starred the repo β it genuinely helps with visibility
- π Followed me on GitHub β more libraries are coming
- π¬ Opened an issue or a discussion β feedback from real users shapes the roadmap
Thanks for reading. I hope ConfigWay saves you a few restarts. π












