Open-source elections platform

Run real elections, on your own server.

Secret ballots, magic-link voting, real ranked-choice counting (IRV & STV), and weighted votes. No SaaS, no per-voter fees, no data leaving your network.

$ git clone && ./install.sh
View source
Requires Docker Compose v2
01 / Features

Everything you need to run a real election.

Built for organizations that take their votes seriously — from a five-person board to a thousand-member co-op.

Secret ballot — by design.

Ballots are recorded with no link back to the voter. Tokens are consumed when used. Even an admin with database access can't tell who voted for what.

Ranked choice that counts

Real instant-runoff (IRV) for single seats and single transferable vote (STV) for multi-seat slates — eliminated round by round, with a full elimination table. Partial rankings welcome.

Weighted voting

Give larger votes to larger stakeholders. Assign per-voter weights by shares, membership class, or unit — counted proportionally, with anonymity preserved.

Write-ins & nominations

Enable write-in candidates on any choice question, or start from the Nomination preset. Review and merge duplicate names, then publish — results stay accurate.

Magic-link voting

Each voter clicks a unique email link. No accounts, passwords, or "forgot my login" calls.

Quorum tracking

Set a percentage or fixed-count threshold and see a clear Met / Not Met status on every result and export. Reported, never enforced — the vote always runs on schedule.

Self-hosted

Your hardware. Your network. Your data. Nothing leaves the box you run it on.

Per-voter randomization

Candidate order can be shuffled deterministically per voter token. Kills primacy bias without breaking determinism or audits.

Automated reminders

Early reminder + a 24-hour final nudge. Each voter receives at most one of each.

Results, announced

Automatically or with one click after the election closes sends every voter a results email.

Open source

Read the code. Audit the ballot logic. Fork it. The whole stack is on GitHub.

Runs on a Pi

Raspberry Pi 4 or 5, mini PC, VPS, Proxmox LXC — anywhere Docker runs. 1 GB of RAM is enough.

02 / How it works

From git clone to first vote in under five minutes.

One command builds the stack. Cloudflare Tunnel or Tailscale gets it online. You add candidates and options and import a voter list — that’s the whole setup.

01

Install on your server

The install script generates secrets, writes your .env, and brings the stack up with one command.

$ ./scripts/install.sh
→ Postgres is ready
→ Schema applied
✓ Starting VoteHost Elections on https://vote.example.com
02

Set up your election

Add candidates, write questions, upload a CSV voter roster. Customize the email branding and reminder schedule.

Candidates · 6
Questions · 3
Voters · 92
Ready to send invites
03

Voters click & vote

Each voter gets a magic link. They click, vote, submit. When the election closes, everyone gets a results email automatically.

→ Invites sent · 92
→ Ballots cast · 67 (73%)
→ Reminders sent · 18
Results announced
03 / Question types

Ask the right kind of question.

Four question types cover board elections, multi-seat slates, ranked tabulation, and open feedback.

SINGLE

Single choice

One vote per voter. Classic board-seat or yes/no election.

Marcus Kim
Elena Vasquez
Sarah Okonkwo
MULTI · 2 SEATS

Multiple choice

"Pick up to 2." Enforce a seat limit on multi-seat slates.

Jordan Patel
Riley Chen
Sam Diallo
RANKED

Ranked choice

Order candidates by preference. Counted with IRV or STV — not just charted.

1Elena Vasquez⋮⋮
2Marcus Kim⋮⋮
3Sarah Okonkwo⋮⋮
COMMENT

Comment

An open text box for feedback. Captured verbatim, never tallied, and left out of voter results emails.

“Please add a bike-storage shed near the east lot — several of us would use it daily.”

Open response · not counted

Write-in candidates aren’t the same as a Comment.

Need voters to nominate names? Switch on write-in candidates for any Single or Multiple choice question — or start from the Nomination preset. Those entries are tallied; after voting closes you review and merge near-duplicates, then publish. A Comment, by contrast, is open feedback that’s never counted.

04 / Install

One command.

Clone, run the install script, paste your tunnel token. The wizard generates secrets, applies the schema, and creates your admin account.

~/votehost — bash
# Clone, install, and bring the stack up
$ git clone https://github.com/Cableboy1515/VoteHost.git
$ cd VoteHost
$ ./scripts/install.sh
 
Postgres is ready
Schema applied
Starting VoteHost Elections on https://vote.example.com
Requires Docker & Docker Compose v2
Runs on Pi 4/5 · mini PC · VPS · LXC
Setup time ~5 minutes
05 / Get online

Three ways to expose it to voters.

The app binds to localhost by default. Pick how it reaches the internet.

Recommended

Cloudflare Tunnel

Free tunnel, your own domain. The most common path to a clean vote.yourname.com URL with proper TLS.

Free tunnel ~$10/yr domain Custom URL

Tailscale Funnel

No domain required. Get a stable *.ts.net URL that's publicly reachable in two minutes.

Free No domain 2-minute setup

Your own proxy

nginx, Caddy, Traefik — point it at 127.0.0.1:3000. Bring your own TLS.

Self-managed Any reverse proxy
06 / Product preview

Two interfaces. One for you, one for voters.

Admins manage elections, candidates, voters, and email settings from a single dashboard. Voters click a magic link and cast their ballot — that's it.

vote.maple-ridge.coop/elections/board-2026/results
Participation
73% 67 / 92
Quorum
Met
50% required
Updates
Live · streaming
Director — At-Large Seat
Single Choice
LEADAmelia Chen 39 · 58%
Priya Raman 19 · 28%
Jordan Okafor 9 · 13%
Strategic Priorities — Ranked
IRV · 2 rounds
R1 R2
WONElena Vasquez 28 38
Marcus Kim 24 29
Sarah Okonkwo 15
Sarah eliminated in round 1 — her 15 ballots transfer to next preferences. Elena crosses 50% to win.
vote.maple-ridge.coop/ballot/?t=•••••
2026 Board of Directors Election

Vote for the directors who will guide Maple Ridge Cooperative through the coming term. Three seats are open.

1 Director — At-Large Seat *

Choose one candidate to fill the at-large director position for a three-year term.

AC
Amelia Chen
Details

Twelve years on the finance committee. Led the 2024 reserve study and refinance.

candidate.example.org →
JO
Jordan Okafor
Details
PR
Priya Raman
Details
1 of 4 questions answered Continue
07 / Who runs it

For any group that needs a real vote.

Take control of your elections.

Boards

HOAs & condo boards

Annual board elections, bylaw amendments, special assessments.

Member-owned

Co-ops & member associations

Director elections, slate votes, and bylaw revisions for housing co-ops, credit unions, and worker-owned firms.

Labor

Unions & locals

Officer elections, contract ratifications, and strike authorization votes. 

Civic

Clubs & nonprofits

Board seats, awards voting, member surveys, ranked program funding.

Campus

Student governments

Senate elections, referendums, organization charters. Run it on the dorm-room mini PC you already have.

Sports & hobby

Leagues & clubs

Officer elections, award votes, MVP polls. Spend the dues on something other than a SaaS subscription.

Stand up your election in five minutes.

Free. Open source. Yours forever.

View on GitHub