Toss for Craft CMS

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

LitePro
PriceFree$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 %}