Understanding Drupal
This guide gives you a bigger picture of Drupal concepts, helping you to understand its framework.
System requirements
This guide covers detailed system requirements for a Drupal installation.
Installing Drupal
This guide covers preparing, running the installation script, and the steps that should be done after the installation script has completed.
Updating Drupal
How to update your Drupal site.
Administering a Drupal site
Administering a Drupal site
Extending Drupal
Extend your Drupal site’s functionality with contributed modules or alter its appearance with contributed themes.
Contributed modules
Documentation for contributed modules for Drupal.
- A11Y Paragraphs Tabs
- Accelerated Mobile Pages (AMP)
- Access NASA API
- Accessibility Scanner
- AddToAny Share Buttons
- Adobe Launch
- Advanced CSS/JS Aggregation
- Advanced Insert View
- Advanced Varnish
- Album Photos
- Alexa
- Allow a content type only once (Only One)
- Apigee API Catalog
- Apigee Developer Portal Kickstart
- Apigee Edge
- Apigee Monetization
- Apple News
- Astrology
- AudioField
- AutoFloat
- Automatic Updates
- Avatar Kit
- BEE hotel
- Backup and Migrate
- Bamboo Twig
- Better Exposed Filters
- Bibliography & Citation
- BigCommerce
- Block Form Alter
- Block List Override
- Block Style Plugins
- Blog
- Bootstrap Layouts
- Bootstrap Paragraphs
- Bothive Chatbot
- Botman
- Boxout
- Braintree Cashier
- Breakgen
- Brightcove Video Connect
- Bundle override
- Burndown
- Business Rules
- Bynder
- CAS
- CDEK API
- CKEditor 5
- CKEditor CodeMirror
- CKEditor Font Size and Family
- CMRF Core Documentation
- CSV Importer
- CSV to Config
- Captcha Keypad
- Changed Fields API (8.x-3.x)
- Changed Fields API
- Chart Suite Guide
- Charts
- Chatbot API
- Claro
- Cloud
- Color Field
- Commerce
- Commerce API
- Commerce Affirm Credit Payment Gateway
- Commerce Approve
- Commerce Authorize.Net
- Commerce Braintree
- Commerce Funds
- Commerce Google Tag Manager
- Commerce Inventory
- Commerce Migrate
- Commerce PVT
- Commerce Pagseguro Transparente
- Commerce PayPal 8.x
- Commerce Postfinance
- Commerce Recurring Metered
- Commerce Rental
- Commerce Square Connect
- Commerce Tpay
- Commerce TrustedShops
- Commerce Variation Add-on
- Commerce iDEAL Payment Gateway
- Components
- Computed Field Plugin
- Conditional Fields
- Config Override Inspector
- Config Single Export
- Config Token
- Config partial export
- Configuration Split
- Content Feedback
- Content Import
- Content Packager
- Content Synchronization
- Content-Security-Policy
- Cura Childcare Suite
- Custom JS Module
- Custom breadcrumbs
- D8 Rules Essentials
- Decoupled Blocks: Vue.js
- Deploy - Content Staging
- Deploying Meilisearch to production
- Devel
- Developer portal
- Digital Signage Framework
- Dominican Catalogus Module
- Drupal Diversity & Inclusion
- Drupal OAuth & OpenID Connect Login - OAuth2 Client SSO Login
- Drupal Remote Dashboard
- Drupal YouTuber
- Drupal driver for SQL Server and SQL Azure
- EU Cookie Compliance
- EVA
- Easy Breadcrumb
- Editor Button Link
- Ek Jitsi
- Encrypt
- Entitree Administration Guide
- Entity Browser - Table Layout
- Entity Browser
- Entity Pager
- Entity Parser
- Entity Prepopulate
- Entity Print
- Entity Reference Facet Link
- Entity Reference Views
- Entity Reference Views Select
- Entity Share
- Entity Share WebSub
- Entity Update
- Entity Usage
- Entity Usage Addons
- Entity browser
- Epsilon Harmony Connector 8.x
- Evaluate Webform
- Excel Importer
- Expire reset password link
- Extensions API
- External Entities
- Facebook Instant Articles
- Feature Toggle
- Features
- Feeds
- Feeds Migrate
- Feeds Paragraphs
- Field Inheritance
- File Extractor
- Filebrowser
- FillPDF
- Firebase Authentication Guide
- Fivestar
- Flag Lists
- Flashpoint Education
- Flexible Views
- Flysystem
- FolderShare Guide
- Font Awesome Icons
- Form mode manager
- Formatter Suite Guide
- Forms steps
- FortyTwo
- Freelinking
- General Data Protection Regulation
- Geocluster D8/D9 Set-up
- Geolocation Field
- Get Linkedin Posts
- Ghost Inspector Integrator
- Give
- Google API PHP Client
- Google Analytics Counter
- Google Analytics Search API Autocomplete
- Google Calendar Import
- Gophish Integration
- GovUK Notify
- GraphQL
- Group
- Group Invite
- Group Media
- Gutenberg
- Guzzle REST Generator
- HTTP Client Manager
- Hanging Conjunctions Filter
- Hidden Tab
- Honeypot
- Human Presence Form Protection
- IMCE File Manager
- IPMA Weather
- Image Base64 Formatter
- Image Replace
- Inline Formatter Field
- Insert
- Instagram Block
- Islandora
- Janrain Connect
- Juicer - Social Media Feed Aggregator
- Key
- Keycloak OpenID Connect
- Klaro Consent Management
- Konami Code
- LDAP Integration with Active Directory and OpenLDAP - NTLM & Kerberos Login
- Layout BG
- Layout Builder Block Sanitizer
- Layout Builder Restrictions
- Layout Builder Styles
- Layout Builder Tabs Section
- Layout Components
- Lazy-load
- Leaflet More Markers
- Libraries API
- LiftIgniter
- Lightweight Directory Access Protocol (LDAP)
- Link attributes
- Link icon
- Linkback
- Lndr
- Localized Configuration
- Loqate
- Ludwig
- Maestro
- Mailchimp
- Markdown
- Marketing Cloud
- Media: Acquia DAM
- Membership
- Message Thread
- Metatag
- Metatag Google Scholar
- Micro Site
- Migrate QA
- Migrate Source CSV
- Migration Tools
- Mime Mail
- Modifiers
- Multistep Form Framework
- Multiversion
- NASA Astronomy Picture of the Day
- OAuth2 Client
- OEmbed Lazyload
- One Time Password SMS
- OpenChurch
- OpenEDU
- OpenID Connect
- OpenID Connect Windows Azure AD
- OpenLayersD8
- OwnTracks
- PHP filter
- Packages
- Paragraphs
- Parameter Message
- Paranoia
- Pathauto
- Permanent Entities
- Permissions by Term
- Persistent Login
- Place Blocks module
- Poll
- Popularity of modules
- Popup field group
- Potion
- Preview graph QL
- Private Message
- Progressive Web App (PWA)
- Quadstat
- Quick Node Clone
- RELAXed Web Services
- RNG
- Reactify theme & module
- Read time module basic usage
- Recombee
- Recurring Dates Field
- Recurring Events
- Registration role
- Remote Stream Wrapper
- Responsive Class Field
- Responsive menu
- Role paywall
- Rules API POST
- SAML Authentication
- SAML Authentication
- SAML SP Single Sign On (SSO) - SAML Service Provider
- SAML vs. OpenID Connect vs. OAuth
- SMS Framework
- Salesforce Suite
- Scheduler
- Schema.org Metatag
- Search API
- Search API Autocomplete
- Search API Exclude Entity
- Search API Federated Solr
- Search API Sajari
- Search API Solr
- Search API Xunsearch
- Search API opensolr
- Semantic Views
- Service Worker Registration
- Sharerich
- Sherpa Webform
- ShrinkTheWeb
- Simple FB Connect
- Simple Instagram Feed
- Simple Page Manager
- Simple Popup Blocks
- Simple React CRUD
- Simple React CRUD
- Simple XML sitemap
- Simplenews
- Sitemap
- Skilling
- Skins
- Smart Content Overview
- Smart Date
- Smart Trim
- Snippet manager
- Social API
- Social Auth Vipps
- Socialfeed
- Songkick
- Sound Management
- Spectra Analytics
- Statistical Spam Filter
- Stop Administrator Login
- Style Switcher
- Summit Meeting List
- Superfish Drop-down Menus
- Superfish Drop-down Menus
- Swagger UI Field Formatter
- Switches
- Synonyms
- System Monitor
- TMGMT Capita
- TacJS
- Taxonomy Bulk Actions (TBA)
- Tealium iQ Tag Management
- Telephone International Widget
- Template Entities
- Template Whisperer
- TextRazor - Automatic text classification
- The Better Mega Menu
- Tombstones
- Toolshed
- Transaction
- Twig Components
- Twig Render This
- Twig Tools
- Twig tweak
- Twitter API Block
- Twitter Tweets
- Typed Data API Enhancements
- UI Patterns Pattern Lab
- Ubercart
- Uikit Slideshow
- UpTime Widget
- Upload File History
- User History
- Using CAT tools for Drupal
- Video
- Video Embed Field
- Views Add Button
- Views Bootstrap for Bootstrap4
- Views Bulk Operations (VBO)
- Views Reference Field
- Views Send
- Views Slideshow
- Views TimelineJS
- Vipps Recurring Payments: Installation
- VisualN
- Wallee
- Warden
- Web Page Archive
- Web Service Data 8.x and 9.x
- Webform
- Webform Attachment Gated Download
- WissKI
- Wordcount
- Workbench Menu Access
- Workflow
- Workspace
- XML-RPC
- Xero Sync
- YAML Content
- agGrid
- ePayco integration
- reCaptcha v3
- simplytest.me
- If Then Else
Comparison of Contributed Modules
Comparisons between contributed modules
- Comparison of Content Deployment modules
- Comparison of Group modules
- Comparison of image cropping and resizing modules
- Comparison of Instagram modules
- Comparison of Layout Modules
- Comparison of Mapping modules
- Comparison of Twitter modules
- Comparison of Views embedded field modules
- Popularity of modules
- Comparison of Date, Time, and Event Modules
Contributed themes
Drupal contributed themes
Contributed Field Formatters
A guide to contributed modules that provide field formatter for core field types.
Drupal distributions
Documentation for Drupal 8 distributions.
Configuration management
This guide explains how to import and export your site's configuration and manage it with version control.
Multisite Drupal
Multisite Drupal
Accessibility
Accessibility in Drupal
Security in Drupal
Securing your Drupal site.
Troubleshooting Drupal
How to make your Drupal installation work (again).
Theming Drupal
How to work with Drupal themes.
- Defining a theme with an .info.yml file
- Drupal theme folder structure
- Adding Regions to a Theme
- Adding stylesheets (CSS) and JavaScript (JS) to a Drupal theme
- Twig in Drupal
- Creating sub-themes
- Using Classy as a base theme
- Classy themes css selectors
- Including Default Image Styles With Your Theme
- Including Part Template
- Using attributes in templates
- Modifying attributes in a .theme file
- Working with breakpoints in Drupal
- Creating advanced theme settings
- Theming differences between Drupal 6, 7 & 8
- Upgrading 7.x themes to 8.x
- Drupal Twig conversion instructions (tpl.php to html.twig)
- Creating automation tools for custom themes (Gulpjs)
- Sub-Theme inheritance
- Z-indexes in Drupal 8
Mobile Drupal sites
Mobile guide for Drupal 8
Creating custom modules
This guide includes tutorials and other information that you need to create modules for Drupal.
- Getting Started - Background & Prerequisites
- Naming and placing your Drupal module
- Let Drupal know about your module with an .info.yml file
- Add a composer.json file
- Include default configuration in your Drupal module
- Defining and using your own configuration in Drupal
- Create a custom page
- Creating custom blocks
- Creating custom field types, widgets, and formatters
- Subscribe to and dispatch events
- Building a Views display style plugin for Drupal
- Adding stylesheets (CSS) and JavaScript (JS) to a Drupal module
- Step by step tutorial "Lorem Ipsum"
- Step by step tutorial: Hello World
- Understanding hooks
Drupal APIs
Drupal has many APIs that make it easy to alter and extend, and to help developers with common tasks. Learn how to use them in your code
- Authentication API
- Block API
- Cache API
- CKEditor API
- Configuration API
- Database API
- Entity API
- Entity Validation API
- Filter API
- Form API
- JavaScript API
- Layout API
- Logging API
- Menu API
- Middleware API
- Migrate API
- Plugin API
- Quick Edit API
- RESTful Web Services API
- Render API
- Responses
- Routing system
- Runtime Assertions
- Serialization API
- Services and dependency injection
- State API
- Text Editor API
- Tour API
- Translation API (Code text)
- Typed Data API
- Update API
Automated testing
The testing framework in Drupal (Testing module, previously SimpleTest).
Managing site performance and scalability
Managing site performance and scalability
Multilingual guide
Multilingual guide for Drupal 8.
Upgrading Drupal
Upgrading your site from Drupal 6 or 7 to Drupal 8 or a later version.
- How to prepare your Drupal 7 or 8 site for Drupal 9
- Upgrading from Drupal 6 or 7 to Drupal 8 (or later)
- Upgrading from Drupal 8 to Drupal 9 (or later)
- Preparing an upgrade
- Prepare to upgrade: Learn key Drupal 8 concepts
- Prepare to upgrade: Choosing the approach
- Upgrading multilingual Drupal 6 to Drupal 8
- Upgrading multilingual Drupal 7 to Drupal 8
- Drupal 8 migrate modules
- Upgrade using web browser
- Upgrade using Drush
- Known issues when upgrading from Drupal 6 or 7 to Drupal 8
- Customize migrations when upgrading to Drupal 8
- Contributing to Migrate
Upgrading and converting Drupal 7 modules
This guide provides information and specific steps for upgrading contributed and custom modules from Drupal 7 to the latest version.
- Intro & Before you start: Setting up a Drupal 8 module dev environment
- Step 1: Convert mymodule.info to mymodule.info.yml
- Step 2: Convert automated tests to Drupal 8
- Step 3: Convert hook_menu() and forms
- Step 4: Convert Drupal 7 Variables to Drupal 8 Configuration
- Step 5: How to upgrade D7 variables to D8's state system
- Debugging Drupal 8 module upgrades
- Resources and tutorials
- D7 to D8 Upgrade: Generated HTML
- D7 to D8 tutorial: pathinfo module
- D7 to D8 upgrade tutorial: Pants module
- D7 to D8 upgrade: fields, widgets and formatters
- D7 to D8 upgrade tutorial: Convert hook_menu() and hook_menu_alter() to Drupal 8 APIs
- WSCCI Conversion Guide
- WSCCI Conversion Guide - Pass 1
- WSCCI Conversion Guide - Pass 2
- WSCCI Conversion Guide - Pass 3
- WSCCI Conversion Guide - Best practices
Core modules and themes
Drupal 8 core structure and components.
External Libraries in Core
Details about list of external PHP and JS libraries core depends on.
Umami: Drupal demonstration installation profile
Sample Drupal site based on a fictional food magazine