Strapi Dynamic Form Builder logo

Strapi Dynamic Form Builder

By Brain Station 23

A Strapi 5 plugin for building and managing dynamic forms with internationalization support, draft and publish workflows, flexible form configuration, and Content API integration for seamless frontend applications.

Latest version

v1.0.0

released September 8, 2026

npm install strapi-plugin-dynamic-form-builder
Logo for Strapi Dynamic form builder plugin

Strapi Dynamic Form Builder

A Strapi 5 plugin for building and managing multilingual dynamic forms from the Content Manager. Forms, field components, and Content API routes ship with the package, so a blank Strapi app can install it and start without extra app-level components.

Strapi plugin Dynamic Form Builder Strapi supported version Github Strapi plugin Dynamic Form Builder

Strapi plugin Dynamic Form Builder

npm version License: MIT Strapi

Table of contents

Features

  • Dynamic Form collection type in Content Manager, with draft & publish
  • Internationalization (i18n) on form fields
  • Nested Form Field and Form Field Option components included in the plugin
  • Field types: text, textarea, checkbox, radio, select, phone, date
  • Validation options: required, min/max length, pattern rules
  • Content API routes for listing and fetching forms

This plugin does not collect usage data.

Requirements

  • Strapi ^5.16.0
  • Node.js >=18
  • npm >=10

@strapi/strapi is a peer dependency. The plugin is compatible with Strapi 5.

Installation

Add the package to your Strapi application:

# npm
npm install strapi-plugin-dynamic-form-builder

# yarn
yarn add strapi-plugin-dynamic-form-builder

# pnpm
pnpm add strapi-plugin-dynamic-form-builder

Strapi auto-loads packages whose name starts with strapi-plugin-. After install, rebuild the admin panel and start the app:

npm run build
npm run develop

Configuration

Enable the plugin in config/plugins.js or config/plugins.ts if you want an explicit entry. This is optional for auto-loaded strapi-plugin-* packages.

module.exports = () => ({
  'form-builder': {
    enabled: true,
  },
});
export default () => ({
  'form-builder': {
    enabled: true,
  },
});

The plugin id is form-builder (package.json → strapi.name).

No other configuration is required. There is no settings page and no environment variables.

Usage

Create a form

  1. Open Content Manager.
  2. Under Collection Types, open Dynamic Form.
  3. Create an entry and fill in the form details.
  4. Add one or more items under Fields.
  5. Save and publish.

Required form attributes:

AttributeTypeDescription
FormNamestringDisplay name of the form
SluguidUnique identifier
SenderEmailAddressemailFrom address used when sending mail
RecipientEmailAddressemailDestination address
SuccessMessagerichtextMessage shown after a successful submit
ErrorMessagerichtextMessage shown after a failed submit
SubmitButtonLabelstringLabel of the submit button

Optional attributes:

AttributeTypeDescription
FormExcerptrichtextIntro or helper text
EmailTemplatetextEmail body template
Fieldscomponent (repeatable)Form inputs (form-builder.form-field)

Form fields

Each field in Fields uses the plugin component form-builder.form-field:

AttributeRequiredDescription
NameyesField key sent with the submission
Typeyestext, textarea, checkbox, radio, select, phone, or date
RequiredyesWhether the input is required (default false)
LabelnoVisible label
PlaceholdernoPlaceholder text
OptionsnoRepeatable options for select, radio, or checkbox (form-builder.form-field-option)
RequiredMessagenoMessage when a required field is empty
MinLength / MaxLengthnoLength limits
MinLengthErrorMessage / MaxLengthErrorMessagenoLength validation messages
IsPatternValidationEnablednoEnable regex validation
ValidationRulesnoPattern string
ValidationErrorMessagenoPattern validation message

Option items (form-builder.form-field-option) have Name, Text, and Required.

Content API

Content API prefix:

/api/form-builder/forms

Typical requests (permissions must allow them):

GET /api/form-builder/forms
GET /api/form-builder/forms/:id
GET /api/form-builder/forms?locale=en

Populate fields and options when you need the full form definition:

GET /api/form-builder/forms?populate[Fields][populate]=Options

Permissions

In Settings → Users & Permissions plugin → Roles, grant the Public or Authenticated role access to form-builder form actions (find, findOne, and any other actions you need). Until those permissions are set, Content API calls return 403.

Admin users manage forms through Content Manager with their usual admin permissions.

Identifiers

KindUID
Plugin idform-builder
Content typeplugin::form-builder.form
Form field componentform-builder.form-field
Form field option componentform-builder.form-field-option
REST path/api/form-builder/forms

The plugin is self-contained. You do not need to create layout-component.form-field (or any other host-app component) for it to boot.

Development

Clone the repository and install dependencies:

git clone https://github.com/BrainStation-23/strapi-dynamic-form-builder.git
cd strapi-dynamic-form-builder
npm install

Build and verify the plugin:

npm run build
npm run verify

Watch while developing against a local Strapi app:

npm run watch:link

In the Strapi app:

npx yalc add strapi-plugin-dynamic-form-builder
npm install
npm run develop

Create a local tarball:

npm run pack

Then install it in a Strapi project:

npm install /path/to/strapi-plugin-dynamic-form-builder-0.1.2-beta.tgz
npm run develop

Reporting issues

This plugin is maintained by BrainStation-23.

Please report bugs, questions, and feature requests on GitHub:

https://github.com/BrainStation-23/strapi-dynamic-form-builder/issues

Include your Strapi version, Node.js version, and steps to reproduce.

License

This plugin is licensed under the MIT License.

Submit your content

Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.

Submit
Submit your content