Discourse Policy

:discourse2: Summary Discourse Policy gives the ability to confirm your users have seen or done something, with optional reminders.
:hammer_and_wrench: Repository Link https://github.com/discourse/discourse-policy
:open_book: Install Guide How to install plugins in Discourse


Discourse policy shares much of its DNA with polls, it has the goal of ensuring members of a group accept certain policies by clicking a button.

It has some specific features that set it apart from polls:

  1. It must apply to a group (the group must not exceed 200 users)

  2. It can optionally nag members of a group either weekly or daily to click accept on a policy

  3. The UX makes it very easy to see who accepted and who did not accept a policy.



Before clicking accept

After clicking “grey” person on top right

After clicking accept

Creating a policy

Discourse policy registers a custom [policy] BBCode element. Which means you need to write this block of code in your post where you want to show this policy.

[policy group=founders reminder=daily]
I accept this policy will annoy me daily until I click accept

In this case the policy applies to the founders group and a reminder is sent daily to all users that did not accept the policy.

Site settings

policy_enabled : is the discourse policy plugin enabled on the site.

policy_max_group_size : only allow policies on groups smaller or equal to this size (default 200)

policy_restrict_to_staff_posts: policies may only appear on staff posts

BBCode attributes

The [policy] element can accept the following attributes.

  • group: the group name that policy will apply to required
  • version: the version number of the policy, bump number up to require all users re-accept the policy
  • reminder: remind users of the group to accept policy (weekly or daily), optional, default off
  • accept: text used for accept button, default is “Accept Policy”
  • revoke: text used for revoke button, default is “Revoke Policy”
  • renew: number of days or text describing period (monthly, quarterly or yearly) after which a user needs to re-accept policy
  • renew-start: the first date renewals will start at Eg: 17-10-2017, useful if you want to set the renewal cadence so it happens every half-year (Jan,June)

Usage examples

Basic policy:

[policy group="team" reminder="daily" accept="Accept" revoke="Ignore" version="1"]
I have read, understand and acknowledge this policy.

Bumping the revision number, to require that everyone reads the update:

[policy group="team" reminder="daily" accept="Accept" revoke="Ignore" version="2"]
I have read, understand and acknowledge this policy. (Last updated [date=2020-04-23 timezone="America/Los_Angeles"])

Periodic auditing task:

[policy group="audit_committee" reminder="weekly" renew="90" renew-start="01-07-2019" version="1" accept="Assignment Complete"] 
I have ensured that someone is assigned to this quarterly audit task.



  • Optional immediate reminder for new policies
  • Possibly allow certain groups to apply policies (expanding on staff)

Hi there, at the moment I’m seeing that TL0 can create policies as well. Is there a way to only limit the ability to create policies to staff or moderators?

I did think that’s what the ‘policy restrict to staff posts’ setting did in practice, but let me just double check.


Yes, with that toggled on (default) it only allows the Create Policy option to show up when creating a post/topic as an Admin or Moderator. :+1:

Though it would be good if this was updated to be a ‘group allowed’ setting like some of the other permission-based settings have been moved to.


Is it possible to disallow revoking agreement to certain policies?

I don’t believe this is currently possible.

I think the closest I could manage was to add some text to the Revoke button to make it less appealing for people to press:

This is somewhat surprising to me. Was it a deliberate decision, or no one asked to implement this? I have a private category, and I’m asking members to keep information from that category confidential. Writing a formal contract is not an option and is not necessary. But if someone can revoke any time, that somewhat diminishes the whole point of a policy. He can revoke agreement just before doing something the policy asks not to do.

I’m afraid my knowledge of this plugin is relatively shallow, but I think people could do something that contradicts the policy even if they had accepted or revoked it? It does keep a record that you can pull out using the data explorer of when people accept and revoke each one, if that helps at all?

1 Like