Even "out of the box", Mozilla Firefox is, on balance, a better Web browser than Microsoft's Internet Explorer. But that is certainly not the end of it. Like so many other open source projects, Firefox has been designed so that its functionality can be supplemented with "extensions" — small modules that can be plugged into it. This allows independent developers to extend the product with whatever functionality they would like to see in it, and it also allows end users to benefit from that new functionality, with no need for programming knowledge on their part.
There are many hundreds, if not thousands, of useful Firefox extensions that allow you to: block ads and Flash movies embedded in Web pages; change the styling of a page; add entries to your blog without having to navigate to the site; communicate using VoIP, SMS, and instant messaging; manage multiple Gmail accounts; download and upload files; edit browser cookies; restore your browser sessions; customize the Firefox menus; manage tabs; control your multimedia player without leaving the browser; instantly look up dictionary and Wikipedia entries for words; read RSS news feeds; check for viruses and spoofed sites; manage Digg actions; share BitTorrents; and even change the rendering engine to Internet Explorer (which is very handy for Web developers who do not want to start up IE, but still need to check how IE would mess up the styling of pages they have created).
The above list merely gives one an idea of the impressive variety and usefulness of the existing Firefox extensions, which are growing in number every day. Furthermore, with the addition of another extension, Greasemonkey, you can have virtually complete control over the appearance and functioning of any Web page that you visit. Imagine being able to customize your favorite websites to look and behave exactly the way you want, without any of the annoyances that you have put up with in the past.
An excellent resource is the Firefox Extension Development Tutorial, which features clear explanations and many screenshots, with the information divided into nine sections: overview, environment setup, configuration files, creating GUIs, back-end, preferences, localization, distribution, and security. Some of the sections have links to other worthwhile reference materials on the Web. This is one of the more complete guides available.
Far less annoying is Lifehacker's article "How to build a Firefox extension", which is loaded with links to other tutorials, and contains a valuable warning concerning the backing up of your Firefox profile(s). The highlight of the article is some advice on how to get your head wrapped around XUL with the least amount of anguish.
One of the resources that it points to is Eric Hamiter's very readable tutorial "How to create Firefox extensions", which is organized into a dozen sections: an illustrative example; implementing a simple "Hello, world!" extension; inside the XPI; re-configuring your extension's installation; Firefox chrome; skin files (and no, they have nothing to do with pornography); packaging an extension using a GUI or using the command line; how to start over if you inadvertently corrupte your Firefox profile; installing your new extension on a local Web server; links to outside resources; and feedback from other readers of the article. Even though it was published in December 2004, the bulk of the information should still be applicable, or at least point you in the right direction. The article has screenshots and sample code. A later article by the same author explains how to enable extension updates.
Born Geek offers a "Firefox Toolbar Tutorial" that focuses on how to create a toolbar extension, but contains useful information on extension development in general. The material is somewhat dated, but is quite extensive and certainly worth reading.
Going to the Source
Mozilla, the parent company of Firefox as well as the outstanding email client Thunderbird, provides to developers a number of online resources worth investigating. Perhaps the best starting point would be the home page of their extension development documentation, which is organized into half a dozen sections, most of which have a number of links to other resources, including tutorials outside of their website. The first two internal resources to consult would be the article on setting up an extension development environment and getting started. Also check out their sample code section.
The Mozilla site also has a section on extensions, which offers more general information on Firefox extensions and their development, including information on setting up your environment, an FAQ, links to code snippets, installing extensions, upgrading them, and more. They have a section on XUL. What is not immediately clear is how much of the information in their Developer Center, if any, duplicates what is found in the Knowledge Base section mentioned in the above paragraph.
Sharing information with other developers is the best way to get your tough programming questions answered, and also hone your knowledge by trying to answer other people's questions. The Mozilla site provides an extension development forum, where you can get support from fellow extension builders, and read the answers provided in response to other people's questions. Most encouraging is the fact that almost none of the post questions have received no replies. (The health and usefulness of technical forums can be quickly judged by the ratio of posts that have received one or more replies.)
Odds and Ends
Last and certainly not least, the Firefox/Thunderbird Extension Wizard is a free online tool that greatly eases the process of packaging up a new Firefox or Thunderbird extension, for distribution to others.
The aforementioned resources should be valuable to you should you choose to develop your own Firefox extension. Doing so will undoubtedly require some time and effort, but it could be quite rewarding. Also, you end up with an extension that does exactly what you want. After all, in some cases, to get a job done right, you have to do it yourself.