Drupal is a registered trademark of Dries Buytaert
Release: Leaflet 10.4.11 Minor update available for module leaflet (10.4.11). Release: Session Inspector 1.0.8 Minor update available for module session_inspector (1.0.8). Release: Migrate QA 2.0.4 Minor update available for module migrate_qa (2.0.4). Release: CKEditor Description List 3.0.0 Major update available for module ckeditor_descriptionlist (3.0.0). Release: FlowDrop 2.4.0 Minor update available for module flowdrop (2.4.0). Release: JWT Token Refresh 1.0.4 Minor update available for module jwt_token_refresh (1.0.4). Release: ConReg 1.0.0-beta1 First beta version released for module conreg (1.0.0-beta1). Release: AI Image Studio 1.0.0-beta8 New beta version released for module ai_image_studio (1.0.0-beta8). Usage Milestone: Role Theme Switcher Module role_theme_switcher crossed 1,000 active installs. Module Revived: Decoupled Router 2.0.7 Module decoupled_router updated after 11 months of inactivity (2.0.7).

Custom Paragraphs is a module that simplifies the creation and management of dynamic, repeatable field groups within custom Drupal forms. It provides a user-friendly interface for adding and removing sets of similar information, supporting various field types and file uploads, and easing the complexity of backend form logic. This module is ideal for scenarios requiring users to input multiple instances of related data, such as contact details or document uploads.

Overview

Custom Paragraphs is a flexible, lightweight module for Drupal 10/11 that provides a
dynamic repeatable field group system for custom forms.

It allows developers to create reusable, repeatable form components with support for:

  • Dynamic add/remove items
  • Multiple field types (text, textarea, select, file, checkbox)
  • File uploads with preview
  • CKEditor 5 integration
  • Client-side validation
  • JSON-based data storage

Use Case

This module is ideal when building custom forms where users need to input
multiple sets of similar data dynamically.

Examples:

  • Adding multiple addresses
  • Managing team members
  • Uploading multiple documents
  • Creating repeatable content sections

How It Helps in Custom Forms

In standard Drupal form development, handling repeatable fields requires complex form API logic,
AJAX callbacks, and manual state management.

Custom Paragraphs simplifies this by:

  • Providing a ready-to-use JavaScript-powered repeatable UI
  • Reducing backend complexity
  • Handling validation and data collection automatically
  • Supporting file uploads with server-side integration

Developers only need to define field configurations, and the module handles the rest.

Difference Between Paragraph Entity and Custom Paragraphs

Feature Paragraph Entity Custom Paragraphs Module Purpose Content structuring for entities (nodes, blocks) Dynamic repeatable fields in forms Storage Stored as entities in database Stored as JSON in form fields UI Admin-based UI Frontend dynamic UI Use Case Content modeling Form data collection Performance Heavier (entity-based) Lightweight (JS-driven) Flexibility Structured and strict Highly flexible and dynamic

How to Use

1. Attach Library

$form['#attached']['library'][] = 'custom_paragraphs/custom_paragraphs';

2. Add Hidden Field to Store Data

$form['items_data'] = [
  '#type' => 'hidden',
  '#attributes' => ['id' => 'items-data'],
];

3. Add Wrapper Container

$form['items_wrapper'] = [
  '#type' => 'container',
  '#attributes' => [
    'class' => ['rfg-wrapper'],
    'data-rfg-instance' => 'example',
  ],
];

4. Initialize via JavaScript

Use the RepeatableFieldGroup class to define fields and behavior.

Features

  • Unlimited repeatable items
  • Field-level validation
  • File upload with AJAX
  • CKEditor 5 support
  • Prefill existing data
  • Customizable UI and styles

Requirements

  • Drupal 10 or Drupal 11
  • Core Editor module

Documentation

For more details:

Why Use This Module?

If you are building custom forms and need a clean, scalable way to handle repeatable inputs,
Custom Paragraphs provides a modern, developer-friendly solution
without the overhead of entity-based systems.

Activity

Tracked releases
2
Tracked since
Apr 2026
Latest release
4 months ago
Releases (12 mo)
2 ▲ from 0
Maintenance
Active

Releases

Version Type Release date
1.0.0 Stable Apr 10, 2026
1.0.0-alpha1 Pre-release Apr 10, 2026