Skip to main content
Consensus supports three different voting systems, each designed for specific election scenarios. Choose the system that best matches your election requirements.

Supported Voting Systems

First Past The Post (FPTP)

The simplest voting system where voters select a single candidate. The candidate with the most votes wins.

Best for

  • Simple yes/no decisions
  • Elections with a clear frontrunner
  • Quick decision-making processes
  • Voters unfamiliar with ranked voting
How it works:
  • Each voter selects one candidate
  • Votes are tallied
  • The candidate with the highest vote count wins
  • No majority required (plurality wins)
FPTP can result in ties if multiple candidates receive the same highest vote count. The system will flag tied candidates for manual resolution.
Implementation details:
// From src/services/strategies/FPTPStrategy.ts:56-58
validateBallot(ballot: Ballot, _candidateCount: number): boolean {
    // FPTP requires single candidate selection
    return ballot.preferences && ballot.preferences.length === 1;
}

Single Transferable Vote (STV)

A ranked-choice system that ensures winners meet a quota threshold through preference redistribution.

Best for

  • Multi-winner elections (council seats, board positions)
  • Ensuring proportional representation
  • Reducing vote wastage
  • Complex organizational decisions
How it works:
  1. Voters rank candidates in order of preference
  2. A quota is calculated: (Total Votes / 2) + 1 (Droop quota)
  3. First preference votes are counted
  4. If no candidate meets the quota:
    • The candidate with the fewest votes is eliminated
    • Their votes are redistributed to voters’ next preferences
  5. Process continues until a winner meets the quota
Consensus implements a simplified single-winner STV. In production scenarios, STV is typically used for multi-winner elections with more complex redistribution rules.
Ballot validation:
// From src/services/strategies/STVStrategy.ts:90-99
validateBallot(ballot: Ballot, _candidateCount: number): boolean {
    // STV requires ranked preferences
    if (!ballot.preferences || ballot.preferences.length === 0) {
        return false;
    }

    // Check for duplicates - each candidate can only be ranked once
    const uniquePreferences = new Set(ballot.preferences);
    return uniquePreferences.size === ballot.preferences.length;
}

Alternative Vote (AV)

Also known as Instant Runoff Voting, AV ensures the winner has majority support through elimination rounds.

Best for

  • Single-winner elections requiring majority support
  • Presidential or leadership positions
  • Reducing strategic voting
  • Elections with multiple strong candidates
How it works:
  1. Voters rank candidates in order of preference
  2. Majority threshold: (Total Votes / 2) + 1
  3. First preferences counted
  4. If no candidate has a majority:
    • Candidate with fewest votes is eliminated
    • Their ballots transfer to voters’ next active preference
    • Process repeats until a candidate reaches majority
  5. If only one candidate remains, they win by default
Key differences from STV:
  • Requires majority (50%+1) not just quota
  • Continues until absolute majority achieved
  • Better suited for single-winner scenarios
// From src/services/strategies/AVStrategy.ts:6-8
calculateResults(ballots: Ballot[], candidates: Candidate[]): VoteResult[] {
    const totalVotes = ballots.length;
    const majority = Math.floor(totalVotes / 2) + 1;
    // ... elimination rounds continue until majority found
}

Comparing Voting Systems

FPTP

Complexity: Simple
Winner needs: Plurality
Ballot: Single choice
Best for: Quick decisions

STV

Complexity: Moderate
Winner needs: Quota
Ballot: Ranked preferences
Best for: Proportional representation

AV

Complexity: Moderate
Winner needs: Majority
Ballot: Ranked preferences
Best for: Majority mandate

Selecting a Voting System

When creating an election, choose your voting system based on:
// From src/domain/enums/index.ts:1-6
export enum ElectionType {
    FPTP = "FPTP", // First Past The Post
    STV = "STV",   // Single Transferable Vote
    AV = "AV",     // Alternative Vote
    PREFERENTIAL = "PREFERENTIAL", // Alias for STV
}
1

Assess your requirements

Determine if you need plurality, quota, or majority support for your winner
2

Consider voter familiarity

If voters are unfamiliar with ranked voting, FPTP may be more appropriate
3

Evaluate time constraints

FPTP provides fastest results; ranked systems may require more processing
4

Set voting system

Configure the system when creating your election - it cannot be changed once the election is activated
The voting system cannot be changed after an election is activated. Choose carefully during the draft phase.

Next Steps

Election Management

Learn how to create and manage elections

Results Calculation

Understand how results are calculated for each system

Build docs developers (and LLMs) love