Last updated November 20, 2015. Created on September 16, 2007.
Edited by Sheldon Rampton, 2020media, LeeHunter, sepeck. Log in to edit this page.

Directory Precedence

Drupal's core modules are located in the /modules directory directly inside the Drupal docroot. Core themes are located in the /themes directory. Additional contributed modules, themes and libraries can be placed in several locations:

  1. Inside the profiles directory of the website's installation profile. For example, a website built using the Panopoly installation profile has modules inside directory /profiles/panopoly/modules, and its theme inside directory /profiles/panopoly/themes, and libraries inside directory /profiles/panopoly/libraries.
  2. Inside the sites/all directory, e.g., /sites/all/modules, /sites/all/themes, /sites/all/libraries.
  3. Inside the website's configuration directory, which can be either the directory named "default" or a directory whose name matches the website's base domain. In other words, if your website has a base domain of, Drupal will recognize a named "" as the configuration directory instead of "default," and code will be detected if it is placed in directories /sites/, /sites/, and /sites/

If you place versions of the same module or theme in more than one of these locations, Drupal follows an order of precedence to determine which version of that module or theme it will load. Code in the /profiles directory overrides code in Drupal's core /modules directory. Code inside /sites/all overrides code in the /profiles directory. Code inside the configuration directory overrides code in /sites/all. You could, for example, have different versions of the Views module in several locations and a custom theme for, as follows:

  • /profiles/panopoly/modules contains Views 7.x-3.11
  • /sites/all/modules contains Views 7.x-3.13
  • /sites/ contains Views 7.x-3.x-dev, and /sites/ contains a theme named yourtheme.

If you were using this codebase and Drupal multi-sites to run more than one website, the website at would use the 3.x-dev version of Views, and all other websites would use the 7.x-3.13 version. The theme named "yourtheme" would only be available to

This system of directory precedence gives you quite a bit of flexibility and the ability to have different versions of modules -- even core modules and modules associated with an installation profile -- available to different websites all sharing the same codebase.

You can also place modules and themes within subfolders underneath any of the /modules and /themes folders in any of these locations. They will be searched recursively when you visit your admin/build/modules page. You can use this to further organise your available items.

Multi-site Considerations

If you use the /sites/all directory for a codebase using multi-sites, then any module or theme installed under it will be available to all sites using the same code base.

If you wish to limit the access to a module or theme to a specific site, then create a modules and/or themes directory under that site's configuration folder.

Anything in a site specific directory will not be accessible to other sites sharing the code base.

System registry

Drupal uses the system table in its database (sometimes called the "registry") to keep track of the file location where it should find and load modules, themes and libraries. If you are having trouble getting your website to recognize the correct file location where it should be finding your code, you may need to rebuild the registry.

Looking for support? Visit the forums, or join #drupal-support in IRC.


Robin Millette’s picture

What about install profile modules found in profiles/PROFILENAME/modules/ ? Are those seen first, or overridden by sites/SITENAME/module?

patcon’s picture

Came here wondering the same thing Robin :)

Will post back if I find a conclusive answer.

patcon’s picture!
Alrighty, so the API page would seem to imply that the order to search includes (for D6 and D7):

  1. profiles/PROFILENAME
  2. sites/all
  3. sites/ (or wherever the settings.php file is located)


uberEllis’s picture

Does that mean a newer version of a module in sites/all/modules/ will override an older version module present in profiles/PROFILENAME/modules/?

I know that sites/ will always override other versions on the platform.

patcon’s picture

Yep, I believe so :)

sonicthoughts’s picture

would be great if this were definitively documented somewhere ....