| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-10-02 | 10.6 kB | |
| v3.10.0 source code.tar.gz | 2026-10-02 | 53.6 MB | |
| v3.10.0 source code.zip | 2026-10-02 | 56.2 MB | |
| Totals: 3 Items | 109.8 MB | 0 | |
Loomio 3.10.0 adds weighted voting, corrects STV election counting, and makes the user manual and guides available in thirteen languages alongside English. It also improves voter and thread member management, email notification settings, and Markdown exports.
- New: Set default vote weights for group members and adjust weights for individual polls
- Fix: Correct STV surplus transfers, rounding, quotas, and ties that can change election winners
- New: Read the user manual and guides in thirteen translated languages
- New: Search and manage voters and thread members from their invitation windows
- New: Receive HTML group exports by email when background generation finishes
- Fix: Reply to votes after voting and hide poll conversations in the thread interface until results are visible
- Fix: Open email notification settings without signing in while keeping email tokens out of profile APIs
- Fix: Use existing sign-in links on SSO-only sites and prompt people with missing profile names to complete them
Weighted voting
Weighted voting lets groups count votes according to ownership shares or another agreed allocation. Group administrators can set members' default vote weights from Members → Edit vote weights. Poll coordinators can enable Use weighted voting in a poll's advanced settings, save it in a poll template, and adjust individual or all voter weights from Manage voters until the poll closes.
Weights can be zero or greater, with up to three decimal places. A weight of zero lets someone vote and count towards participation without adding to the result. Membership weights are copied when a person is added to a weighted poll; changing a member's default later does not change existing polls. Coordinators can restore current membership weights or give everyone the same weight. Turning weighted voting off resets the poll's weights to one; turning it back on copies current membership weights.
Proposal, Choose, Score, Allocate, and Rank polls support weighted voting. Anonymous polls, Time polls, and STV elections do not. Results show ordinary and weighted totals side by side, and charts can switch between measures. Quorum and participation continue to count people rather than vote weights. Anyone who can see the votes can see each voter's weight.
See Weighted voting for the workflow and a worked example.
STV election counting
Scottish STV now elects all candidates who reach quota in a round before transferring their surpluses, transfers larger surpluses first, and rounds transfer values down to five decimal places. Previously a surplus could transfer to another candidate already entitled to a seat and be lost, which could change the elected candidates. Meek STV now uses the exact quota without rounding.
Elimination ties are resolved using earlier rounds. If earlier rounds cannot resolve a tie and different resolutions would elect different candidates, Loomio reports the possible winners as tied. Voters must rank at least one candidate, blank ballots are excluded from the quota, and the server validates seat counts, counting methods, and quotas. Poll templates now retain STV settings.
The Scottish counter is checked round by round against official stage reports for eight Scottish council wards. The Meek counter is checked against a published reference election, with additional random-election comparisons against OpenTally. The beta warning has been removed. Closed elections retain their saved results; upgrading does not recount them.
See STV Elections for counting rules, ties, and ballot exports.
Votes and anonymous participation
The Votes page now has a searchable, paginated table showing votes and, where enabled, vote weights. Vote reasons remain in the thread rather than appearing in this table. Manage voters combines voter search and invitations, supports bulk weight changes, and confirms voter removal. Voter removal remains unavailable for anonymous polls.
After an anonymous poll closes, anyone who can see its results can open its voter list, including visitors to public polls. The list shows eligible voters; each person's participation status appears only after enough ballots have been submitted: the poll's quorum, or half the electorate when no quorum is set, with a minimum of three ballots. It does not show anonymous choices or voting times. Only group administrators see email addresses, and membership and invitation details are limited to group members and poll voters.
LOOMIO_VERIFY_PARTICIPANTS_ADMIN_ONLY has been removed. It no longer has any effect and can be removed from configuration.
Poll conversations and exports
In polls that hide results until voting, people can reply to votes as soon as they have voted. The thread interface hides the whole conversation under the poll from people who have not voted, including direct comments and nested replies. For polls that hide results until closing, the thread interface keeps these conversations hidden until closing, and vote-reason replies and mentions remain disabled until then. Anonymous votes continue to have no individual replies.
Print, Markdown, and other exports no longer require the person exporting to vote first. People with access to the thread can export results and replies from polls that hide results until voting. Results and conversations hidden until closing remain excluded from these thread exports until the poll closes. Search entries for conversations hidden until closing are removed during upgrade and restored through normal reindexing after closing.
The thread's Markdown menu replaces the previous Copy Markdown dialog. It offers copying or downloading, and the output follows the thread's reply tree with nested blockquotes, poll sections, and reactions. Existing and new threads now use three reply levels where they previously used two.
Group administrators can request an HTML group export and receive its download link by email after background generation. The link is available for one week.
Translated help and interface text
The user manual and guides are now available in Belarusian, Brazilian Portuguese, Dutch, Finnish, French, German, Hebrew, Hungarian, Italian, Japanese, Russian, Spanish, and Ukrainian. These translations are machine-produced and can be corrected through the translated Markdown on GitHub. Policy pages and the changelog remain in English.
Application help links open the manual in the active language. Translated screenshots are used when available, with English screenshots as the fallback. Application translations have also been revised against a shared terminology glossary, and French now uses the neutral vous register. Inline translation controls work with regional locale codes.
The default help URL is now the instance's /docs/en path. An explicit HELP_URL remains supported. Docker builds the static help site from its checkout; if documentation validation fails, the image build warns and continues without the help site. Maintainers generate and review translated screenshots locally, then explicitly publish selected images to R2 with bin/docs-screenshots --publish; GitHub no longer generates or publishes them.
Sign-in and notification settings
Existing usable sign-in links, including administrator-issued links, now work on SSO-only sites. Requesting new local sign-in links, password or emailed-code sign-in, passkeys, and native registration remain disabled there. A sign-in link is consumed before either session creation or account completion, preventing reuse. Signed-in people whose profiles have no name are prompted to complete it.
Notification email links open the relevant thread or group settings without requiring sign-in. Catch-up emails open a separate schedule form. Email action tokens no longer authenticate profile or application APIs; the full notification settings page requires a normal session. Invalid email action tokens show an error page, and token-bearing settings pages prevent caching and referrer disclosure.
Reaction notifications name the reacted item once and clear when an already-read comment is revisited. Thread member management now combines search, invitation, and notification in one paginated window. Other fixes prevent empty attachments when pasting files, save detected time zones independently of unrelated profile validation, recognize group members when opening discussion templates directly, and exclude discarded threads from cached lists and group panels.
Upgrade and compatibility
This release contains seven new database migrations. They add vote weights and constraints, store fractional poll totals, increase the default reply depth, preserve anonymous invitation dates before removing obsolete stance receipts, remove the redundant poll voting-system field, store STV template settings, and remove stale search documents for conversations hidden until closing. The vote-weight migrations include older timestamps and still run as pending migrations during a normal upgrade. Changes to historical anonymous-vote and topic-item migrations also improve upgrades from older installations.
Make and verify a database backup before upgrading. Receipt removal is irreversible; rolling back to an older application version requires restoring a compatible backup. Follow Upgrading Loomio for the normal migration and restart process, including the required stepping-stone versions for older installations. No additional manual backfill command is required.
API clients and integrations should account for these changes:
GET /api/v1/polls/:id/receiptsis replaced byGET /api/v1/polls/:id/votes. The response containsvotersand pagination/visibilitymeta, supportslimitandoffset, and does not include vote reasons.- Poll payloads use
anonymousinstead of the removedvoting_systemfield and includeweighted_voting. Poll CSV exports addvote_weightandunweighted_scorecolumns. - Email action tokens cannot be used to access profile APIs. Use an authenticated session for profile and full notification-setting requests.
- Demo groups are enabled when
CANONICAL_HOSTis configured. SetLOOMIO_DISABLE_DEMO_GROUPSto disable them;FEATURES_DEMO_GROUPSno longer controls availability.
Full changelog: https://github.com/loomio/loomio/compare/v3.9.0...v3.10.0