Legal documents that live in your repo, stay in sync with your code, and prove compliance on demand. Built on the open-source OpenPolicy framework — cloud-backed consent tracking, versioning, and audit trail from day one.
Book a demoWrite once in TypeScript, get correctly-worded policies in every language and jurisdiction — with consent tracking built in.
Define your privacy policy, terms, and cookie policy in code. Version-controlled, diffable, and reviewable like any other source file.
GDPR, CCPA, UK GDPR, LGPD, and more. OpenPolicy generates the right language for each region automatically — no manual copy-paste.
Know which users have accepted which version of each policy. Surface compliance gaps before they become audit findings.
Every policy change creates a new version. Roll out updates progressively, prompt only affected users, and track acceptance in real time.
Policies are regenerated on every build by the Vite plugin. Your privacy policy can never drift out of date with your actual data practices — enforced by the build pipeline.
PostHog, Linear, GitHub, and more. Pipe compliance signals directly into the tools your team already uses.
Add an OpenPolicy config to your project. Describe your data practices, jurisdictions, and service details in TypeScript.
Push your config. We generate legally-worded documents as build-time artifacts and give you a typed client and consent API to embed in your app.
Every user acceptance is recorded. Dashboards show compliance rates by policy, version, and jurisdiction at a glance.
import config from "#/lib/openpolicy";
import { createClient } from "@openpolicy/plus";
const client = createClient(config);
// Record consent when a user accepts your policies
await client.consent({
user: { id: user.id, email: user.email, plan: user.plan },
});
// Check if policies changed since the user last consented
const changes = await client.changes(user.id);
if (changes.length > 0) {
// Prompt the user to review and re-accept
}
// Check the current user's jurisdiction
const jurisdiction = await client.jurisdiction(user.id);
if (jurisdiction === "gdpr") {
// Show cookie banner
}
Consent tracking
Every policy acceptance is timestamped and tied to a specific document version. Filter by policy, jurisdiction, or cohort — and export a full audit trail whenever compliance or legal asks for it.
Compliance overview — last 30 days
98.2%
GDPR consent rate
847
Users on latest version
12
Pending re-consent (v3.1)
3
Jurisdictions tracked
Active rollout
72% completePrivacy Policy v3.2
Grace period ends in 4 days
Update management
When your legal team updates your privacy policy, OpenPolicy+ creates a new version, surfaces a re-consent prompt to affected users, and tracks rollout progress in real time — so you're never left guessing who still needs to sign.
PR bot
The OpenPolicy+ GitHub bot reviews pull requests that touch your policy config. It summarises what changed in plain English, flags jurisdiction gaps, and posts a diff of the generated document — keeping your legal team in the loop without pulling them into every code review.
Advertising processors must be listed in your cookie policy with a consent gate — currently missing.
This data type requires a "Do Not Sell" opt-out link. Merge blocked until resolved.
import { defineConfig } from "@openpolicy/sdk";
import { dataCollected, thirdParties } from "@openpolicy/sdk";
export default defineConfig({
company: {
name: "OpenPolicy",
},
effectiveDate: "2026-01-01",
jurisdictions: ["eu", "us"],
dataCollected,
thirdParties,
});
Built for developers
Define everything in TypeScript — fully typed, diff-friendly, and reviewable in your normal code review flow. OpenPolicy+ takes care of the legal rendering, consent tracking, and compliance reporting so your team stays in their IDE, not a legal portal.
Book a 20-minute walkthrough and we'll show you how teams ship compliant products with OpenPolicy+.
Book a demo