Drupal is a free powerful CMS (Content Management System). Though many describe it as a CMF (Content Management Framework), I think a better term would be SOS (Site Operating System), because Drupal provides the interface between Web sites and users and allows users to easily customize and control the operation of their Web sites.

Actually Drupal bears some similarity with Emacs. Both have a powerful and elegant core and provide the interface to extend core functionality with the help of modules (add-ons, plug-ins, packages) that rely on a set of predefined hooks. This is the reason why I like both. As an extension language Emacs uses a nice language Emacs Lisp, but unfortunately Drupal is based on a dumb language PHP. However, regardless of its implementation language, Drupal is a beautiful system. See also how to configure Emacs for Drupal.

There is an overwhelming number of available Drupal modules. I have the experience of using about 100 modules. I'd like to help you to find and select necessary modules from the list of similar modules with the following description of the most useful modules.

Must-have modules

You can't build and run a decent Web site without them. The first thing to do after unrolling a new Drupal site is to install these modules.

CCK (part of core in Drupal 7)
Adds custom fields to nodes and defines new content types.
Provides a flexible method for Drupal site designers to control how lists and tables of content are presented.
Token (will be part of Drupal 7)
Token handling services for Pathauto and other modules.
Automatically generates clean URL path aliases for various kinds of content (nodes, categories, users).
Transliteration of Unicode names and sanitizing of file names during uploads.


Administration menu
Administration menu bar at the top of your website (not necessary for D7).
Speeds up common administration tasks like publishing or promoting nodes through the use of AJAX callbacks that saves lots of page loads.
Search and Replace Scanner
Search-and-replace plain text or regexp against the title, body and CCK text content fields on all nodes.

Content Management

Adds a tab that shows revisions and highlights added/changed/deleted words between revisions.
Flag(previously known as Views Bookmark)
A flexible flagging system that can provide any number of flags for nodes, comments, or users. Some possibilities include bookmarks, marking important, friends, or flag as offensive.
Content Templates
Allows modification of Drupal's teaser and body fields using administrator defined templates, i.e. you can modify your theme for content types directly on the admin pages without modifying theme files.
Content Access
Manages permissions for content types by role and author.

URL Handling

In addition to the Pathauto module:

Path redirect
Redirect users from one URL to another. Allows you to specify a redirect from one path to another path or an external URL, using any HTTP redirect status.
Global Redirect
Searches for an alias of the current URL and 301 redirects if found. Stops duplicate content arising when path module is enabled.


Automatic Nodetitles
Allows hiding of the content title field in the form. To prevent empty content title fields one can configure it to generate the title by a given pattern.


Views PHP
Allows administrators to use PHP code in fields, filters and sorts. This is the successor of Views Custom Field for both D6 and D7.
Views Bulk Operations (VBO)
Augments Views by allowing bulk operations to be executed on the displayed rows.


Blocks form submissions by spambots.
Submodule of the module CAPTCHA that uses the reCAPTCHA web service. Unfortunately, spammers can pay workers in developing countries to solve CAPTCHAs, where workers are paid between $0.35 to $1 for every thousand CAPTCHAs they solve (see recent article with more details). So it's not easy to protect content from spam when CAPTCHAs are solved by humans, not bots. But there is a better submodule below.
Captcha Riddler
Submodule of the module CAPTCHA that lets site administrators create their own questions to foil automated spam bots. Humans can still be paid to solve them, but a question can be context-sensitive: if a question asks you what is the name of your site, the answer isn't going to be obvious if the question has to be answered outside the context of your site.
Useful for creating questionnaires, surveys, polls or contact forms.
Filter Default
Allows you to assign a default input format for nodes and comments for each role. So you can assign the PHP code default input format to the admin role, and the Full HTML to the author role.
Allows you to set maximum lengths to the body and title fields of any content type.


There are many modules for different WYSIWYG editors, but I recommend FCKeditor as more advanced and user-friendly WYSIWYG editor.

