RosaVote 🌹
Independent & open source · Member-verifiable · Built for how DSA votes

Count every vote.Prove every count.

RosaVote is an open-source, code-authenticated ballot system that runs on your own cloud. Results are tamper-evident, any member can check them, and the counting rules DSA actually uses are built in.

What you get

Everything a real election needs. Nothing it doesn't.

A ballot box built for the way a democratic organization actually votes: proportional slates, diversity quotas, secret delegate ballots, and results the whole membership can audit.

Access

Code-authenticated voting

Single-use codes matched to your membership roll. No accounts, no passwords. Codes are validated before they're spent, so a failed retry never burns a voter's ballot.

Trust

Members verify their own ballot

Every voter gets a receipt and can confirm their ballot in the published hash chain, right in the browser. Trust the math, not the operator.

Sovereignty

Runs on your infrastructure

Ballots live in your own Google Cloud and flow to your data warehouse. Nothing is ever uploaded to a third-party election vendor.

Methods

Every method DSA uses

Scottish & Meek STV, Score, STAR, Bloc STAR and STAR-PR. Comparison counts (Condorcet, SPAV and more) let you sanity-check any result.

Rules

DSA rules, built in

Diversity-quota reservations, Article V timing and time zones, delegate alternates, and national + chapter-scoped admin. All out of the box.

Audit

Independently recountable

Publishes standard .blt ballot files and a tamper-evident hash chain. Anyone can re-run the count with the bundled verifier and get the identical result.

Fairness

Deterministic tie-breaks

Ties resolve by a documented, reproducible rule you can inspect. No hidden coin flip inside a black box.

Reach

Reaches every voter

Deliver codes by email or SMS via Mailgun, Twilio or Scale to Win, with self-serve opt-out and automatic bounce/spam cross-channel resend.

Access for all

Accessible by default

Screen-reader friendly, fully keyboard-navigable, high-contrast ballots, and light/dark themes. Tested across browsers.

The whole point

Elections you don't have to take on faith.

Open code, open ballots, open counts. From a chapter co-chair race to a national delegate election.

How an election runs here

Six steps from membership roll to a result anyone can check.

01

Import the roll

The membership list is loaded once. RosaVote de-duplicates it and issues a single-use code per member.

02

Send the codes

Codes go out by email or SMS through the configured provider, with opt-out handled automatically.

03

Members rank or score

Voters open a clean, accessible ballot. Rank a slate, score candidates, or answer a motion.

04

Close & count

At the deadline the ballots are tabulated by the binding method: Scottish/Meek STV, Score or STAR.

05

Publish the ballots

Anonymized ballots and a tamper-evident hash chain are published alongside the winners.

06

Anyone recounts

Members verify their receipt. Observers re-run the count in independent software and get the same result, every time.

Verifiability, not vibes

Your ballot, provably in the count.

  • A receipt only you hold. Each ballot is hashed with its answers and a secret nonce. That hash goes on your receipt and reveals nothing about how you voted.
  • A chain no one can forge. After close, every ballot links into a sorted hash chain. Change one vote and the published chain head no longer matches.
  • Checked in your browser. Paste your receipt into the in-page verifier, or run the bundled verify.py yourself. No trust in the operator required.
# your ballot receipt
receipt = 7F3A-2B9E-C4D1
record = sha256(receipt | answers | nonce)
a1c9…4f0b

# published chain (sorted by record hash)
chain[k-1] = 3e7d…9a2c
chain[k]   = sha256(prev | record)
= 6b8f…1d40

✓ chain verified · 4,281 ballots, head 6b8f…1d40
Built for the movement

Not a generic poll tool. A comrade that knows the bylaws.

Diversity minimums for a delegation. Article V secret ballots. Alternates that fill the right way when a seat opens. YDSA NCC quotas. Chapter admins who see only their own race, and national admins who see the whole map. RosaVote encodes the rules your organization already fights to uphold, so the software never stands in the way of the politics.

Diversity-quota reservations Article V timing & time zones Secret delegate ballots Delegate alternates YDSA NCC presets National + chapter scoped admin Full-body quota groups Apportionment math
The preferred alternative

RosaVote is the better default.

OpaVote is a good partner to DSA. It's affordable, dependable, and a solid choice for high-stakes or contested elections, where an independent third party adds trust. RosaVote is the preferred alternative for everything else: stronger, more flexible, fully customizable, and more affordable. Nothing forces a migration. Chapters choose what fits each race.

