Ultimate Drupal Reference
When it comes to Drupal, there are a lot of videos, blog posts and general how-to's out there.
While some of them are good, others are in need of improvement and a few of them are simply outdated.
This project will try to list you the best, most promising and most efficient resources that you might need when developing a Drupal site.
This project lives through new and up-to-date resources from the community, from you!
If you would like to add a resource or contribute in any other kind of way, be sure to read our contribution guidelines.
Table of contents
There are different ways of installing Drupal.
You can either install it directly on your local machine (or any server) or you can also work with a VM if you prefer.
If you really just want to catch a quick glimpse about a specific Drupal distribution, module or theme, then you don't even
need to install anything! Check out the next section for details.
If you want to run Drupal locally (and directly) on your Mac machine, check out this great tutorial.
Evaluate Drupal projects without installing Drupal
No further information needed. Simply visit simplytest.me and launch your custom sandbox!
In order to be able to run Drupal on your machine (or any server), you need a web server with PHP and a SQL database server.
Please check the official requirements page for more details.
Official installation page
Up-to-date and detailed instructions can be found on the official installation page.
If you prefer working with a VM, check out following alternatives:
While not required, it's highly recommended that you set up your Drupal project with Composer,
regardless of your technical setup.
Check the Composer template for Drupal projects to install Drupal quickly via Composer.
If you want to speed up Composer, have a look at prestissimo.
You can install it globally (no project dependency) to speed up Composer installations by a lot!
composer global require hirak/prestissimo and you're good to go.
Read more about prestissimo in its project page.
Converting a non-Composer Drupal codebase to use Composer
Jeff Geerling wrote a nice blog post about
convertig a non-Composer Drupal codebase to use Composer.
Check it out and benefit from Composer!
When it comes to developing custom modules, themes or simply automate certain tasks with scripts/cronjobs, there are two
major Drupal CLI's which can be a huge help for you:
There are lots of different IDE's and editors for PHP. But most Drupal developers tend to use PhpStorm.
Do you use any other IDE or editor? Please let me know!
Site building with Drupal
Once you have Drupal set up and running, it's time for site building.
Have a look at the great documentation on drupal.org about site building
as well as as understanding the concepts of Drupal.
Theming in Drupal
While Drupal 8+ core comes with lots of functionality already, the strength of Drupal lies in its extensibility.
Distributions are full copies of Drupal that include Drupal Core, along with additional software such as themes, modules, libraries, and installation profiles.
They're handy if you really just want to have a quick start with Drupal.
Druppio - A small business distribution with demo content.
Lighting - Lightning is a solid Drupal starter kit that enables developers to create great authoring experiences and empower editorial teams.
Open Social - Open Social is a out of the box solution for online communities.
Thunder - Thunder is a Drupal 8 distribution for professional publishing.
Varbase - Varbase is an enhanced Drupal distribution packed with adaptive functionalities and essential modules, that speed up your development, and provides you with standardized configurations.
- .. and many more on drupal.org
Drupal Commerce - Drupal Commerce is used to build eCommerce websites and applications of all sizes.
Address - Provides functionality for storing, validating and displaying international postal addresses.
Automatic Entity Label - Automatic Entity Label is a small and efficient module that allows hiding of entity label fields. To prevent empty labels it can be configured to generate the label automatically by a given pattern.
Corresponding Entity References - CER keeps reference fields in sync. If you have two entities that refer to each other using Entity Reference (or some other kind of reference field), it saves you the trouble of double-editing your entities in order to have them point at each other.
Default Content for D8 - The Default content module gives your module and install profile a way to ship default content as well as configuration.
Diff - This module adds a tab for sufficiently permissioned users. The tab shows all revisions like standard Drupal but it also allows pretty viewing of all added/changed/deleted words between revisions.
Disable Messages - Gives a site owner options to disable specific messages shown to end users.
D8 Editor Advanced link - Enhances the link Dialog in D8 CKEditor.
Entity Clone - This module add a new entity operation which allows to clone many of the entities (config & content) provided by the Drupal core.
Entity Redirect - Adds a configurable redirect after saving a node or other entity. The redirect is configurable per bundle.
External Links - External Links is a small module used to differentiate between internal and external links.
Iframe - A custom field, which lets you add a complete iframe to your content types; including Src-URL, setting width and height, optionally a title above, and optionally a target attribute.
Image formatter link to image style - This module provides an additional formatter for image core field, to link to an image style.
Office Hours - Defines a 'weekly office hours' field type, allowing you to specify when a location is open or closed.
Quick Node Clone - Quick Node Clone is meant as a way in Drupal 8 to clone nodes. It currently supports cloning of most field types including Inline Entity Form and Field Collection.
Scheduled Updates - The Scheduled Updates module allows scheduling updates at a specific date and time to entities such as Content(nodes), Users, Terms, Files and many more.
Scheduler - Scheduler gives content editors the ability to schedule nodes to be published and unpublished at specified dates and times in the future.
State Machine - Provides code-driven workflow functionality. It's also being used in Drupal Commerce to define checkout workflows.
Voting API - VotingAPI helps developers who want to use a standardized API and schema for storing, retrieving and tabulating votes for Drupal content.
Config Ignore - This module is a tool to let you keep the configuration you want, in place.
Configuration Split - Enables you to create different configuration sets for a site.
Devel - A suite of modules containing fun for module developers and themers.
Environment Indicator - This module will help you to keep sane while working on your different environments by adding a configurable color bar to each one of your environments.
Hacked! - This module scans the currently installed Drupal, contributed modules and themes, re-downloads them and determines if they have been changed.
Stage File Proxy - Stage File Proxy saves you time and disk space by sending requests to your development environment's files directory to the production environment and making a copy of the production file in your development site.
Antibot - Antibot is an extremely lightweight module designed to eliminate robotic form submissions on your website in an innovative-fashion.
Better Login - Fancy and extendable login forms for Drupal.
CAPTCHA - A CAPTCHA is a challenge-response test most often placed within web forms to determine whether the user is human.
Chosen - Chosen uses the Chosen jQuery plugin to make your
<select> elements more user-friendly.
Client-side hierarchical select - A simple client-side hierarchical select widget for taxonomy terms.
Clientside Validation - This module adds clientside validation to all forms and webforms.
Form Placeholder - This module creates the possibility to quickly add placeholders to all textfields of any form on the site.
Honeypot - Honeypot uses both the honeypot and timestamp methods of deterring spam bots from completing forms on your Drupal site.
Prepopulate - The Prepopulate module allows fields in most forms to be pre-populated from the $_REQUEST variable.
reCAPTCHA - Uses the Google reCAPTCHA web service to improve the CAPTCHA system. It is tough on bots and easy on humans.
Smart Date - This module attempts to provide a more user-friendly date field, by upgrading the functionality of core in a number of ways.
Spam Master - Spam Master protects Drupal based websites from millions of known spam emails, domains, ip's and words by blocking user rregistrations, comments, messages, contacts, feedbacks or threads.
Webform - Webform is the module for making forms and surveys in Drupal.
Webform videos on Drupal.org - A series of videos by the makers of Webform explaining features and tutorials for installing and using the Webform module.
Blazy - Provides integration with bLazy to lazy load and multi-serve images to save bandwidth and server requests. The user will have faster load times and save data usage if they don't browse the whole page.
Image Optimize (or ImageAPI Optimize) - This is a toolkit for ImageAPI. It requires imageapi_gd or imageapi_imagemagick or any ImageAPI toolkit to work.
Media - The Media module provides an extensible framework for managing files and multimedia assets, regardless of whether they are hosted on your own site or a 3rd party site - it is commonly referred to as a 'file browser to the internet'.
- Note: As for the
1.0-beta3 release, it needs to be patched when installed with Composer.
Slick Carousel - Slick is a powerful and performant slideshow/carousel solution leveraging Ken Wheeler's Slick carousel.
Video - Video module allows you to upload video in any format, play video in any format, transcode video to H.246, Theora, VP8(Web compatible formats) using Zencoder or FFMPEG automatically creates video thumbnails, copy and deliver videos from cloud file systems like Amazon S3.
Video Embed Field - Video Embed field creates a simple field type that allows you to embed videos from YouTube and Vimeo and show their thumbnail previews simply by entering the video's url.
Migrate Plus - The migrate_plus project provides extensions to core migration framework functionality, as well as examples.
Migrate Source CSV - This project allows you to import CSV files using Drupal Migration.
Migrate Tools - The Migrate Tools module provides tools for running and managing Drupal 8 migrations.
Language Cookie - Adds an extra "Cookie" field to the Language Negotiation settings, allowing the language to be set according to a cookie.
Domain Access - The Domain Access project is a suite of modules that provide tools for running a group of affiliated sites from one Drupal installation and a single shared database.
Advanced CSS/JS Aggregation - AdvAgg allows you to improve the frontend performance of your site.
CDN - This module provides easy Content Delivery Network integration for Drupal sites. It changes file URLs, so that files (CSS, JS, images, fonts, videos …) are downloaded from a CDN instead of your web server.
DB Maintenance - DB maintenance optimizes administrator-selected tables in the database during regular cron.php executions.
Memcache API and Integration - This module provides integration between Drupal and Memcached.
Custom Search - This module alters the default search box in many ways. If you need to have options available like in advanced search, but directly in the search box, this module is for you.
Elasticsearch Connector - Elasticsearch Connector is a set of modules designed to build a full Elasticsearch eco system in Drupal.
Search API - This module provides a framework for easily creating searches on any entity known to Drupal, using any kind of search engine.
Search API Solr Search - This module provides a Solr backend for the Search API module.
Search Autocomplete - This module allows you to add autocomplete functionality to virtually any fields of a Drupal site. During the input, the field will be expanded and offers a list of suggestions before you start the search.
Automatic Updates - A project for organizing the Auto Updates Initiative efforts, as proposed in this idea.
Password Reset Landing Page (PRLP) - The Password Reset Landing Page "PRLP" module enhances the original password reset landing page by letting a user set their new password at the same time they "log in" using the one-time-login link.
Password Strength - The Password Strength module provides realistic password strength measurement and server-side enforcement for Drupal sites using pattern-matching and entropy calculation.
Persistent Login - The Persistent Login module provides a "Remember Me" option on the user login form.
Protected Pages - Protected Pages modules allows the administrator to secure any page in your website by password.
Rabbit Hole - Rabbit Hole is a module that adds the ability to control what should happen when an entity is being viewed at its own page.
Security Kit - SecKit provides Drupal with various security-hardening options.
Shield - PHP Authentication shield. It creates a simple shield for the site with Apache authentication.
SEO / Analytics
Google Analytics - Adds the Google Analytics web statistics tracking system to your website.
Metatag - The Metatag module allows you to automatically provide structured metadata, aka "meta tags", about a website.
Pathauto - The Pathauto module automatically generates URL/path aliases for various kinds of content (nodes, taxonomy terms, users) without requiring the user to manually specify the path alias.
Piwik Web Analytics - Adds the Piwik web statistics tracking system to your website.
Redirect - Manage custom site redirects.
SEO Checklist - The Drupal SEO Checklist uses best practices to check your website for proper search engine optimization. It eliminates guesswork by creating a functional to-do list of modules and tasks that remain.
Simple XML sitemap - Every webpage needs an automatic XML sitemap generator for SEO reasons. This module aims to be a replacement for the xmlsitemap module for Drupal 8.
@font-your-face - @font-your-face provides an administrative interface for browsing and applying web fonts (using CSS @font-face, supported in all popular browsers) from a variety of sources.
Admin Toolbar - The Admin Toolbar intends to improve the default Drupal Toolbar (the administration menu at the top of your site) to transform it into a drop-down menu, providing a fast access to all administration pages.
Block Group - This module extends the standard Drupal block system with block groups. Each block group provides a new block as well as a corresponding region. Child blocks can be moved into any group region.
Block Visibility Groups - Block Visibility Groups allows the site administrator to easily manage complex visibility settings that apply to any block placed in a visibility group.
Easy Breadcrumb - The Easy Breadcrumb module provides a plug-and-play block to be embedded in your pages, typically at some place near the page's header.
Entity Browser - The goal of this module is to provide a generic entity browser/picker/selector.
Field Group - Fieldgroup will, as the name implies, group fields together. All fieldable entities will have the possibility to add groups to wrap their fields together.
GraphQL - This module lets you craft and expose a GraphQL schema for Drupal 8.
Linkit - Enriched linking experience - Linkit provides an easy interface for internal and external linking with wysiwyg editors by using an autocomplete field.
Menu Breadcrumb - This module allows you to use the menu the current page belongs to for the breadcrumb, generating breadcrumbs from the titles of parent menus.
Menu Item Extras - Menu Item Extras provides extra fields for menu items without using additional entities.
Menu Link Attributes - This module allows you to add attributes to your menu links.
Menu Link Weight - This module replaces the standard numeric weight dropdown widget for menu links in the node form with a tabledrag widget that lists all children for the selected parent.
Menu Trail By Path - Menu Trail By Path sets the active-trail on menu items according to the current url.
Paragraphs - Paragraphs is the new way of content creation! It allows you — Site Builders — to make things cleaner so that you can give more editing power to your end-users.
Simple hierarchical select - Simple hierarchical select defines a new form widget for taxonomy fields to select a term by "browsing" through the vocabularies hierarchy.
Token - Provides additional tokens not supported by core (most notably fields), as well as a UI for browsing tokens.
Vertical Tabs Config - This module allows you to hide and re-order vertical tabs on add/edit node pages depending on content type and role.
Responsive and off-canvas menu - This module integrates the mmenu jQuery plugin with Drupal's menu system with the aim of having an off-canvas mobile menu and a horizontal menu at wider widths.
AddToAny Share Buttons - Share buttons for Drupal including the AddToAny universal share button, Facebook, Twitter, Google+, Pinterest, WhatsApp and many more.
Ridiculously Responsive Social Sharing Buttons - Social sharing buttons that you can drop into any website with attractive SVG-based icons, small download, and browser compatibility. No 3rd-party scripts.
User & Roles management
Auth0 Single Sign On - Single Sign On for Enterprises + Social Login + User/Passwords. For all your Drupal instances. Powered by Auth0.
Email Registration - Allow users to register and login using only an email address. Users can then log-in using their email address and password for authentication.
Group - The Group module allows you to create arbitrary collections of your content and users on your site and grant access control permissions on those collections.
Permissions by Term - The Permissions by Term module extends Drupal by functionality for restricting access to single nodes via taxonomy terms.
RoleAssign - RoleAssign specifically allows site administrators to further delegate the task of managing user's roles while withholding the Administer permissions permission.
Taxonomy access fix - This module adds more specific Taxonomy permissions.
Better Exposed Filters - The Better Exposed Filters module replaces the Views' default single- or multi-select boxes with radio buttons or checkboxes, respectively.
DraggableViews - DraggableViews makes rows of a view "draggable" which means that they can be rearranged by Drag'n'Drop.
Views Conditional - Views Conditional is a simple module that allows you to define conditionals (if xxx then yyy) with fields in views.
Views Infinite Scroll - Views infinite scroll allows you to load and display pages of any view inline, using AJAX (this has been called infinite scrolling, load more, autopaging, endless pages and more).
Views Reference Field - This field in conjunction with the Paragraphs module, makes for a very powerful content management system, allowing addition of just about any kind of content into an entity page.
AdaptiveTheme - Adaptivetheme for Drupal 8 is a base theme designed for people who don’t code, or for those who only want to write a bit of CSS but still want a sleek and sophisticated theme for todays mobile web - and beyond.
Bootstrap - This base theme bridges the gap between Drupal and the Bootstrap Framework.
Drupal8 Zymphonies Theme - Drupal8 Zymphonies Theme is the first Zymphonies Drupal 8 Free Responsive Theme which has many new features.
ZURB Foundation - Zurb Foundation for Drupal is the official implementation of the framework by the same name.
Every software has bugs. At least if it does more than simply printing out a
While we're not able to write bugless software, we can still try to handle bugfixing as smooth as possible.
So, what do you do when you find a bug in a module, theme or maybe even Drupal core?
Or if you simply just need a little help? Let's try figuring this out in the next sections.
Update to the latest stable release
This step is extremely obvious, but maybe there has been a newer stable release of the module since your installation.
Check if you have the newest stable version of the project, the bug might have been fixed in the meantime.
Read the project's description
The second step might be obvious too but I still want to point it out. Everyone is free to contribute to Drupal and while
most Drupal-related things happen on Drupal.org itself, there are a few exceptions. So read the project's description
carefully! Drupal console e.g. chose to handle bug reports/feature requests
on GitHub. Drupal commerce offers contribution support on IRC.
Drupal projects normally work with issue queues (if nothing else defined), meaning that every project (Drupal core/module/theme/distribution/etc.) has it's
own issue queue. An issue can be everything from a bug report, task, feature request, support request, or just a plan.
You can read more about issue queues on drupal.org.
So, if you've found a bug in a project, there's a high chance that the bug was already reported or maybe even fixed.
On a project's page, search for
All issues and click on the
x open (x = number of open issues) link.
This link will take you to the project's issue queue.
Important: Drupal core is a Drupal project itself. It has it's own issue queue and release pages.
See the Drupal core project's page on Drupal.org.
Finding your issue in the queue
In the issue queue the first thing you want to do, is filtering the issues by a major version.
If the module has been around since Drupal 6/7/maybe even longer, you're less interested in the legacy issues.
So change the Version filter to e.g.
- 8.x issues -.
If you still didn't find your issue, try changing the Status from
- Open issues - to
- Any -.
It's possible that the issue has already been fixed but not released yet.
Creating an issue
If you didn't find your issue, you can create a new one. Make sure to be as precise and specific as possible.
Include the exact version of Drupal and the exact module/theme/distribution version.
Write how to reproduce the bug on a fresh Drupal installation. Speaking about, you might want to check if the
bug also occurs on a fresh Drupal installation with only the needed modules/themes installed.
Maybe it's a bug that only occurs when certain other modules/themes are installed?
Keep in mind that many projects are being contributed by developers in their free time. A project maintainer
might respond very quickly to a new issue but sometimes it can take weeks or even months until you get a reply.
In the meantime, you can try to get in touch with other Drupal developers who might be able to help you out.
Check the next sections for more information.
As a developer, you probably came around Stack Overflow when trying to fix an issue.
Good news: There's a Stack Exchange for Drupal as well! It's called Drupal Answers, have a look.
If you were unlucky finding answers via the issue queue/Drupal Answers, maybe someone wrote a blog post or a tutorial
which could help you in solving your issue.
Now before you go on something like "But Googling is obvious", let me give you one important tip:
- Limit your search results to a specific time frame!
If you search for a commerce issue for example, the probability is high to find solutions to the Drupal 7 version of it.
But if you're interested in a solution for the Drupal 8+ versions, you're better off limiting the search results by e.g.
publish date and only show results from the past year on.
The date limitation is only one thing you can do, there are a lot of articles on how to google efficiently out there, read them!
IRC / Slack support
If you still weren't able to find a solution to your issue, you can write to other Drupal developers via IRC or Slack.
Check the Get in touch with the Drupal community section on how to connect to them.
When asking for help, keep in mind that it's not self-evident to help many other people in complicated matters.
Be friendly, try describing your issue as precisely as possible and maybe a good fellow will help you out.
Contributing to Drupal
Are you happy with Drupal and would you like to give back? That's great!
There are many different way on how to contribute back. You can improve documentation, add translations, create
new contrib projects or simply donate.
Please follow the Ways to Get Involved guide on Drupal.org.
One important tip though: Starting to contribute can be a little bit tough and difficult in the beginning.
If you have the chance to visit A Drupal camp or conference or maybe even just a meetup, try to get some guided help there.
Some things are a little bit complicated but every experienced Drupal developer will most-likely try in helping you out.
Don't be afraid to ask for help! I quote from Drupal:
Come for the Code, Stay for the Community.
Find below a few video resources that are really worth your time.
Important: There's also Drupal.tv, check it out!
Beginner training series
Videos on Drupal.org - A series of videos by the makers of Webform explaining features and tutorials for installing and using the Webform module.
When it comes to hosting a Drupal site, you can always use any server which supports the system requirements.
However, there are a few Drupal specialized PaaS hosting options you might want to consider as well.
Get in touch with the Drupal community
If you wish to get more involved with the Drupal community, or want to get in contact with Drupal developers, you can use one of the following platforms.
DrupalChat - An open source (Rocket.Chat) alternative to Slack.
Drupical - Find Drupal events with ease in a map! Note: The list is not complete but can give you a rough overview of Drupal events around the world.
IRC - Chat with the Drupal Community on IRC!
Meetups - Participate in local Drupal meetups in your area and meet the community face to face.
Reddit - The Drupal community on Reddit. They have weekly rotating posts!
Slack - A list of Drupal Slack spaces and channels.
Twitter - Yes, a lot of us are on Twitter too!
Get the best Drupal news, tutorials and articles once a week without hours of browsing.
Check out the TheWeeklyDrop.
Copyright (c) 2018 David Pacassi Torrico
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE