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)

Modules related to Image.module

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.

Modules related to ImageField

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.

Modules related to IMCE

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 login using their e-mail address, and other login-related features.
Login Destination
Controls where users go after logging in: either static URL or a PHP snippet evaluating your own site's logic. There is a plan to merge it into LoginToboggan.
Automated Logout
Provides a site administrator the ability to log users out after a specified time of inactivity.


Email Field
Provides a CCK field type for email addresses with validation, encryption and mailto links.
Fixes the problem of bad email 'Return-Path' header settings which prevent email bounce backs going to the sender of the email.


JQuery menu
Transforms multi-level menus into click and expand menus with a small plus icon on the left of every expandable menu item (this module is better than DHTML Menu and Active menus) because it provides more intuitive UI.
Menu Trail By Path
Sets the active-trail on menu items according to the current url.
Menu block
Provides configurable blocks of menu trees starting with any level of any menu.
me aliases
Provides shortcut paths to current user's pages, e.g. user/me, blog/me, user/me/edit, tracker/me, etc.
Menu token
Provides tokens, that could be used in title or in path of menu items (links).


Custom Breadcrumbs
Allows administrators to set up parametrized breadcrumb trails for any node type. This allows CCK-style node types to synchronize breadcrumbs cleanly with custom views or pathauto aliases.
Taxonomy Breadcrumb
Generates taxonomy based breadcrumbs on node pages and taxonomy/term pages.


Highly configurable HTML5/960 grid base Drupal 7 theme.


CSS Injector
Injects CSS into the page output based on configurable rules. Don't forget to disable the "Preprocess CSS" checkbox when you enable CSS optimization under the performance section. (This module can be replaced with a simple nameless block that calls drupal_add_css on the specified pages. I don't recommend using a block for this.)
Page Style
Visitor-based style changer in the block and in the browser menu.
User-based themes colorization.


Meta tags, aka Node (key)words
Allows you to set some meta tags for each node, view or panels page.
Adds a clean, attractive voting widget to nodes.


Aggregates content from XML feeds RSS 2.0, ATOM 1.0 and RDF 1.0. It is more powerful than the core module Aggregator.

Internationalization (i18n)

Provides content translation for nodes and taxonomy.
Translation table
UI for quick translation of taxonomies and menus.


Search API
Provides a framework for easily creating searches on any entity known to Drupal, using any kind of search engine.
Database search
Provides a backend for the Search API that uses a normal database to index data.
Search API pages
This module is for creating simple search pages for the Search API project.


Site map
Provides a site map that gives visitors an overview of your site. Please note it's different from the XML sitemap module.
XML sitemap
Creates a sitemap that can be automatically submitted to Google and other search engines to notify them of site updates. Please note it's different from the Site map module.
Google Custom Search Engine
Embedded search engine that can be used to search on your site.
Google Analytics
Adds the Google Analytics web statistics tracking system to your website.
Provides web content providers with the means to earn revenue from visitors by displaying ads from Google AdSense advertising service on their sites.
Mobile Codes
Generates QR Code mobile barcodes that can be read by camera phones.
Printer version
Allows you to generate printer-friendly versions of any node.


There are two e-Commerce solutions: e-Commerce and Ubercart. I suggest e-Commerce when you need to add e-commerce functionality to your existing site (shopping carts, subscriptions, recurring payments, sell file downloads, shippable items) because e-Commerce is less invasive than Ubercart for non-commerce parts of your site. But I suggest Ubercart when you need out of the box solution to build an online store.


For module and theme developers.
Theme developer
Firebug for Drupal themeing.
Drupal For Firebug
Helper module for a customized Firefox plug-in that displays Drupal debugging and SQL query information to the Firebug window.
SEO Checklist
Provides a checklist of good Drupal SEO (Search Engine Optimization) best practices.

NOT Recommended

Language Icons
Please don't use this module on your sites because using flags is very offensive for many users. For more information, see Flag as a symbol of language - stupidity or insult.
Please don't use Lightbox-like modules because they have very poor usability.