Documentation
The guides live alongside the code so that implementation details and setup instructions can be updated together.
v3 voting application
- Getting Started Guide — prepare a local development environment.
- Architecture and data model — elections, people, issues, votes, and ballot storage.
- Database schema — the SQLite tables and their relationships.
- Testing guide — run the application tests.
Voting methods
The current v3 application implements two voting types:
| Method | How it is used |
|---|---|
| Single Transferable Vote (STV) | Voters rank candidates. The Meek STV engine counts the ballots for the configured number of seats. |
| Yes / No / Abstain (YNA) | Voters choose yes, no, or abstain on an issue. |
See the voting implementations for the supported options and tally behavior.
Tally and what-if tools
The monitoring tools guide covers tally input formats and command-line tools. The v3 STV implementation and the what-if tool share the Meek STV engine in monitoring/stv_tool.py.
The STV tally and what-if examples show how to change the seat count, exclude a candidate, or select a runoff field. For new tallies, use the v3 vote-results.json export.
Contribute a change
Open a pull request against the trunk branch. For Python changes, follow the formatting, linting, and type-checking instructions in AGENTS.md.
Website sources are in site/. The site README explains how to build the website and preview a change.
For design discussions or questions about the code, join the community.