插件(又译外挂,英文为plug-in、plugin、add-in、addin、add-on、addon或extension)是一种电脑程序,透过和应用程序(例如网页浏览器,电子邮件客户端)的互动,用来替应用程序增加一些所需要的特定的功能。最常见的有游戏、网页浏览器的插件和媒体播放器的插件。
应用程序之所以支持插件的使用原因很多,主要包括:使得第三方的开发者可以对应用程序进行扩充、精简,或者将源代码从应用程序中分离出来,去除因软件使用权限而产生的不兼容。
许多专业软件都提供给开发者撰写插件所需要的API,目的是为了扩展软件的功能。以下是应用程序及其插件的例子:
应用软件提供使插件能够应用的各项服务,其中包括提供加载方式,使插件可以加载到应用程序和网络传输协议中,从而和插件进行数据交换。插件必须依赖于应用程序才能发挥自身功能,仅靠插件是无法正常运行的。相反地,应用程序并不需要依赖插件就可以运行,这样一来,插件就可以加载到应用程序上并且动态更新而不会对应用程序造成任何改变。
公开应用程序接口提供一个标准的界面,允许其他人编写插件和应用程序互动。一个稳定的应用程序接口会允许其他插件正常运行即使其最初的版本有所变动,也会支持插件延长老旧的应用程序的使用寿命。Adobe Photoshop 和After Effects的插件应用程序接口逐渐成为标准,并且被一些和它们竞争的应用程序部分采纳。另外一些象这样的应用程序接口包括Audio Units和VST。
就好比一个网络转换器也许会运载一个未被占用但不标准的端口来容纳各种任选的物理层连接器。而游戏和某些应用程序经常使用插件的体系结构来允许最初的发行者和第三方发行者增加功能性。
生产厂家可以用插件来产生卖方锁定,就是透过选择限制更新这个选项使得厂商签署的买方才可以更新使用其产品。IBM的Micro Channel Architecture,从技术上来会说,比Industry Standard Architecture更为先进,可以给IBM的个人电脑添加组成,但是因为很难给第三方的设备设备获取证明而未能大面积推广。微软的Flight Simulator系列比较著名就是因为它可以下载aircraft附件。
插件和扩展都是在现有的功能上进行修改或者增加,但它们还是有细微区别的。主要的区别就是插件通常依赖于应用程序的用户界面,它的一切行为都不能超出已经严格定义好的界限。而扩展通常没有多少限制,也许还会拥有独立的用户界面。他们通常是用来减小应用程序的尺寸,并提供一些可选的功能。Mozilla Firefox及其相关的软件使用附加组件作为所有添加的模块这一类别的名称,这个类别下又分为插件、主题、搜索引擎和开发成熟的扩展系统等子类。这样就减少了Mozilla Application Suite不会因为特征蔓延而对主程序造成影响。
插件的出现可以追溯到1970年代中期,当EDT(英语:EDT (text editor))文本编辑器在UNIVAC Series 90(英语:UNIVAC Series 90)大型机上运行Unisys VS/9(英语:VS/9)操作系统的时候,其提供了一项功能就是编辑器可以运行一个程序,并允许这个程序进入编辑器的缓冲,允许外部程序染指内存中,正在编辑的任务。插件程序使得编辑器在缓冲区上进行文本编辑,而这个缓冲是编辑器和插件所共同享用的。Waterloo Fortran编译器使用这些特性使得Fortran程序的内部编译可以用EDT编辑。
个人电脑上第一个带有插件的应用软件,也许是苹果电脑上的HyperCard和QuarkXPress(英语:QuarkXPress),两者都是1987年发行的。