APEX has long been extensible. It was built in such a way that developers could add custom content to just about any part of a page constructed by the framework. The problem, however, was twofold. First, you had to be familiar enough with the related technologies to work outside the declarative environment that APEX provides. Second, even if you had enough knowledge to do a customization, repeating it on another page or in another application altogether was often quite cumbersome.