Free for Craft CMS 5
Nobody should write a privacy policy
They should answer questions about their business and have the policy follow. Toss ships a clause library covering US privacy law, generates eleven kinds of legal document from one set of answers, and tells you when what you published stopped being true.
Two lines in your template
Policies render through Craft's own routing, so there is nothing to wire up. The kits can be placed automatically or by hand, and every one of them is reachable from Twig.
{# Link to them, render them, date them #}
{{ craft.toss.url('privacy-policy') }}
{{ craft.toss.render('privacy-policy') }}
{{ craft.toss.effectiveDate('terms-of-service')|date('j F Y') }}
{# The kits, placed by hand if you would rather #}
{{ craft.toss.footerLinks() }}
{{ craft.toss.agreement('terms-of-service') }}
{# Gate your own tags on consent #}
{% if craft.toss.allows('analytics') %}…{% endif %}
{# Hold every iframe in existing content until consent arrives #}
{{ entry.body|tossGate('marketing') }}
Features
The documents are the easy half. What a site actually needs is the other half — links people can find, a notice when something changes, and a record of who agreed to what.
Eleven documents, one questionnaire
Privacy policy, terms of service, cookie policy, disclaimer, return and refund, shipping, acceptable use, DMCA, EULA, affiliate disclosure and custom pages.
- About seventy questions, in plain English
- Questions that stop applying are blanked, not just hidden
The law is derived, not asked about
Nobody knows off-hand whether the CPRA covers them. Toss works out which of CalOPPA, CCPA/CPRA, the state privacy wave, COPPA, GDPR, PIPEDA, CAN-SPAM, DMCA §512 and the FTC endorsement guides apply, and shows you the list.
Tells you what moved it
Because the compiler is a pure function of its inputs, Toss can compare what is published with what would be generated now — and name the clause the library reworded, or the answer you changed.
- A text diff shows that something changed
- This shows what changed it
Consent that actually gates
Non-essential tags never reach the browser as executable script. They are held as data and promoted only once their category has been granted — with decline weighted the same as accept.
- Fourteen vendor presets, already categorised
- |tossGate holds embeds already in your content
A record with a date on it
Every acceptance points at one exact published version, so two questions stay answerable years later: what did this customer agree to on the day they signed up, and who has not accepted the current terms.
- Signed checkbox — a record cannot be forged
- Hashed IP, never the address itself
Fails the build, not the audit
`toss/policies/check` exits non-zero when a published policy no longer matches what the answers and the shipped library say. The closest thing there is to a test for “is our privacy policy still true”.
Frequently Asked Questions
The questions worth answering before you install it.
Lite is, and it is not a trial — a privacy policy and terms of service, on your primary site, with the whole clause library, footer links and a cookie notice, for nothing. Pro is a one-off $79 with a $59/year renewal, and adds every other document type, all sites and languages, cookie consent with script gating, the acceptance record and its export, update notices, endorsement disclosures, clause overrides, version history and diffs, and the console commands.
No. Toss is software that turns answers about your business into text, from a library written by a developer, not a lawyer. Have a qualified lawyer read anything you publish and rely on. Toss's job is to make that review a short one instead of a blank page.
US and English first — CalOPPA, the CCPA as amended by the CPRA, the state privacy-law wave, COPPA, DMCA §512, CAN-SPAM and the FTC endorsement guides, with a GDPR/UK and PIPEDA layer for sites that reach further. A business actually established in the EU wants a purpose-built GDPR document.
The clause library ships inside the plugin and is stamped with a date, so composer update is how your texts get better. Toss then tells you which policies have fallen behind and why — naming the clause that changed, or the answer you edited, rather than handing you a wall of diff.
Yes, and that is the point. Non-essential tags are held as data and promoted only once their category has been granted. A banner that sets a cookie and lets Analytics fire anyway is worse than no banner: it puts a promise in writing, on every page, that the site does not keep. The caveat is honest — Toss can only gate the tags in its inventory, and the audit says so when it finds one that is not.
That is what the acceptance record is for. Every acceptance points at one exact published version, with a timestamp, the user where there is one, an opaque browser token, and optionally a hashed IP — never the address itself. Export it as CSV whenever somebody asks.
No. Policies render through Craft's normal routing, and Toss ships a plain fallback template so a published policy is never a 404. Override it by creating templates/toss/_render/policy.twig — Craft finds yours first.
Yes, on Pro. The global questionnaire is your business; a site holds only the answers that differ, so a translated site does not restate the address. Policies are localized elements, so each site has its own text, its own URL and its own version history.
Craft CMS 5.3+ and PHP 8.2+. No other dependencies, and Toss never makes an outbound HTTP request.
Start free, upgrade when you need to
Lite covers a privacy policy and terms of service on your primary site. Pro is $79 with a $59/year renewal, and adds the other nine document types, cookie consent with real script gating, the acceptance record, and drift detection that explains itself.