Many of the most successful software projects have been based around a community of developers. Examples are Gimp, Perl and Latex. A characteristic of these is that scripts, modules and plug-ins build on a well-designed core. The Adage package makes even greater use of extensibility. It has a small core that is not specific to the task of drawing. The vast majority of function is derived from this by extension. This is done not only to facilitate a community effort, but also so that the engine can be used in varying scenarios.
The flexibility of the Adage system is supported by a characteristic of its drawing files, non-GUI commands, the data structure for drawings, and the code that describes drawing elements. All four have the same format, differently expressed. For instance, when Adage saves a drawing file it basically writes a set of text commands that can be invoked to recreate the drawing. A new drawing element can be created within the interactive program for a library using a similar process. The first step is to draw an example using a small set of parameters such as points and lengths. The second step is to group the drawing elements. Adage automatically identifies the parameters on which the group depends. The third step is to export the group of elements as a function.