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.
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.
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.
Install on your server
The install script generates secrets, writes your .env, and brings the stack up with one command.
Set up your election
Add candidates, write questions, upload a CSV voter roster. Customize the email branding and reminder schedule.
Voters click & vote
Each voter gets a magic link. They click, vote, submit. When the election closes, everyone gets a results email automatically.
Ask the right kind of question.
Four question types cover board elections, multi-seat slates, preference voting, and open nominations.
Single choice
One vote per voter. Classic board-seat or yes/no election.
Multiple choice
"Pick up to 2." Enforce a seat limit on multi-seat slates.
Ranked choice
Order candidates and measures by preference.
Write-in
Open nominations or free-text feedback. Anything goes.
One command.
Clone, run the install script, paste your tunnel token. The wizard generates secrets, applies the schema, and creates your admin account.
Three ways to expose it to voters.
The app binds to localhost by default. Pick how it reaches the internet.
Cloudflare Tunnel
Free tunnel, your own domain. The most common path to a clean vote.yourname.com URL with proper TLS.
Tailscale Funnel
No domain required. Get a stable *.ts.net URL that's publicly reachable in two minutes.
Your own proxy
nginx, Caddy, Traefik — point it at 127.0.0.1:3000. Bring your own TLS.
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 for the directors who will guide Maple Ridge Cooperative through the coming term. Three seats are open.
Choose one candidate to fill the at-large director position for a three-year term.
For any group that needs a real vote.
Take control of your elections.
HOAs & condo boards
Annual board elections, bylaw amendments, special assessments.
Co-ops & member associations
Director elections, slate votes, and bylaw revisions for housing co-ops, credit unions, and worker-owned firms.
Unions & locals
Officer elections, contract ratifications, and strike authorization votes.
Clubs & nonprofits
Board seats, awards voting, member surveys, ranked program funding.
Student governments
Senate elections, referendums, organization charters. Run it on the dorm-room mini PC you already have.
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.