Module Licensing
Every module is designed to support independent licensing.
This page documents the architectural convention for how modules should be designed over the long term. It is not a claim that every planned module is already sold, priced, or enforced separately in production. For the current entitlements model and middleware behavior, see Entitlements.
Important
This is documentation of the licensing convention. It does not change billing code, marketplace implementation, pricing, or catalog rows.
Licensing postures
A module may be:
| Posture | Meaning |
|---|---|
| Included by default | Installed automatically for workspaces (typically is_default_included) |
| Free | Available without charge, but not necessarily auto-included for every workspace |
| Billable | Offered as a paid marketplace module |
These postures can change over product releases without redesigning the module’s internal architecture.
Current free opt-in categories (examples)
| Category | Example modules | Notes |
|---|---|---|
| CRM | Contacts, Companies, Calendar, Meetings, Activities, Communication Templates | Free Marketplace opt-in (is_billable=false, not default-included) |
| CRM | WhatsApp Cloud (whatsapp-cloud) | Billable Marketplace ($29 / $290, catalog 1.0.0; Cloud API inbox MVP) |
| Sales | Opportunities, Resellers, Reseller Payouts | Free Marketplace opt-in under category sales; Sales Pipeline is not a separate SKU |
| Collaboration | Team Chat | Free Marketplace opt-in under category collaboration (team-chat, catalog 1.3.2; not billable yet) |
| Operations | Help Desk | Free Marketplace opt-in under category operations (help-desk, catalog 1.0.0; internal ticketing MVP) |
| Operations | Knowledge Base, Projects | Free Marketplace opt-in under category operations (knowledge-base, projects; catalog 1.0.0; KB internal-only; not billable) |
| Operations | Assets | Free Marketplace opt-in under category operations (assets, catalog 1.0.0; equipment/fixed-asset register; not billable; no hard deps) |
| Operations | Documents | Free Marketplace opt-in under category operations (documents, catalog 1.0.0; flat file library; not billable; hard dep on Storage) |
| Storage | Storage (+ packs) | Free storage unlocks 1 GB; billable packs storage-10 … storage-1000 set total allowance (mutually exclusive) |
Default-included today: Leads, Tasks, ToDos only. Paid examples: Branded, Automation, Storage packs. See Entitlements.
Long-term rules
Documented product and engineering expectations:
- Some modules may always remain free — for example core CRM capabilities the platform chooses to keep included or non-billable.
- Some modules may become billable in future releases — schema and catalog fields already anticipate
is_billable, pricing, and subscriptionsourcewithout requiring a redesign. - Future modules must be designed to support independent licensing — do not hard-code assumptions that Module A is always free, always included, or always bundled with Module B.
- This is an architectural convention — teams should design modules as independently licensable even when the first release ships them as default-included or free.
Design implications for engineers
When building a module:
- Gate routes and UI with
module:{slug}and Spatie permissions — never fold licensing into role permissions. - Keep the module installable on its own (aside from declared dependencies).
- Avoid embedding “always available” assumptions for sibling modules.
- Prefer catalog + subscription + middleware patterns already used by Leads and Tasks.
- Treat Marketplace activation and workspace subscriptions as the licensing surface; do not invent a parallel plan/feature/limit system (forbidden under platform freeze).
Relationship to dependencies
Module dependencies and module licensing are related but distinct:
| Concern | Question |
|---|---|
| Dependency | Does this module need another module’s capability to work? |
| Licensing | Is this module included, free, or billable for a workspace? |
A required dependency may itself be free or billable. Optional integrations must degrade gracefully when the optional module is not licensed/installed.