OpaVoteRosaVote
Cost at DSA scale ~$0.08 per voter, per election. Fine for one vote, but it multiplies across 200+ chapters. Runs on cloud infrastructure DSA already operates. A fraction of the cost, at any scale.
Customization One general-purpose ballot template. Multi-section ballots, chapter-unique questions, randomized slates, per-section visibility.
DSA-specific rules Quotas and bylaw timing handled by hand, around the tool. Diversity quotas, Article V timing, alternates and scoped admin built in.
Flexibility & control Proprietary and hosted. You work within its limits. Open source (AGPL-3.0). Anyone can host, audit, or extend it. No vendor lock-in.
Data ownership Ballots hosted by the vendor, removed about 12 weeks after the vote. Ballots stay on infrastructure the organization controls, retained on its own terms.
Voter verification Published results and a downloadable ballot file. Per-voter receipts, a public hash chain, and an in-browser verifier.
Counting methods Scottish STV, Borda, IRV, Condorcet. A solid, proven set. All of those plus Meek STV and Score/STAR/STAR-PR, open and reproducible.
Support & independence Commercial support and a neutral third party. A real plus for high-stakes races. Maintained by DSA members and open to contributions from the whole movement.

OpaVote is a good partner, and nothing pushes a chapter off it. Some will keep it for high-stakes races. RosaVote is the better default for most, and it's here whenever a chapter is ready. See the full side-by-side ↗

Estimate the numbers

What would an election cost?

For a single chapter election OpaVote costs about $10 or $20, and at that size this comparison barely matters. The gap shows up across 200+ chapters, or at national scale. Move the sliders and see for yourself. Every rate below is editable and sourced.

Your election
Estimated cost
OpaVote
$0
RosaVote
$0
Assumptions & sources (edit any rate)

Defaults: OpaVote is free up to 25 voters, then $10 per 125 voters (~$0.08/voter), a flat rate that holds at high volume (opavote.com/pricing). RosaVote figures reflect Google Cloud Run (scales to zero between elections) plus typical bulk email/SMS sending rates; your actual provider rates may differ.

The honest caveat: OpaVote's fee includes hosting and support, and for a one-off vote that convenience is worth something. That's why some chapters may still choose it for a high-stakes race. But at DSA's scale the savings are real and they compound. The trade is that DSA runs the cloud itself, and SMS or postcards cost extra in either tool.

Different tools, different jobs

RosaVote and OpenSlides aren't rivals.

Some of DSA's most important decisions happen live, in a room. That's OpenSlides. DSA uses it to run national convention and recommends it for live meeting votes. RosaVote handles the other half: asynchronous ballots members cast on their own time. The two barely overlap.

OpenSlides: the live assembly

Runs the room

The floor process itself: agenda, motions and amendments, speakers list, quorum, the projector, and live votes while delegates are present. Open source, and the system DSA uses to run its national convention.

  • Motions, amendments & the whole floor process
  • Live Yes / No / Abstain and per-candidate votes
  • Real-time results, in the room, in the moment
RosaVote: the async ballot

Runs the election

Votes that happen before anyone's in the room: members ranking candidates on their phones over days, with proportional counts and results the whole membership can verify.

  • Scottish & Meek STV, Score/STAR for ranked, proportional elections
  • Single-use codes to 100,000+ members over days or weeks
  • Member-verifiable, independently recountable results

Ranked-choice STV elections aren't what OpenSlides is built for today. That's RosaVote's lane. Running a live convention floor isn't. DSA uses each for what it does best, and keeps recommending OpenSlides for live meeting votes.

Where this is today

What RosaVote is, and isn't, right now.

Election software should be the last thing to oversell itself. Here is the honest state of the project.

What's working

The software is built and tested

The full election lifecycle is implemented: ballots, codes, Scottish and Meek STV, Score/STAR/STAR-PR, quotas, alternates, adjudication, publication and verification. It's covered by 284 automated checks and a 40-election regression suite built from published contest results.

Validated

It reproduces a certified count

DSA publishes the ballot file for its NPC elections so anyone can recount them. Run against the published 2025 NPC At-Large ballots, this tabulator returns the certified winner set, candidate for candidate. Those files are public record and contain rankings only, never voter identities.

Not yet

It hasn't decided anything

No binding election has been run on RosaVote. Every election on this instance is a demo or a replay of an already-certified count. There is also no self-service signup, and no independent security audit has been done.

Want to run a real election on it? That's done hands-on right now. Write to support@rosavote.org and it gets set up with you. The full plan, including everything still missing, is in the public roadmap ↗

Put it to work

Kick the tires.

Try the demo, read every line of the count, or talk to us about piloting a real election. Open from the roll to the recount.