Ballotage – secret black/white-ball ballots


Features

Kind of a niche… But: Many clubs, societies and lodges admit new members by a secret ballot with black and white balls. This plugin brings that procedure to Discourse:

  • A voting page at /ballotage where members of a configured group cast one final vote – black or white – during a set period (default 00:01 on the start day to 23:59 on the end day, custom times optional).
  • A management page at /ballotage/manage for an oversight group and admins: who has voted while the ballot runs, the black/white result once it has ended.
  • Ballots can be cancelled, then finalized (result and participant list are irreversibly deleted) and finally removed from the list.
  • One ballot at a time, optional notice text on the voting page, English and German included.

How votes stay secret

  • The database stores who voted (no choice, no timestamps) and two anonymous counters – nothing links a member to a choice. Counters are bumped without touching updated_at.
  • Counts are hidden until the ballot is over: showing live counts next to the participant list would let observers match a new name to the counter that just moved.
  • Finalizing deletes result and participant list for good.

Limit: someone with direct database access watching the counters during a ballot could still correlate votes. That is out of reach for a plugin and needs to be handled organisationally.

Configuration

Setting Description
ballotage_enabled Enable the plugin
ballotage_voting_group Group whose members may vote
ballotage_oversight_group Sees participation and results (admins always can)
ballotage_oversight_can_manage Let the oversight group create, cancel, finalize and delete ballots
ballotage_info_text Optional notice shown on the voting page
ballotage_timezone Time zone for start/end times (default Europe/Berlin)

Add a sidebar or menu link to /ballotage so members find the voting page.

Compatibility

Discourse 2026.7 and later. In production on a small forum since September 2026.

Feedback, bug reports and translations are welcome – here or on GitHub.

4 Likes

Nice effort and thanks a lot for sharing it for free.

The plugin is useful in the member acceptance cases you mentioned but can go beyond by helping communities to make global decisions while keeping people’s votes anonymous.

I won’t use it for now but if i do in the future I will report here.

2 Likes