liquid_voting
Liquid Voting brings liquid democracy (proxy voting) to Drupal,
built on top of VotingAPI.
Users can vote directly on any content—or delegate their voting power
to trusted representatives who vote on their behalf.
Delegations are transitive: a delegate can delegate to someone
else, forming a chain. The system resolves chains automatically, detects
cycles, and enforces a configurable maximum depth. Vote weights are
calculated in real time so that a delegate's single vote counts for
everyone they represent.
Key features
Three delegation scopes
- Global — “Let Alice handle all my votes.”
- Topic — “Let Bob handle my technical votes.”
(taxonomy-based, using the Vote Topics vocabulary) - Entity instance — “Let Carol vote on this one
decision.”
Resolution priority: entity instance > topic > global.
Custom field type
Add the liquid_voting_vote field to any entity
type (node, media, etc.) to make it votable. Each entity gets
per-instance settings:
- Enable/disable liquid voting
- Vote topic (optional taxonomy term)
- Voting window (optional open/close dates)
The field formatter renders a Yay/Nay vote form with delegation status,
vote weight, and chain visualization.
Immutable vote weights
When a delegate votes, the system walks the delegation chain backward to
find all represented delegators. The vote weight (1 + delegator count) is
set once at cast time and never changes. A snapshot records
exactly which users are represented by each vote, ensuring auditability.
Delegate discovery
- Public delegate directory with search, filtering by expertise, and
sorting by delegation count or activity - Users tag themselves with expertise from the Vote Topics vocabulary
- Smart suggestions: “Popular in [topic]” and
“Active delegates”
Notifications
- Email notifications for delegation received, revoked, delegate
re-delegated, vote opened, and vote closed - Per-user opt-out and daily digest mode
- Cron-based delivery for vote open/close events
Administration
- Admin dashboard with delegation statistics and moderation alerts
- Bulk revoke action
- Delegation audit log (Views-based, with CSV export via
Views Data Export) - Configurable limits: max delegations per user, max chain depth, and
incoming delegation alert thresholds
Data integrity
- Automatic cleanup when accounts are deleted, disabled, or lose
required permissions - Opt-out feature (stop accepting delegations; all incoming delegations
are removed immediately) - Cycle detection and prevention at both delegation creation and vote
resolution time
Views integration
Custom Views field plugins for scope labels, vote weight, chain depth,
and expertise badges. Custom filter plugins for scope type and event type.
Ships with six optional Views:
- User delegations
- Admin delegations (with bulk revoke)
- Delegation audit log
- Delegations to me
- Recent delegate votes
- Top delegates
Requirements
- Drupal 10 or higher
- VotingAPI
(8.x-3.x) - Views Data
Export
Installation
- Install the module as you would normally install a
contributed
Drupal module. - Go to Administration > Configuration > System >
Liquid Voting settings
(/admin/config/system/liquid-voting) to configure
module-wide options. - Add the Liquid voting field
(liquid_voting_vote) to any content type or entity type
that should be votable. - Assign permissions to roles under Administration >
People > Permissions.
Demo submodule
The optional Liquid Voting Demo submodule
(liquid_voting_demo) creates a “Decision”
content type with the voting field pre-configured. Enable it to evaluate
the module quickly:
drush en liquid_voting_demoThis submodule is for evaluation only. For production use, create your
own content types and attach the liquid_voting_vote field.
Uninstalling the submodule removes the Decision content type and all its
data.
Permissions
- Administer Liquid Voting — configure module
settings - Create delegations — delegate votes to other
users - View own delegations — see your outgoing
delegations - Edit own delegations — modify your
delegations - Delete own delegations — revoke your
delegations - View delegate directory — browse the delegate
discovery page - View liquid voting reports — access admin
dashboard and audit log - Manage any liquid voting delegations — view,
revoke, and export any delegation
User profile fields
The module adds these fields to user accounts:
- Accept vote delegations — opt in/out of
receiving delegations (vacation mode) - Areas of expertise — taxonomy reference to
Vote Topics - Receive delegation notifications — opt out of
email notifications - Daily digest — batch notifications into a
single daily email - Show delegation chain publicly — display your
vote path on your public profile
API and services
Key services for integration and customisation:
liquid_voting.delegation_manager— CRUD for
delegationsliquid_voting.delegation_resolver— resolve
delegation chainsliquid_voting.vote_weight_calculator— calculate
vote weight for a delegateliquid_voting.delegate_discovery— find and filter
potential delegatesliquid_voting.notification_service— send
delegation emailsliquid_voting.delegation_log— audit trailliquid_voting.delegation_analytics— site-wide
statisticsliquid_voting.vote_representation_manager— vote
representation snapshots