Browser Plugins vs Extensions – the difference

August 10, 2010 35 Comments by Richard

Overloaded terms

One of the least understood concepts in the Browser Plugin world is — browser plugins.  What they are, and even more: what they are not.  Probably at least once a week I answer a question somewhere on a forum or on the comments on this blog and say “You can’t do that with a plugin; you need an extension”.

Many people confuse plugins and extensions in the browser world. They sound like they should be the same thing, but in fact they are very different.

What you can do with a plugin

A plugin is, quite simply, a third party library that “plugs in” to the browser that can be embedded inside a web page using an <embed> tag or a <object> tag.  Many of them then draw pretty pictures or animations, though that’s not required.  Many allow you to talk to them through javascript, though that’s not required.  In short, a plugin affects only a specific page in which it is placed.

Examples of common plugins include:

  • Macromedia Flash
  • Microsoft Silverlight
  • Apple Quicktime
  • Adobe Reader (at least this includes a plugin in addition to the rest of the application)

Some plugins respond to a mime type and can run in place of the page, such as Adobe Reader, which allows you to view PDF files in your web browser.  Again, however, it affects only that page, and no others.  In Firefox, Chrome, Opera, and Safari, these plugins are usually called “NPAPI plugins”, since they are written using the NPAPI.  In Safari, you could also use a Webkit Plugin.  In Internet Explorer you would do this with an ActiveX Control.

What a plugin cannot do

Plugins have to either handle a mime type or be embedded into a web page.  They don’t get put there automatically. They don’t create toolbars.  They don’t affect browser menus.  They don’t know about tabs, or even about other pages in the same browser process.  They don’t make coffee, tea, or hot chocolate, though they could be written to control an external appliance to do so if you really wanted.  They don’t automatically process the content of every web page loaded.

“But wait!” I hear you all cry.  “We have seen these magical things done! (well, except the hot chocolate machine)”

“Yes,” I reply.  “Those are extensions.”


Extensions, or “add-ons”, can often do these magical things.  They can add onto the browser UI, process pages that the browser loads.  They do all sorts of things.  However, they are not the same thing as plugins; they affect the web browser itself, not really the page.  They may affect a page as well, of course.  In fact, you can even put a plugin inside an extension, at least in Firefox.  However, if you write an extension for Firefox, you’ll probably have to write it again for Chrome, Safari, and IE… one for each.  Perhaps there is a framework out there for writing portable extensions, though.  It’s not really my area of expertise, so I don’t know.

Examples of extensions / add-ons:

And many, many, many more.  Extensions can be written in different languages depending on the browser.  In Firefox you can write them in C++ or javascript, and on Internet Explorer you write them as special ActiveX controls called Browser Helper Objects, or BHOs.

An extension could contain a plugin, but a plugin can’t contain an extension

One very common way to install a plugin in Firefox is to use a .xpi file.  This is an extension.  It may have a NPAPI plugin inside of it, but it is still an extension.  It will not work on other web browsers, even though your NPAPI plugin may work perfectly fine on Chrome and Safari if installed in another way.

Conversely, a plugin by nature does not include an extension.


Nearly a year ago now I began a project called FireBreath, which is a cross-platform browser plugin architecture.  FireBreath is, frankly, awesome. You can literally get a plugin up and going in under 10 minutes if you already have everything installed.  That means you can spend your time doing other more important things, like actually developing your functionality, rather than spending all your time figuring out how to deal with the plugin APIs.

That said, FireBreath is a cross-platform browser PLUGIN framework.  It does not create extensions.  It will never be able to create extensions.  If you need an extension, you need something else.

When not to use a plugin

Finally, and this is a topic that people seem to think is a little strange coming from me, there are many cases when it is not a good idea to use a browser plugin.  In fact, a good rule of thumb is that if you can do what you need to do without one, don’t use one.


  • There are no really good ways to install browser plugins that will work 100% of the time
    • XPI install only works on one profile in firefox
    • CAB install only works in Internet Explorer and is sometimes a little unreliable
    • ClickOnce works only in Windows and only if .Net is installed
    • Java installers only work reliably and consistently on Mac OS
    • MSI or EXE installers while being the best method IMHO require a little more work on the part of the user, and the average user is… less savvy than you are, shall we say.
  • Plugins have to take into account a large range of hardware types
    • If you use graphics libraries such as OpenGL or DirectX keep in mind that every graphics card works a little differently with these technologies.  You will run into weird cases where your plugin doesn’t work on someone’s computer.  If your luck is like mine, that computer will belong to an executive at a fortune 500 company (yes, that happened to me.  no, it wasn’t fun)
  • Plugins don’t work until they have been installed
    • This is a major limiting factor to uptake of your site.  Many users don’t want to install yet another plugin on their machine, and many get lost in the incredibly complicated task of downloading and running the installer.

