A package is a container that holds your application components, such as
- Apex code,
- Apex triggers,
- Visualforce pages,
- Lightning Components, and so on.
This makes up your application. While there are other ways to move components
between Salesforce orgs, a package provides a container that you can use for your
entire application or deliver optional features by leveraging the so-called extension
There are two types of packages—managed and unmanaged.
Unmanaged packages result in the transfer of components from one org to another; however, the result is as if those components had been originally created in the destination org, meaning
that they can be readily modified or even deleted by the administrator of that org.
Furthermore, they are not upgradable, and are not particularly ideal from a support
perspective. Moreover, the Apex code that you write is also visible for all to see, so
your intellectual property is at risk