Packages are like suitcases that can contain your Apps and Components. You use packages to bundle an app along with any related components so that you can upload them to the Force.com AppExchange together.
Managed packages can be upgraded in the installer's organization. They differ from unmanaged packages in that some components are locked, ensuring a smoother upgrade process. Unmanaged Packages do not include locked components.
Managed packages differ from unmanaged packages in many other ways. Before creating managed packages, here are a few things to consider:
You must use a Developer Edition organization to create and work with a managed package.
A Developer Edition organization can contain a single managed package and many unmanaged packages.
Before converting an unmanaged package to managed, enable your organization to create managed packages.
You can offer beta versions of a managed package to a small sampling of your users if you are still developing the components within the package but want to allow beta testers to install it and provide feedback.
Installers of managed packages are not able to downgrade to earlier versions.
When you release a managed package, meaning it is uploaded without the Beta checkbox selected, the properties of its components change to prevent developers and installers from making harmful changes.
If you do not want to offer upgrades to your package, consider keeping it unmanaged.
Some components in a released managed package are always editable.
The components in a managed package behave differently than those in an unmanaged package at different points in the release process. For example, an installer cannot change certain properties of managed components in any package that is in a Managed - Installed state, regardless of whether it is beta. Likewise, the developer cannot change certain properties of managed components in any package that is in a Managed - Released state. However, Managed - Beta components have the same properties as unmanaged components in the developer's organization. Developers should determine when the right time is to make a beta package Managed - Released because doing so restricts the properties of each component within it. Components in a managed packaged have one of the following properties:
Editable but not upgradeable.
This means that components are editable in both the developer's and installer's organization. Editable components are not upgradeable. Salesforce remembers which editable components an installer has deleted so that it does not reinstall unwanted components. For example, the installer can delete a document that was included in a managed package and upgrades to that package that still include the document will not get installed again. Any changes the installer makes are also not overwritten during upgrades. Likewise, the publisher can make changes to documents and even delete them but that does not affect the installed users. Each installer can have different versions of these items because new installers get the component with the latest attributes but previous installers do not get their version of the component updated.
Restricted in the installer's and publisher's organization.
A restricted component may have some attributes that are editable in the installer's organization but other attributes that are editable in the publisher's organization.
Locked in both the developer's and installer's organization.
This ensures that the components can be upgraded smoothly.
Developers can always add additional components to a managed package regardless of its state with a few exceptions:
Once a managed package is Managed - Released, the developer can make changes to the profile settings but installers will not get these changes when upgrading. We recommend contacting installers to ask them to make important profile changes manually when they upgrade. Developers can add universally required custom fields to managed packages as long as they have default values.
Developers cannot add auto number fields to Managed - Released packages.
Unfortunately, once you make a package Managed, there is no way to change the package back to Unmanaged!