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.
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.
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, ranked tabulation, and open feedback.
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 by preference. Counted with IRV or STV — not just charted.
Comment
An open text box for feedback. Captured verbatim, never tallied, and left out of voter results emails.
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.
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.
“Please add a bike-storage shed near the east lot — several of us would use it daily.”
Open response · not counted