Moving on

If all of those things haven’t convinced you that what you want isn’t actually a browser plugin — great!  That’s why I’m still posting about this stuff.  Despite all the reasons not to use a plugin, there are also a lot of cases where it’s a good idea. Browesr plugin development can be a lot of fun!  Good luck!


  1. Ken Smith
    11 years ago

    Thanks. The topic was more confusing to me than it should have been. Great explanation — cleared up a lot for me.

  2. rdjfraser
    11 years ago

    Agreed, extensions are great tools that I often recommend, but apparently have occasionally mislabeled them by calling them plug-ins. Now that I know the difference, I won’t accidently unwittingly confuse anyone else.

  3. Satya Prakash
    11 years ago

    Thanks for details.

  4. Navaid Alam
    11 years ago

    Good work clearing up the confusion.

    I am wondering on how a plug-in should be distributed.

    This is for an application at my company. The plug-in is a reasonably complex one (an ActiveX with a lot of help files and localized resource files and helper applications) installed in a separate directory of its own with a Firefox shim plug-in. We previously had an EXE installer packaged inside an XPI with a javascript file that would launch the exe. That doesnt seem to work now (actually for quite some time now). FYI – We also package the same EXE installer inside a CAB file for IE.

    We are now planning on restructuring the installer, so I am looking for some ideas. The idea is to provide a smooth installation experience.

  5. taxilian
    11 years ago

    There is a lot of discussion around this topic; The options are to distribute it in an .xpi file just as a .dll, which only works on firefox, to distribute it using a .cab file which can contain a .exe or .msi (preferred) but only works on IE (but will at least install for everything), or to use a downloadable installer.

    I recommend to FireBreath ( users to use an MSI (which is generated automatically using WiX for FireBreath plugins). If you use an MSI and just have the user download it, you have the same user experience on all platforms. The MSI should never let the dll self-reg because that loses the advantages of an MSI installer; instead, use the heat.exe WiX tool to generate the XML for the registry code for the plugin. This will save you a lot of possible problems in the long run over a .exe installer.

    The long and short of it is that there aren’t really any good options. If you use .msi, Google Omaha is one option that works better than many for keeping it updated. The most foolproof in my experience (having tried literally all possible options listed) is to have the user download a .msi and run it.

  6. OvidiuC
    11 years ago

    Great info! Thank you!!!

  7. Magicsupery
    11 years ago

    Awsome ! 

  8. ab268
    11 years ago

    as you said if we install a plugin using a .xpi it is actually an extension. I have a simple NPAPI plugin dll ready and want to install it on firefox 4 as a ‘plugin’. How should i go through it?

  9. taxilian
    11 years ago

    Currently the best places to find instructions for that is probably here:

    The answer to your question depends on your platform, which you have neglected to specify. That document should have instructions for you, though.

  10. ab268
    11 years ago

    Oh sorry
    I need to install it on Firefox 4 on Windows 7.
    The source code consists only of ns* functions. Does that make it an extension instead of a plugin? I also tried appending few np* functions like NP_GetEntryPoints, NP_Initialize and NP_GetMIMEDescription.
    But it is still recognized as an extension instead. So, according to this article, i presume i should use a different way to install it instead of using a .xpi .
    Can you help me in this regard?

    Thank You.

  11. Koukaied
    11 years ago

    I read this page about Plugins and Extensions,I saw “They don’t make coffee, tea, or hot chocolate, though they could be written to control an external appliance to do so if you really wanted.” Is it mean that Plugins can’t  control serial ports .

    I want user can control the com port via web, it seem ActiveX in IE can done, however,customer use firefox in ubuntu, it’s any difference develop method between WinXP and ubuntu OS?

  12. Diegomussio
    11 years ago

    Gvoice is a plugin not an extension!

  13. taxilian
    11 years ago

    when I said a plugin “could be writen to control an external appliance” … what part of that made you think you couldn’t control a COM port? It’s c++; of course you can.

  14. taxilian
    11 years ago

    gvoice is neither plugin nor extension; it’s not even a web technology. The interface is written in HTML/javascript.

  15. Anupam
    11 years ago

    thanks for the clarification…

  16. Nicolas Sampietro
    11 years ago

    I like FireBreath,  can I use QT instead of XCode for mac?

  17. Bharath
    11 years ago

    when you say extension can contain a plugin do you mean we can install a plugin or do you mean extension can use a plugin?

  18. quaquaqua
    11 years ago

    Nice. Could you please not hide NPAPI so deep inside, because developers are still savvy:-) Those who are not will likely prefer a simple “for” to “for_each” with boost::lambda anyway.

  19. taxilian
    11 years ago

    I’m not sure I understand your comment, my friend; what exactly are you referring to?

  20. Roimer García
    11 years ago

    I think he means that you can develope an extension which contains a plugin. For example, right now I’m developing a google chrome extension (distributed as a single .crx file) and it will contain a NPAPI plugin (a DLL programed in C++ with FireBreath). If you put most of the code inside the NPAPI plugin then you can develope an appropiate extention for every browser you want to target.

  21. taxilian
    11 years ago

    That is correct. Google Chrome extensions can even include “private” npapi plugins, meaning npapi plugins that can only be used from within that extension. Firefox extensions can contain a plugin .dll inside them but when the plugin is installed it is available to any page.

  22. David
    11 years ago

    Hey Richard, thank you for your work, to write this nice article!

  23. Rajeev
    11 years ago

    Very nice article which clears up confusion about plugins and extensions.

  24. wxd56
    11 years ago

    Thank you for explaining it so fully

  25. hhhkkkk556
    11 years ago

    “In fact, a good rule of thumb is that if you can do what you need to do without one, don’t use one.” Really, why? If you can avoid getting hooked on big fish technologies, avoid it… unless you’re up to creating something very simple and temporary. Multi-browser code vs single-browser code sounds much like good old “multi-OS code vs single-OS code”. Another rule of the thumb is that everything that can be done in the multi-something style is always preferred, unless it’s a GUI feature or there is no way to implement it universally:-)

  26. Chariot33r
    11 years ago

    thank you. really useful info.

  27. Rick
    11 years ago

    I had a related question:

    For browsers’ plugins, the advice is if we can do what we need to do without one, don’t use one.

    What about those plugins within websites, such as WordPress’ plugins? Do they face similar or other types of issues? Or, website’s plugins are more stable?!

    Please advise. Thanks.

  28. Ben
    11 years ago

    WordPress plugins are an entirely different thing than browser plugins. WordPress plugins tie into hooks within the WordPress php server application. Browser plugins interact with the browser itself. Completely different and unrelated technologies.

  29. Harika
    11 years ago

    Sir, I was interested to create a plugin for my browser.. but I was not able to understand from which point I have to start this project… can u plz help me on this

  30. Pedro
    11 years ago

    Thanks for the post, it showed up first in Duck Duck Go results searching for DIFERENCIA FIREFOX EXTENSIONES PLUGINS.

    In my case, it is enough with understanding that an extensión can contain a plugin, but a plugin cannot contain an extensión :D


