Enable modules
Goal
Understand how optional capabilities (CRM, POS, payroll, storefront, and others) become available on your tenant — and how to review what is already on.
Who it is for
Tenant admins who manage plan and packs (subscription.view, industry_pack.view / industry_pack.apply). Platform operators enable/disable entitled modules from BlueMatrix Ops (PLATFORM_SUBSCRIPTIONS_MANAGE).
Important — there is no “Settings → Modules” toggle
Staff Tenant settings does not expose free-form module switches. Modules appear through provisioning, industry/country packs, plan entitlements, rich trial seed, or Ops. The Subscription screen only lists enabled / read-only modules.
Module classes
- Core (always on):
members,parties,catalog,inventory,accounting,localization. - Default-granted (can be disabled later):
sales,purchasing,pricing_promotions,statutory_compliance,calendar. - Optional: POS, CRM, projects, treasury, commerce platform, HR/payroll suite, portals, and other keys in
Modules::optional().
Preconditions
- Your plan must entitle an optional module before Ops can enable it (otherwise
modules.not_entitled). - After enable, users still need roles/permissions for the screens — enabling the module alone is not enough.
Steps — see what is enabled
- Open Subscription (
/subscription, permissionsubscription.view). - Review Current plan, Usage, and the Modules tag list (including read-only after downgrade).
- Manage billing needs
subscription.managewhen a billing portal is configured.
Steps — enable via industry pack (tenant)
- Open Industry packs (
/industry-packs). - Choose a pack and Apply / Upgrade / Re-apply (
industry_pack.apply). - Pack
default_modulesare enabled; toast Industry pack applied. - Refresh
/me(or reload) so nav picks up newenabled_modules.
Steps — enable via Ops (platform)
- A platform operator opens the tenant in BlueMatrix Ops.
- Uses Enable module / Disable module on entitled optional modules.
- Tenant members see new nav after the next
/merefresh.
Steps — at first provision
Country pack, industry pack, and (outside tests) seed_rich_data may already turn on a large module set — see New workspace (onboarding).
Result
Module-gated routes and nav items appear for users who also have the matching permissions. Disabled modules stay hidden.
Hard stops
- Calling a disabled module API → 422 (The :module module is not enabled for this tenant. /
modules.not_enabled). - Mutating a read-only module after downgrade → 422 (…read-only on your current plan…).
- Enable without plan entitlement →
modules.not_entitled. - Frontend: missing module/permission → redirect to dashboard; nav filtered by
auth.hasModule/auth.can.