1. A non-transitory computer-readable storage medium storing instructions which, when executed by one or more processors, provides an architecture for dynamically loading plugins, the architecture comprising: an application programming interface (API) operable to define a parent context, wherein one or more reusable software components are initially configured according to data in the parent context; a plugin repository operable to store a first plugin and a second plugin; a first child context created dynamically when the first plugin is loaded, the first child context being associated with the first plugin, the first child context inheriting the one or more reusable software components from the parent context; and a second child context created dynamically when the first plugin is loaded a second time, the second child context being associated with the first plugin, the second child context inheriting the one or more reusable software components from the parent context, wherein the first child context is associated with a first version of the first plugin and the second child context is associated witha second version of the first plugin, wherein the second child context inherits the one or more reusable software components from the first child context when a second plugin is loaded, and wherein a violation is indicated if the first plugin returns a plugin object that belongs to the second plugin.