5 Trackbacks

  1. By 插件和扩展 区别 | on October 19, 2010 at 8:04 am

    […] 那扩展呢?扩展就是程序的扩展,通常是通过程序自身所开放的api来实现的用于扩展程序功能的东西,在浏览器中,比如Firefox的Firebug,浏览器的Twitter的插件,这些插件很多都是增加一些浏览器上的窗口或者按钮,来扩展浏览器的功能。这里有一点需要说明一下,扩展本身可以包含一个或者多个插件,但是插件不包含扩展。 参考了 […]

  2. […] plugins are different from extensions. Click here to understand their differences in detail and also know what plugins can and cannot do. browser […]

  3. By What are Plugins or Extensions? - VSL Computers on September 24, 2013 at 2:17 pm

    […] are plugged into webpages while extensions are extensions of a web browser.Read what ColonelPanic says […]

  4. By Firefox plugins are being phased out | boot13 on March 20, 2014 at 6:23 am

    […] interface customizations, and so on. Mozilla has no plans to phase out extensions, only plugins. A post over at ColonelPanic provides additional information about the distinction between plugins and […]

  5. […] Between Add-on and Plug-in Browser Plugins vs Extensions – the difference What is the difference between a Firefox extension and a Firefox add-on? What is The difference […]

Post a Comment

Your email is never published or shared. Required fields are marked *