A related list will automatically be created in the linked module, allowing subscribers to see related records.

Relationship patterns and linking modules
Use lookup-based relationships for one-to-many scenarios and linking modules for many-to-many scenarios where association-level data must also be stored.
- One-to-many relationship: One record in Module A can link to one record in Module B, while Module B can contain many linked records from Module A. Example: Multiple orders linked to one customer.
- Many-to-many relationship: Records in both modules can connect to multiple records in the other module. Example: Students enrolled in multiple courses, and each course has multiple students.
- Linking module: Use a linking module as a junction between two primary modules when you need to store additional data about the association itself, such as enrollment date, completion status, or score.
A linking module acts as a junction between two primary modules in a many-to-many model. Each association can be stored as a separate record so you can capture relationship-specific data.
Example: A Student-Course linking module can store Enrollment Date, Completion Status, and Score for each Student-Course association.
Use this pattern when the relationship itself matters as much as the connected records. Keep the linking module focused on association-level fields and avoid adding data that belongs to either parent module.
Validation checklist:
- Confirm the relationship type matches the business process, such as one-to-many versus many-to-many.
- Review related-list visibility and permissions in subscriber orgs before rollout.
- Check reporting and export constraints if the linked module or association records are part of operational reporting.
- Confirm lifecycle behavior when a parent module is hidden, retired, or removed from an application version.
Organize modules
Control which custom modules appear in your subscriber Organize modules lists and set their default order. Subscribers can also reorder modules by dragging them in their own Organize modules setting.
- In the Modules page, click Organize Modules.
- All modules are selected (shown) by default. Uncheck a module to hide it in the subscriber org.
- Drag modules in the Selected Modules list to set their default order.
- Click Save.
Important: Custom modules only appear in subscriber
Organize modules if they are also visible in all three standard UI locations (Modules list, Web UI, Tab Menu) in your
Module Visibility settings. If a module is visible only in Reports or Data Import, it will not appear in the subscriber
Organize modules list, even if enabled here. To make a module available for subscribers to customize, ensure it is visible in all three standard UI locations. For details, refer to
Module Visibility. The Organize modules configuration (including module order) is non-upgradable and applies only to new subscriber signups. Existing subscribers are not affected by changes you make here. Subscribers can reorder modules in their own Organize modules setting, and that preference persists across upgrades.
Delete a custom module
You can only delete a custom module if it has not been published as part of any application version. Once a custom module is included in a published version, it cannot be deleted.
Before deleting an unpublished module, verify:
- The module is not linked to any other module as a lookup.
- Workflow rules configured for this module have been deleted.
- No reports depend on this module.
To delete an unpublished module:
- In the Modules page, hover over the module.
- Click the Edit icon.
- In the Edit Module page, click Delete.
- Review the instructions in the confirmation dialog and click Yes, Delete now.
If the module has already been published, the delete option will not be available and you will see the message: "This module cannot be deleted as it is part of the published version of your application."
Packaged custom modules
Custom Modules are packagable components. When you publish your application, all custom modules (including their fields, layouts, and configurations) are included in that version.
Property | Upgrade Type | Subscriber Modify Access |
Module display label (singular and plural) | Upgradable | No |
Module API name | Locked* | No |
Module description | Upgradable | No |
Page layout (sections, field arrangement) | Upgradable | No |
Layout section order (packaged sections) | Upgradable | No |
Layout field order (system-defined fields) | Upgradable | No |
Layout activate/deactivate status | Non-Upgradable | Yes |
Layout permissions (profiles with access to the layout) | Non-Upgradable | Yes |
Custom fields | Upgradable | No |
Field properties (label, data type) | Upgradable | No |
Field Mandatory property | Upgradable | No |
Field Unique property | Upgradable | No |
Field Tooltip property | Upgradable | No |
Subforms | Upgradable | No |
Subform fields | Upgradable | No |
Lookup relationships | Upgradable | No |
Related list configuration | Upgradable | No |
Permissions and profile access settings | Non-Upgradable | Yes |
Workflow rules | Upgradable | No |
Module tab order | Non-Upgradable | Yes |
Module Visibility settings | Upgradable | No |
Organize Modules configuration | Non-Upgradable | Yes |
Pricing inclusion (whether the module is visible to subscribers) | Upgradable | No |
Publish and version upgrade behaviour
When you create a new custom module:
You create a Properties module in your real-estate application to track listings, availability, and pricing. Before publishing, you add it to your pricing plan. When you publish the new version, new subscribers signing up receive the Properties module as part of their organization. Existing subscribers who upgrade also get the module added to their org.
If you create a second module, Amenities, but forget to add it to the pricing plan before publishing, subscribers will not see Amenities in their organization even after upgrading. You will need to add it to the pricing plan and publish again.
When you modify a custom module:
You add a new field, Parking Slots, to the Properties module and update the layout to include it in the Property Details section. When you publish the updated version, all subscriber organizations receive this change during their next upgrade. Subscribers who have customized their Organize modules setting to hide Properties will still not see it after the upgrade. Their preference persists. Similarly, if you change the module order in Organize modules configuration, that change applies only to new signups. Existing subscribers keep their own module order.
When you add a lookup field:
You add a lookup field in the Properties module linking each property to a Contact record (the property owner). When you publish this change, all subscribers receive the new lookup field after upgrading. A Properties related list also appears in each Contact record, showing properties linked to that contact.
When you delete a custom module:
You can only delete a custom module before it has been published. If you created an Amenities module but have not published the application version yet, you can delete it. Once Amenities is part of a published version, the delete option is no longer available.
If you need to retire a published module, hide it from all Module Visibility locations. The module and its data remain intact in subscriber organizations, but it no longer appears in the UI.
Limits and scalability
Custom module limits are determined by your plan tier (Starter, Growth, or Scale). Your plan tier defines the maximum number of custom modules you can create in your application.
- Maximum custom modules per application: Varies by plan tier. Each custom module you create in the Developer Console reduces the total available for that tier.
- Maximum custom fields per module: Varies by plan tier. 300 fields in Scale
- Maximum lookup relationships per module: Varies by plan tier. 10 lookups in Scale
- Module name length: Maximum 30 characters (singular and plural combined)
- Workflow rules per module: Limited by plan tier