In computing, a plug-in (or plugin, add-in, addin, add-on, or addon) is a software component that adds a specific feature to an existing computer program. When a program supports plug-ins, it enables customization.
A theme or skin is a preset package containing additional or changed graphical appearance details, achieved by the use of a graphical user interface (GUI) that can be applied to specific software and websites to suit the purpose, topic, or tastes of different users to customize the look and feel of a piece of computer software or an operating system front-end GUI (and window managers).
Applications may support plug-ins to:
enable third-party developers to extend an application
support easily adding new features
reduce the size of an application by not loading unused features
separate source code from an application because of incompatible software licenses.
Types of applications and why they use plug-ins:
Digital audio workstations and audio editing software use audio plug-ins to generate, process or analyze sound. Ardour, Audacity, Cubase, FL Studio, Logic Pro X and Pro Tools are examples of such systems.
Email clients use plug-ins to decrypt and encrypt email. Pretty Good Privacy is an example of such plug-ins.
Video game console emulators often use plug-ins to modularize the separate subsystems of the devices they seek to emulate. For example, the PCSX2 emulator makes use of video, audio, optical, etc. plug-ins for those respective components of the PlayStation 2.
Graphics software use plug-ins to support file formats and process images. A Photoshop plug-in may do this.
Media players use plug-ins to support file formats and apply filters. foobar2000, GStreamer, Quintessential, VST, Winamp, XMMS are examples of such media players.
Packet sniffers use plug-ins to decode packet formats. OmniPeek is an example of such packet sniffers.
Remote sensing applications use plug-ins to process data from different sensor types; e.g., Opticks.
Text editors and Integrated development environments use plug-ins to support programming languages or enhance the development process e.