Allows Drupal to replace textarea fields with the FCKeditor - a visual WYSIWYG HTML editor that brings many of the powerful WYSIWYG editing functions of known desktop editors like Word to the web.
Allows you to use client-side editors (a.k.a. WYSIWYG editors) to edit content in Drupal. It replaces all other editor integration modules and no other Drupal module is required (perhaps, this module is unnecessary when you use only FCKeditor).
External Links
Finds all external links on a page and add an external icon indicating it will take you off-site.
Service links
Adds links to social bookmarking sites like del.icio.us, Digg, Facebook, LinkedIn, Reddit, StumbleUpon, Technorati.
A CCK content field which lets you add a link to your content types, including URL, title and a target attribute.


Comment Notify
Sends notification e-mails to visitors about new comments on pages where they have commented. It is better than other notifications modules because it works for both registered and anonymous users.


There are two primary ways to add images: with the help of Image.module or using the CCK field type ImageField. I highly recommend ImageField because it is more flexible than fixed Image nodes with the hard-coded Image content type created by Image.module. (There is also a small overview of image-related modules)

Image (will be removed in Drupal 7)
Allows users to upload images into Drupal. It also contains submodules image_gallery, image_attach, image_import.
Image Assist
Allows users to upload and insert images inline into content. It automatically generates an Add image link under fields of your choice. Clicking the link opens an image browser, displaying all images that have been uploaded via the Image module.
Allows you to setup presets for image processing. If an ImageCache derivative doesn't exist the web server's rewrite rules will pass the request to Drupal which in turn hands it off to ImageCache to dynamically generate the image file.
Imagecache Actions
Provides a suite of additional processes that can be added to the imagecache pipeline, including watermarking, overlays, text overlay, color-shifting, brighten/darken, alpha blending, canvas manipulation, background, file format switcher, rounded corners.
ImageMagick raw action
Allows you to enter ImageMagick command line options as an imagecache action.
Provides an image upload field for CCK. ImageField is a CCK-based alternative to the legacy Image module. It boasts features such as multiple images per node, resolution restrictions, default images, and extensive Views support. ImageField does not provide a built-in thumbnail solution, but complements the incredibly powerful thumbnail generation module ImageCache.
Imagefield Import
Allows users to import a large number of images into a CCK content type that contains an imagefield.
ImageField Tokens
Extends the default functionality of ImageField module by adding the ability to use node tokens in the ALT and Title text.
FileField Paths
Extends the default functionality of the FileField module by adding the ability to use node tokens in destination paths and filenames.
Provides a universal file upload field for CCK. It is a robust alternative to core's Upload module and an absolute must for users uploading a large number of image, video and audio files.

There is also a third way to add images to your site using IMCE uploader. I recommend using it only for simple images that are not part of the site content like site icons, etc.

IMCE is an image/file uploader and browser that supports personal directories and quota. It is used for inline image/file insertion into textareas and as a file browser in many popular rich text editors such as FCKEditor.


Drupal provides many modules that define locations and display them on maps. However, there is still no way to extract EXIF GPS coordinates from image files to display them on the map. There are a few most promising (but still non-functional) combinations of modules to do this:

Allows real-world geographic locations to be associated with Drupal nodes. Its drawback is that it's too address-oriented.
Allows you to display Exif metadata on image nodes.
Provides an interface to the Google Maps API. It also integrates with the Location module to display maps of Drupal nodes.
GMap Addons
A collection of addons for the GMap module: gmap_cck, gmap_debug, gmap_extrabaselayers, gmap_geo, gmap_markerlist, gmap_overlays, gmap_tracks.
Geospatial module like Location, but also supports lines and polygons.
Provides a CCK widget for the Geo module to populate geo fields from images that contain GPS information.
GMap + Geo
Provides a Google Map widget for Geo point fields.
Google Maps Tools
Reimplements the Gmap module and rewrites from scratch of the Mapadelic subsystem. Currently I see no reason to use it.
GMap Field
It seems this module is obsoleted now by other modules.


Flexible date/time field type for the CCK content module.
Displays date fields in year, month, and day calendar views.


Taxonomy Image
Allows site administrators to associate images with taxonomy terms.
Offers various ways to add terms and vocabularies in one tag cloud. It also offers a sideblock for each taxonomy tree.


Role Weights
Allows site admins to specify certain weights for user roles. It can be used to promote premium users to the top of views.
Public Download Count
Keeps track of file download counts.


Inline Registration
Allows anonymous users to register via the node/add page, thus removing a step/barrier from the user actually publishing content.
Email Registration
Allows users to register using only an email address without username.
Allows users to