The primary advantage STV is that it empowers voting minorities of sufficient size to achieve representation. The required size depends on the number of seats to be filled and the threshold chosen.
One disadvantage of STV is that, unlike IRV, it's relatively difficult (though possible, depending on the specific method chosen) to count by hand; hence this program.
NOTE: This program is no longer under development. If you're looking for open-source STV counting software, consider using droop or OpenSTV.
STV.pm is a relatively simple Perl module for counting votes in elections using one of several STV method. This counting program can be employed in a more complete voting system as well, where votes could be captured directly from a graphical interface rather than being entered by hand.
stv-counter.pl is a simple command-line interface to STV.pm.
stv.app is an AppleScript for Mac OS X. Drop a ballot file on stv.app to count it automatically and display the result in TextEdit; stv.app expects to be in the same folder as the two Perl files.
When used with a Droop threshold, STV.pm implements a British Columbia-style STV count, except that ties are always broken by lot, and a fractional threshold (quota) is used. A description of the counting method (but with an integer threshold) can be found here (FairVote), and in Electoral System Design: The New International IDEA Handbook, published by the International Institute for Democracy and Electoral Assistance (p71 in the 2005 edition, available as a free PDF).
STV.pm also supports the Meek and Warren methods of STV counting.
A description of STV.pm's input file format is avaiable here. See the comment header of STV.pm for a version history.
|STV.pm v2.15||main counting module||32a66b0ef0f2bbb2f084960bcc69d4d0|
|stv.app||drag & drop Mac interface||dd680eb9c6789d57bce4dba6a40117b0|
(The MD5 checksums can be used to verify that the files have not been tampered with.)
CAUTION: this software has been tested, but not formally verified. Please consider using one of the counters listed above instead. Use of the program is subject to the license contained in the program file.
The program is written to be (relatively) easy to read, and is well-commented for the benefit of non-Perl-readers.
Those new to STV might be interested in reading the program as a precise algorithmic definition of the counting process. Familiarity with Perl is helpful, but the program should be readable by most programmers.
For more information on STV and other election-related issues, Wikipedia is a good starting point. For more technical information, with a focus on STV, visit Voting matters.
Two of my own papers, Random tie-breaking in STV and Notes on the Droop quota (with David Hill) are online at Voting matters.
Update (2006): I have joined the OpenSTV project (formerly pSTV) to assist in its development. OpenSTV is an open-source cross-platform program that can count many kinds of STV elections, as well as several others, including at least one Condorcet method.
Update (2010): I'm developing a new STV counter called droop. droop is designed to make it easy to completely express and verify an STV counting rule.
To count an election, prepare an election file and upload it.