Skip to content

Modularity

Featly is a broad platform, but not every deployment needs every part. Feature areas are opt-out toggles (ADR-0024): disable the ones you don’t use and their HTTP endpoints disappear and they vanish from the dashboard nav. Defaults stay everything on, so this is never a breaking change — you opt out.

Under Featly:Server:Features (all default true):

Toggle Turns off
Flags feature flags
Configs dynamic configuration
Segments reusable audiences
Experiments A/B testing + exposure events
Approvals approval workflows / pending changes
Webhooks outbound webhook delivery
Audit the audit log
Rbac role-management UI/API (permission checks always run)

A small set of endpoints is always on — authentication, bootstrap, meta, environments, projects, API keys, settings, export, and the SDK API — because the rest of the system depends on them.

Set the toggles in appsettings.json:

{
"Featly": {
"Server": {
"Features": {
"Experiments": false,
"Webhooks": false,
"Segments": false
}
}
}
}

Or in code when you register the server:

builder.Services.AddFeatlyServer(options =>
{
options.Features.Experiments = false;
options.Features.Webhooks = false;
});
{
"Featly": {
"Server": {
"Features": {
"Configs": false,
"Segments": false,
"Experiments": false,
"Approvals": false,
"Webhooks": false
}
}
}
}

This leaves the always-on core plus flags. The dashboard shows only the Flags area, and the disabled endpoints return 404 — there is no dead surface.

The dashboard discovers what’s enabled at runtime from an anonymous GET /api/meta endpoint that returns the active feature flags. The nav and the command palette filter themselves to the enabled areas; the server gates the corresponding endpoint groups at mount time. Toggling an area is a restart, not a migration — the data model is unchanged, so you can turn an area back on later without losing anything.