Drupal is a registered trademark of Dries Buytaert
ai 1.3.1 Minor update available for module ai (1.3.1). seven 2.0.0-beta6 New beta version released for theme seven (2.0.0-beta6). seven 1.0.1-beta1 First beta version released for theme seven (1.0.1-beta1). byte_theme 1.0.2 Minor update available for theme byte_theme (1.0.2). mercury 1.0.3 Minor update available for theme mercury (1.0.3). ai_provider_anthropic 1.2.2 Minor update available for module ai_provider_anthropic (1.2.2). acquia_dam 1.1.13 Minor update available for module acquia_dam (1.1.13). media_duplicates 2.0.4 Minor update available for module media_duplicates (2.0.4). eca 3.1.0-beta2 New beta version released for module eca (3.1.0-beta2). swiper_formatter 2.1.1 Minor update available for module swiper_formatter (2.1.1). solo 1.0.31 Minor update available for theme solo (1.0.31). raven 7.3.7 Minor update available for module raven (7.3.7). digital_asset_inventory 1.1.3 Minor update available for module digital_asset_inventory (1.1.3). reporting 2.1.1 Minor update available for module reporting (2.1.1). bulk_csv_delete 1.1.0 Minor update available for module bulk_csv_delete (1.1.0). haven_theme 1.0.0 Initial release available for theme haven_theme (1.0.0)! commercetools 2.2.0 Minor update available for module commercetools (2.2.0). erfo 1.0.1 Minor update available for module erfo (1.0.1). gcds 1.0.1 Minor update available for theme gcds (1.0.1). erfo 1.0.2 Minor update available for module erfo (1.0.2).

Membership Manager provides a flexible system for managing user memberships
and subscriptions in Drupal. The module focuses on membership lifecycle,
access control, and feature entitlements, while deliberately staying
payment-agnostic. It works equally well for free and paid memberships,
SaaS platforms, and content-driven websites. Payments, billing, and
invoicing are left to external systems such as Drupal Commerce, Stripe,
or custom integrations.

Features

  • Membership plans (free, paid, trial) as config entities
  • User memberships as content entities with full lifecycle: active, pending, trial, expired, canceled
  • Time-based expiration with configurable grace periods
  • Cron-based expiry processing via Drupal Queue API
  • Route-level access control via _membership_active requirement
  • Feature/entitlement checks per plan
  • Drupal role synchronisation on activation and expiry
  • Symfony lifecycle events: activated, expired, canceled, renewed
  • Payment-agnostic — no hard dependency on Commerce or any billing system
  • Drupal 10 and 11 compatible

Architecture

  • Business logic in MembershipManagerService
  • Thin controllers — lifecycle operations via POST routes with CSRF protection
  • Access via MembershipAccessChecker and MembershipAccessControlHandler
  • Custom storage class with domain-specific query helpers

Access control

Protect any route by adding _membership_active: 'TRUE' to its
requirements. Scope by feature key with
_membership_active: 'feature:api_access'.
Access decisions are cacheable and respect Drupal cache contexts.

Integration

Designed to integrate with Drupal Commerce, Stripe, PayPal, ECA, Rules,
and custom SaaS backends. Call MembershipManagerService::assign()
after any successful payment event.

Use cases

  • Paid or free content access
  • SaaS account plans
  • Membership portals
  • Feature-based subscriptions

Requirements

  • Drupal 10.2+ or Drupal 11
  • PHP 8.2+
  • User module (core)

Installation

  1. composer require drupal/membership_manager
  2. drush en membership_manager
  3. Visit /admin/membership to create your first plan.

Roadmap

  • Views integration for membership lists
  • Drupal Commerce submodule
  • Drush commands for bulk operations
  • REST / JSON:API support

Maintainers

Dmytro Porokhnya (darkdim)

Activity

Total releases
2
First release
Mar 2026
Latest release
20 hours ago
Release cadence
0 days
Stability
50% stable

Releases

Version Type Release date
1.0.0 Stable Mar 19, 2026
1.0.x-dev Dev Mar 19, 2026