Memberz for Craft CMS

Installation

Memberz needs Craft CMS 5.3 or later and PHP 8.2 or later. It has no runtime dependencies and no build step.

composer require justinholtweb/craft-memberz
php craft plugin/install memberz

Installing creates one database table, memberz_profiles, which holds each member's own privacy choices and their profile slug. Forms and directories are stored in project config, so they deploy with the fields they describe and there is nothing to migrate between environments.

Before you build a registration form

Two of Craft's own settings decide whether registration can work at all, and Memberz reads them rather than replacing them. Both live under Settings → Users → User Settings.

Allow public registration. If this is off, every registration form refuses every submission and logs why. Memberz will not work around it — a plugin that could create accounts on a site whose owner had switched registration off would be a vulnerability rather than a feature.

Use email as username. If this is off, Craft requires a username, so a registration form needs a Username row. Memberz refuses to save a registration form that cannot supply one, so you find out while building the form rather than from a visitor who could not sign up.

Getting something on screen

  1. Memberz → Forms → New form. Give it a type of Registration, then add rows: Email, Password, and a Username unless Craft is set to use email as the username.
  2. Render it in a template:

    {{ craft.memberz.form('register') }}
    
  3. Add a Profile form the same way, and visit /account. Memberz routes that path for you.

That is a working account area. Everything after this is shaping it.

Uninstalling

php craft plugin/uninstall memberz

The table goes with it, taking members' privacy preferences and slugs. Accounts, their fields and their photos are untouched — they are Craft users and Craft's own data, and Memberz never kept a second copy of any of it.

Forms and directories are project config, so they are removed from config/project/ on the next write. Uninstalling on one environment and deploying that config removes them everywhere, which is the point of storing them there.