Frameworks and tools
There are several open source projects designed to assist with the creation of NPAPI plugins. Please note that even when using these, it is still a good idea to have an understanding of what is going on under the hood, regardless of the level of abstraction provided.
Framework: FireBreath
Project home page
Project history
Description (from the project creators):
FireBreath is a cross-platform Browser Plugin Framework written in C++. Plugins created with FireBreath work on all major browsers, including Firefox 3.0 and later. Platforms supported include Windows, Linux, and Mac OS X (intel). Feature highlights include thread safety checks, Unicode support (with std::wstring), ActiveX support, built-in drawing model negotiation for Mac, automatic type conversion (including Javascript Arrays and Objects), advanced security features, and more.
Supported development environments are Visual Studio on windows, XCode on mac, and GCC on linux. All platforms rely on CMake for easy cross-platform builds.
Project: Nixysa
Project Home Page
Description (from the home page):
Nixysa is a framework written in Python to automatically generate glue code for NPAPI plugins (plugins for browsers such as Google Chrome or Firefox), letting you easily expose C++ classes to Javascript from a simple IDL representation.
Nixysa was originally conceived for the needs of O3D, but is flexible enough to support a wide range of use cases.
Project: JUCE
Project Home Page
Description (from the home page):
JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ class library for developing cross-platform applications. It contains pretty much everything you're likely to need to create most applications, and is particularly good for creating highly-specialised UIs and for handling graphics and sound. Supported development environments are XCode, Visual Studio, GCC (and probably any other modern C++ compiler)
Browser plugins can be built as NPAPI (Mac/Windows), or ActiveX (Windows).
Project: QtBrowserPlugin
Project Home Page
Description (from the home page):
The QtBrowserPlugin solution makes it easy to write browser plugins that can be used in Mozilla FireFox, Safari, Opera, Google Chrome, QtWebKit and any other web browser that supports the "Netscape Plugin API", NPAPI
Articles, information, and tutorials
NPAPI has been around a very long time, and there have been many attempts to distill down useful information on creating them:
ColonelPanic.net
- Building a Firefox plugin - part one: Discusses the difference between NPAPI and NPRuntime and summarizes the basic APIs needed to create a plugin
- Building a Firefox plugin - part two: Discusses the basic lifecycle of a NPAPI plugin
- Building a Firefox plugin - part three: Discusses NPObjects and how to use them
- Memory Management in NPAPI: Discusses how memory is managed in a NPAPI plugin
- Browser Plugins vs Extensions (Add-ons) -- the difference: Discusses the oft-misunderstood difference between a plugin and an extension
Wikipedia
- NPAPI: History and general information about NPAPI
- Plugins and Extensions: The general difference between them