Small Change documentation
Small Change is a small, Stripe-only shop and donations plugin for Craft CMS 5. We built it for charities and small organisations that need to take donations and sell a few things, but can't justify the cost of a fully featured Craft Commerce plugin. We kept it small on purpose: when a choice is between more capable and simpler, we pick simpler.
If you're new, read these in order:
- Installation and first donation: from
composer requireto a test donation. - Your front-end templates: installing the donation and shop pages into your own layout, what each one does, and every form they post.
- Showing one product or a donation form on a page: a field and a block that let an editor choose what to show, with no shop page needed.
- Settings: every setting and what it does.
- Donations and Recurring donations.
- Gift Aid: what the plugin does, and what it leaves alone on purpose.
- Selling products: products, delivery, discount codes and checkout fields.
- Webhooks: how Stripe tells your site about payments, and how to connect it.
- Emails: receipts and notices, changing their wording, and restyling them.
- Caching and Blitz: keeping baskets and forms working behind a static cache.
- Twig reference and Events, for developers.
- Privacy and data retention, Console commands and Troubleshooting.
- Local development with Stripe.
What it does and does not do
Small Change takes one-off and monthly or yearly donations, with Gift Aid as an option. It also has a basket for physical and non-physical products, flat-rate delivery, discount codes, refunds and disputes, receipts, a self-service link for recurring donors, and erasure of personal data.
It doesn't do tax or VAT, stock, product variants, more than one currency, any gateway but Stripe, carrier-calculated shipping, customer accounts of its own (a signed-in Craft user can list their own orders and nothing more), gift cards, Gift Aid record keeping or HMRC claims, or PDF invoices. If you need any of those, you want Craft Commerce.
How it works in one paragraph
Every payment goes through a Stripe Checkout Session that your server creates, so card details never touch your site. The server works out every amount itself and ignores anything the browser says about money. Stripe then tells your site what happened by webhook, and the webhook is the source of truth: an order is only marked paid when Stripe says so, however many times and in whatever order the news arrives.
A note on this project
AI tools helped with parts of the development process and with drafting this documentation. The code has been reviewed, tested, and implemented by developers, and the documentation has been checked against the plugins themselves.