Module Profiles
sharedComposition strategy for removable modules.
This page defines the profile model used to compose module sets without breaking contracts or frontend/backend boundaries.
Profiles
| Profile | Purpose | Implies |
|---|---|---|
core | Base starter: auth/session/users + client profile/settings + baseline notifications | - |
commerce | Billing/purchase capabilities and provider integrations | core |
rbac | Roles, permissions, and role assignment operations | core |
notifications | Notification center and provider-backed delivery | core |
wallet | Pass and wallet workflows | core, notifications |
observability | Telemetry/OTLP runtime instrumentation and provider routing | core |
Soft-disable vs hard-remove
- Soft-disable: feature remains installed, routes/UI/API are hidden or gated via env flags.
- Hard-remove: feature code is not wired/imported in build graph for a selected project profile.
Resolve profile flags
Use the profile resolver to generate backend/admin/client env flags from the selected profile set:
# Show all env sections
bun run profiles:resolve --profiles core,commerce,rbac
# Backend-only output
bun run profiles:resolve --profiles core,notifications --target backend
# JSON for automation
bun run profiles:resolve --profiles core,wallet --format jsonIntegrity validation
bun run check:module-profilesThis verifies profile keys, dependencies, and expected module flag shapes.
Generate profile bundles for starter variants:
bun run scaffold:profile --profiles core,commerce --name commerce-starterFor permanent module removal rules, see /docs/hard-remove-workflow.
Current state
- Soft-disable is implemented.
- Profile model tooling is implemented.
- Observability hard-remove automation is available via
bun run profiles:hard-remove. - Additional module hard-remove automation remains in progress.