Managed vs Unmanaged AppExchange Packages: What’s The Difference
Table of Contents
What is the difference between a managed package and an unmanaged package in Salesforce?
Let’s begin with what a package is. It’s a container that can be used for a small, individual component as well as for a large set of related apps. It’s available in Salesforce Classic (not in all orgs) and Lightning Experience interface.
You can create a package using Salesforce tools and distribute it to your own company, other Salesforce users and orgs. A package can be uploaded and installed in Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions.
A package consists of components that specify items, including custom objects and custom fields. By combining various components in one package, you can design useful features and apps.
In turn, components include attributes that represent fields on the components, e.g., the unique name of the dashboard or the Allow Activities checkbox on a custom object.
There are two kinds of packages - managed and unmanaged. How do they differ from each other? Salesforce managed packages are created by Salesforce partners to distribute and sell apps to their customers. Salesforce unmanaged packages are used to produce open-source projects or app templates that developers can use for building their apps.
The main distinction between them is that in the managed model, you can upgrade the package if a new version is available, whereas, in the unmanaged model, you can only edit components but can’t upgrade them. In case an app’s new version is released, you need to reinstall it, which can cause difficulties if you have valuable data. So, unmanaged packages are typically used to share the metadata.
What is a Salesforce managed package and its benefits?
A Salesforce managed package includes app components that are presented as a unit on the AppExchange marketplace. Developers can sell and control user-based licenses by using the License Management Application (LMA).
Managed packages can have three states, such as:
- Managed - Beta (an early version of the managed package for testing apps);
- Managed - Released (this means that the package is launched on AppExchange and publicly available);
- Managed - Installed (this means a package was installed from another Salesforce org, but it’s managed).
Among the key benefits of managed packages are the following:
- Intellectual property protection is automatically included in certain components, e.g., in obfuscating Apex code.
- API accessible components have integrated versioning support.
- A previous version of the app can be branched and patched.
- You can seamlessly provide subscribers with patch updates.
- You can give unique names to components to avoid conflicts when installing the app.
When it’s better to use unmanaged packages?
Unmanaged packages are convenient to use when your apps require custom settings after installation because these packages have visible code that can be edited by another org.
Also, you can utilize such packages if you need to move metadata or components from one org to another org (even if it’s an unrelated or completely different org). It’s easy to install an unmanaged package in an org and then build upon it. It’s also important to note that the package creator can’t manage the included components, so the installer can modify them according to their requirements.
Unmanaged packages are attractive because they are usually free. But if you face some technical issues while using that package, you can’t turn to official support.
Moreover, unmanaged packages can bring potential data loss risk and vulnerability issues to your business because they haven’t passed any security review (they can’t be published on the AppExchange marketplace). In turn, managed packages are fully supported and secure.
You can find more information about managed and unmanaged packages in the Salesforce packaging guide.