# Complemento (informática)

Un complemento informático es una aplicación (o programa informático) que permite extender las funciones de otra aplicación o programa sin tener que modificar el código. Esta aplicación adicional se ejecuta a través de la aplicación principal e interactúa por medio de la interfaz de programación de aplicaciones. También se conoce por los términos en inglés, plug-in ("enchufable" o "inserción") o add-on ("añadido"), o como conector o extensión.
Los complementos permiten:
* Habilitar que desarrolladores externos puedan contribuir con la aplicación principal extendiendo sus funciones.
* Reducir el tamaño de la aplicación.
* Separar el código fuente de la aplicación a causa de la incompatibilidad de las licencias de software.

## Historia

Los primeros complementos aparecieron a mediados de 1970, cuando el editor de texto EDT ejecutándose en el sistema operativo Unisys VS/9 y utilizando la serie de computadoras Univac 90/60, permitía a un programa externo acceder a la memoria para editar la sesión.
En 1987, Macintosh incluyó la funcionalidad en HyperCard y QuarkXPress.
En 1988, Silicon Beach Software incluyó complementos en Digital Darkroom y SuperPaint, y Ed Bömke acuñó el término "plug-in".

## Aplicaciones con complementos

Algunos tipos de aplicaciones que suelen incluir complementos son:
* Navegadores web: es frecuente requerir ciertos complementos que amplían las funciones de las páginas web para ver contenidos interactivos, videos y cosas similares. Un ejemplo conocido es Adobe Flash Player, un complemento que carga animaciones multimedia interactivas y se usa, por ejemplo, para ver videos.
* Reproductores de audio: algunos permiten añadir complementos para reproducir formatos que no son soportados originalmente, producir efectos de sonido o video, mostrar animaciones o visualizaciones que se mueven de acuerdo a la música que se está escuchando, entre otras opciones. Windows Media Player y Winamp soportan muchas de estas opciones.
* Sistemas de gestión de contenidos: permiten cambiar la apariencia, añadir botones u otro tipo de contenido a las páginas web que generan o gestionar el posicionamiento web. Los complementos de WordPress son bien conocidos.
En general, cualquier aplicación puede añadir soporte para complementos.

## Funcionamiento

La aplicación principal o host proporciona servicios que el complemento puede utilizar, incluyendo un método para que los complementos se registren a sí mismos y un protocolo para el intercambio de datos. Los complementos dependen de los servicios prestados por la aplicación de acogida y no suelen funcionar por sí mismos. Por el contrario, la aplicación principal funciona independientemente de ellos, lo que permite a los usuarios finales añadir y actualizar los complementos de forma dinámica sin necesidad de hacer cambios a la aplicación principal.
La interfaces de programación de aplicaciones (API) proporcionan una interfaz estándar, lo que permite a terceros crear complementos que interactúan con la aplicación principal. Un API estable permite que complementos de terceros funcionen como la versión original y amplien el ciclo de vida de las aplicaciones obsoletas. La API para complementos de Adobe Photoshop y After Effects se ha convertido en un estándar y las aplicaciones de la competencia como Corel Paint Shop Pro lo han adoptado hasta cierto punto. Otros ejemplos de la API son, entre otros, VST y Audio Units.
Las arquitecturas de numerosos juegos y aplicaciones suelen utilizar complementos que permiten a los editores, ya sean los creadores originales o terceros, agregar funcionalidad al software. La serie Microsoft Flight Simulator ha llegado a ser bien conocida por sus complementos de aviones.

## Sistema de complementos

Un sistema de complementos, normalmente utilizado (sin nombre actual), es un programa que asigna una carpeta única (generalmente en la misma ruta que la del programa) donde se buscaran los nuevos plugins creados por terceros, el programa principal escanea la carpeta al iniciarse y mediante procedimientos llamados por defecto y requeridos en los complementos obtiene los datos necesarios para (por ejemplo) visualizarlos en una interfaz gráfica u obtener la lista de procedimientos alternativos que exporta el plugin (mediante cadenas).