Policies
Versioned, diffable, framework-tagged. A curated block-editor palette keeps the markup clean. Visitors get a download button only when the author actually attaches a PDF.
OpenTrust is the open-source alternative to Vanta, Drata and SafeBase. Publish policies, certifications, subprocessors and data practices on your own WordPress site, with an AI assistant that answers visitor questions from your real corpus.
Add an Anthropic API key. Visitors ask in plain sentences; the trust center answers from what you've published. Every claim cites the exact policy, certification or data-practice row it came from. The links come from Anthropic's Citations API, not guesswork.
secretbox, salted from AUTH_KEY. Rotate the salt; every stored secret goes with it.
Five custom post types map to the five things every security review touches. Each one ships with a meta-box workflow, a public renderer, and the AI assistant baked in.
Versioned, diffable, framework-tagged. A curated block-editor palette keeps the markup clean. Visitors get a download button only when the author actually attaches a PDF.
Status-tracked badges (active, in progress, expired) with effective and expiry dates. Upload your own PNG, or fall back to the bundled placeholder.
Purpose, data processed, country, DPA status. Sortable, searchable, and pre-fillable from the bundled catalog of major vendors.
Categorised cards covering what you collect, how you store it, who you share it with, your legal basis, and your retention. The full GDPR Article 30 surface, public.
Type three letters of a vendor name; the rest auto-fills: country, purpose, default category. The bundled catalog covers major subprocessors, common data practices, and the certifications you're likely to list. Extend or replace it via two WordPress filters.
Mark a publish as a new version; OpenTrust bumps the number and archives the previous text as a WordPress revision. Visitors can browse every past version from the public page.
GPL-2.0-or-later. Modern PHP 8.1+ codebase with strict types, match expressions, and readonly properties where they earn their keep. No vendor SDKs. Every outbound call goes through wp_remote_post with an SSRF allowlist.
If we're going to ask buyers to trust your security narrative, the plugin under it has to walk the talk.
Your Anthropic API key and the Cloudflare Turnstile secret are encrypted with libsodium secretbox, salted from wp_salt('auth'). Rotate AUTH_KEY and every stored secret invalidates atomically.
The wp_opentrust_chat_log table stores only hashed identifiers, never raw IPs, emails, or session IDs. A 90-day purge cron keeps the table tight.
Reserve / commit / release pattern across daily and monthly caps. Hit the ceiling and the chat surfaces a graceful exhausted-state, not a surprise invoice.
Per-IP and per-session sliding-window limits, optional Cloudflare Turnstile gate with a 1-hour bypass transient. The chat is open; abuse is not.
Provider HTTP calls are whitelisted at the host level. The plugin can't be coerced into hitting your internal network, even if the model is asked to.
Pick any brand colour. The accent system clamps lightness in HSL space until it clears 4.5:1 contrast on white, or honours your override if you'd rather take the hit.
Everything security and procurement teams tend to ask before installing. If you have something that isn't here, open an issue on GitHub.
Pocket change for most sites. You only pay Anthropic directly for the tokens you consume, and the plugin leans on prompt caching so the policy corpus is billed at cache-read rates after the first hit.
Ballpark, on Claude Sonnet 4.5 at current pricing, for a trust center with a typical ~20K-token corpus:
Hard ceilings are 500K tokens/day and 10M tokens/month, enforced by a reserve/commit/release budget. Tune them up or down to your appetite. Once a cap is hit, visitors see a graceful "come back later" state, never a surprise bill. Switching to Claude Haiku roughly cuts the numbers above by ~3×.
120K-token safety valve auto-disables the chat rather than letting it run hot.wp_opentrust_chat_log table has no columns capable of holding raw IPs, emails, session IDs, user agents, or referers; only short hashed identifiers, the question text (capped at 1,000 chars), and aggregate token counts. A 90-day purge runs on wp_cron to keep the table lean. The privacy posture is enforced by the schema itself, not by good intentions.template_redirect, outputs a complete standalone HTML document with inlined CSS, and exits. Your theme's stylesheet, header, footer, and JavaScript never load. All styles are wrapped in @layer opentrust and prefixed with ot- for belt-and-braces isolation..pot template and a starter Dutch translation. WPML and Polylang compatible out of the box. All four content CPTs are registered public with a wpml-config.xml declaring translatable meta fields, so policies/certs/subprocessors/data-practices can be translated per-language./trust-center/policy/{slug}/version/{n}/), so auditors can cite "as of v4" without you digging through revisions. Your buyers see "last updated" on the current policy; your auditors get the receipts.8.1+, WordPress 6.0+. No Composer vendor tree, no build step, no Node dependency. Libsodium (bundled with PHP 7.2+) is used for secret encryption. That's the whole stack.Install the plugin, set your accent colour, publish a policy, drop in an AI key. The whole loop fits in a coffee break.