Boomerang for Craft CMS

Installation

Two commands. The install seeds a working state machine and eight return reasons, so the plugin does something on the first screen you open rather than after an afternoon of configuration.

Requirements

  • Craft CMS 5.3+
  • Craft Commerce 5.0+
  • PHP 8.2+

No other dependencies, no build step and no external service. The store-credit gateway and the manual label provider both run entirely inside your own install.

Install

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

What the install seeds

Seven states:

StateKindOn arrival
Requestedrequestedemails the customer
Approvedapprovedemails the customer, offers a label
In transitawaitingoffers a label
Receivedreceivedemails the customer, restocks
Resolvedresolvedemails the customer, carries out the resolution
Rejectedrejectedemails the customer
Cancelledcancelled

And eight reasons — doesn't fit, not as described, changed my mind, arrived damaged, faulty, wrong item sent, arrived too late, something else — each carrying what it implies for restocking, fees and analytics.

All of it is yours to rename, reorder, delete or replace. See The state machine and Configuration.

Editions

Lite (free)Pro ($129)
Customer returns portal
RMA state machine and history
Reasons, eligibility, the window
Refunds through Commerce
Restocking fees
Notifications
Store-credit wallet + gateway
Exchange and replacement orders
Restock into inventory locations
Carrier return labels
Return analytics

Pro settings that survive a downgrade are ignored, not obeyed, and the control panel says which ones. Nothing is lost by upgrading later: a store that ran on Pro, lapsed, and upgraded again finds its credit lots and its label history exactly where it left them.

Permissions

Boomerang adds its own permissions, and separates two levels of trust:

  • Manage returns — see RMAs, move them along, edit items and notes.
  • Issue refunds and credit — pay a customer.

They are separate because moving an RMA along and taking money out of the store are different amounts of trust, and a returns desk usually wants the first for everybody and the second for two people.

Turning the portal off

The portal is enabled at /returns by default. Clear the Mounted at setting to unmount it — the action endpoints keep working, so you can route it yourself. See The customer portal.