Open-source elections platform

Run real elections, on your own server.

Secret ballots, magic-link voting, ranked choice, and automatic reminders. No SaaS, no per-voter fees, no data leaving your network.

$ git clone && ./install.sh
View source
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.

Magic-link voting

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

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, preference voting, and open nominations.

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 and measures by preference.

1Elena Vasquez⋮⋮
2Marcus Kim⋮⋮
3Sarah Okonkwo⋮⋮
WRITE-IN

Write-in

Open nominations or free-text feedback. Anything goes.

Sofia Reyes
Type a name…
Type a name…
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
Closes in
2d 4h
Updates
Live · streaming
Director — At-Large Seat
Single Choice
LEADAmelia Chen 39 · 58%
Priya Raman 19 · 28%
Jordan Okafor 9 · 13%
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
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