What Drupal Modules Do I Use?

Whenever I start a new website I think I ought to create a list of the essential modules to get started quickly, but it's so hard to slow down and start keeping records when I could just go ahead and do it... Let's try it anyway!

Default Core Modules

Drupal has a number of required core modules, these are always there. Out of the box it also has the following core modules enabled:

Color
If you use the default Garland theme or another color-enabled theme, then the Color module lets you easily change the color scheme: just click the theme's configure link on /admin/build/themes to get a color picker. Note that it will not work if you've selected the Private download method on /admin/settings/file-system, but you can temporarily change it to Public and change it back after using the color picker.
Comment
You need this if you want your users to be able to post comments anywhere on your site. Don't worry that your users will be posting comments all over your site. You can selectively disable (or enable) their ability to post comments per item or per content type.
Help
Provides on-line help, mostly for administrative functions, but also for some user functions.
Menu
If you want to have a menu on your site — and most people do — then this is it.
Taxonomy
Enables the categorization of content. You may think you don't need it, but trust me, you will.

I suggest to keep these modules enabled. Let's see what else we have.

Optional Core Modules for Specific Functions

This now depends on what you want to do with your site:

Locale
If your site is non-English, you'll need this to activate translations.
Contact
Enables users to send email to site operators and/or other registered users through contact forms, i.e. without needing to know their email addresses.
Path
Lets you use meaningful URLs, e.g. /drupal/what-modules instead of /node/45.
Profile
Enables you to define additional fields beyond name and email that your users can fill in when they register.
Search
Enables site-wide text search.
Statistics
Gathers site access statistics.
Tracker
Provides recent posts and my recent posts lists. If you also have the Views and Views UI modules enabled, then you can define additional lists.
Upload
Enables users to upload files with their posts.

Optional Core Modules for Specific Content Types

Out of the box, Drupal gives you two content types: the page and the story. They are functionally identical, but you can customize them separately, e.g. whether they can have comments by default, and which user roles are allowed to create them. You can add additional content types if you like, but you don't really get any additional functionality. The following core modules however, provide additional functionality:

Blog
Creates blogs.
Book
Allows you to create a hierarchical structure of pages and automatically creates expanding menu items, child and parent links, and breadcrumbs for you. This seems to be the only way to get multiple levels of breadcrumbs.
Forum
Lets you create a (possibly hierarchical) structure of forums, which can contain forum topics with threads of comments.
Poll
Allows your site to capture votes on different topics in the form of multiple choice questions.

So far we've looked at modules that are part of Drupal Core, i.e. that will be there whenever you install the Drupal distribution. There is a large number of additional modules, so-called Contributed Modules, that you can download from http://drupal.org/ to augment your base installation.

Additional Content Types

Event
Create content with start and stop date/times and present them in various calendar views.
Image and Image Gallery
Upload and display images. Images can appear as separate pages, or within a (possibly hierarchical) structure of image galleries. With the additional Image Assist module, images can also be embedded within other content types.

Creating a Nice Site

Loginmenu
Get Rid of Drupal's Ugly User Login Block explains it all!
Tagadelic
Creates the block with the blog tags in the left sidebar.
JSTools
Provides a number of modules that implement JavaScript functionality, for example a pop-up calender for entering dates into the Event module.
Views
Allows you to create and display all sorts of lists. Steep learning curve...

Managing Users

Drupal has the concept of roles: you can define any number of roles, give each role a specific set of permissions, and then assign any number of roles to each user. Users with the administer access control permission can change these permissions — do not give this permission to anyone who is not supposed to have complete access to your server!

Devel
The Devel module has a large number of advanced functions for developers. One function, the Switch Users block, is useful for every site administrator: users with the switch users permission can switch into any other user's account to see what the site looks like for that user.

Obviously, this is a very dangerous permission, that you want to keep to yourself! On my sites I always create a System role that has switch users permission, and for each (major) role I create a test user account that also gets the System role. That way I can easily switch back and forth among my test user accounts.

RoleAssign
If you delegate the administer users permission to someone else, they can create users and assign roles, and they can even give themselves the above-mentioned System role and gain the ability to switch into the super user #1. You usually don't want to allow that, and RoleAssign allows you to limit the set of roles that such a user can assign. This is an absolute must-have!
User_Register_Notify
Lets you define recipients and text of an email notification message when a new user has registered.
User_Status
Adds customizable user messages for activating/blocking/deleting a user account. This is a must-have if you require administrative approval of new user registrations.
Excluded Users
Lets you hide your test user accounts from user lists.
Node Adoption
If you ever delete a user that has created any content, then that content will lose its author. Node Adoption allows you to reassign orphaned content to a defined account.

Controlling Accessibility

ACL
ACL is a helper module for Forum Access and Image Gallery Access.
Forum Access
Lets you define which roles can read/post/edit/delete for each forum, and you can also assign moderators to each forum.
Image Gallery Access
Lets you define which roles can read/post/edit/delete for each image gallery, and you can also assign moderators to each gallery. I happen to be the maintainer of this module.
Content Access
Another access module; this one can control access to single nodes.

Fixing Protected RSS Feeds

If you have any RSS Feeds that are not accessible to unauthorized users, then you have a problem: when logged-in users copy the feed address into their feed reader, then the feed reader will usually not be able to access the feed, because it doesn't have an authorized session. Very often, users will find that the feed doesn't work but they won't remove it, and the feed reader will continue polling your site forever. Unfortunately, every unsuccessful access results in an error message in the Watchdog log!

Securesite
Can be used to put all or part of a site under password protection. I use it to protect the feeds — the good thing about Securesite is that unauthorized accesses don't result in "access denied" messages, so this is an elegant solution to the problem described above. The more advanced feed readers may be able to do HTTP authentication with Securesite alone, but most need an additional module:
HTTP Authentication
Provides the ability to trigger an HTTP authentication by adding a URL parameter, and can even pass username and password on the address line, for example to help dumb feed readers to access protected feeds.

Help with Forums

Subscriptions
Depending on your audience, it may not be realistic to expect them to regularly visit your site, and they'll probably lose touch with your site. The Subscriptions module allows them to enter subscriptions for forums (and other content type), so that they get email notifications, when new content appears. This is a great help for keeping in touch.
Comment Mover
Allows pruning and grafting of forum topics and comments, including their dependent comments subtree.

Help with Images

Upload_Image
Batch uploading of images.
Lenti