Installation
Requirements
- Craft CMS 5.3 or later
- PHP 8.2 or later
No other dependencies. Toss never makes an outbound HTTP request.
Install
composer require justinholtweb/craft-toss
php craft plugin/install toss
Or find Toss in the Craft Plugin Store and install it from there.
Editions
| Lite | Pro | |
|---|---|---|
| Price | Free | $79, then $59/year |
| Privacy policy and terms of service | ✅ | ✅ |
| The whole clause library | ✅ | ✅ |
| Footer links kit | ✅ | ✅ |
| Cookie notice kit | ✅ | ✅ |
| Cookie, disclaimer, refund, shipping, acceptable use, DMCA, EULA, affiliate and custom pages | — | ✅ |
| All sites and languages | — | ✅ |
| Cookie consent with script gating | — | ✅ |
| Acceptance capture, audit trail and CSV export | — | ✅ |
| Update notices and endorsement disclosures | — | ✅ |
| Clause overrides and custom sections | — | ✅ |
| Version history, diffs and drift detection | — | ✅ |
| Console commands | — | ✅ |
Editions gate creating and editing. They never gate rendering: a licence that lapses does not blank a published privacy policy, and it does not switch cookie gating off.
Nothing is published until you say so
Installing Toss does not put anything on your site. It creates no policies, sets no cookies and injects no markup until you create a policy, publish it, and switch a kit on.
Answer the questionnaire first
Toss → Questionnaire. Every document is generated from these answers, so a policy created before you have answered them will be thin. The required questions are marked; the rest fill in detail and turn optional clauses on.
You do not have to finish it in one sitting. The progress figure at the top of the screen tells you where you are.
Your first policy
Toss → Policies lists the document types, with the ones your answers suggest you need marked as such. Create the privacy policy first.
Creating it compiles it immediately, but does not publish it. Read what it produced — you are the one signing it — then press Publish. That writes version 1 and puts the policy on its URL.
Where policies live
By default at legal/{slug}, so the privacy policy lands at /legal/privacy-policy. Change the
pattern in Settings → Plugins → Toss before you publish anything.
Changing it later does not move policies that already have a URL. A legal page people have linked to — and possibly agreed to — is not something to relocate as a side effect of editing a field.
Making them findable
A privacy policy nobody can find is, for every practical purpose, a site without one. Either switch the footer links kit on in Toss → Kits, or place them yourself:
{{ craft.toss.footerLinks() }}
Your own template
Toss ships a plain fallback template so a published policy is never a 404. To take it over, create
templates/toss/_render/policy.twig in your own templates folder — Craft finds yours first.
{% extends "_layouts/base" %}
{% block content %}
<h1>{{ policy.title }}</h1>
{{ craft.toss.render(policy.handle) }}
{% endblock %}