JoomElection ChangeLog v6.9.0
v6.9.0 (2026-09-03)
New Features
- Weighted voter breakdown: see how many votes each weighted voter actually cast to each candidate, rather than only the totals they add up to. Opens from the results screen, the elections list or the election itself, and has its own searchable, paged screen for larger electorates [Results]
- Where voters divide their votes between candidates, each voter's unused votes are shown next to their total [Results]
- The detailed export gains the voter's entitlement and their unused votes, and can be limited to weighted voters [Results]
Improved
- Total voting power in a group-weighted election is now worked out in one pass, instead of re-reading the user group table once for every voter [Performance]
Note
- The breakdown shows an administrator which candidate each named voter chose. Nothing new is recorded - the detailed export could always show this - but check it suits your organisation's rules before sharing it. Guest ballots stay unnamed [Privacy]
v6.8.0 (2026-08-23)
New Features
- How dates are written is now a setting. Options carries a Date and Time tab with presets for DD/MM/YYYY, MM/DD/YYYY, YYYY-MM-DD and the two long forms, so a site no longer has to edit files to change it [Display]
- Times can be shown as 24-hour or as 12-hour with AM/PM, chosen independently of the date [Display]
- Either one can instead be given a custom format, for anything the presets do not cover. A custom format left empty falls back to the site language rather than printing nothing [Display]
Fixed
- The elections list and the election's own page disagreed about how to write the same date, one showing 04/03/2026 where the other showed 2026-03-04. Every screen now follows the one setting [Display]
- The notice saying when voting opens ignored the date format it was handed and printed a long weekday date that matched nothing else on the page [Display]
- That same notice read "will begin on at" [Display]
- An election or voter with no date recorded no longer produces a PHP notice in the admin lists [Admin]
- The vote timestamp in the detailed results export was written in UTC while every other time in the same file was site time, so the two disagreed by the site's offset. It now carries the site timezone and names the zone [Results]
Improved
- Every date the component shows now passes through a single formatter rather than ten format strings scattered across the templates, so these screens cannot drift apart again [Display]
- The notice about when voting opens existed as two separate copies of the same code, only one of which anyone remembered to change. There is now one [Display]
- The timestamp column in the detailed export deliberately keeps a fixed sortable format instead of following the display setting, so an export reads the same whichever administrator produced it [Results]
Note
- On a site that has never set a date format, the elections list now writes dates the way the rest of the site already did - 2026-03-04 for English (UK), where the list alone used to show 04/03/2026. Pick DD/MM/YYYY under Options, Date and Time to keep the previous look [Display]
v6.7.0 (2026-08-21)
New Features
- Guest voting: visitors can vote without registering an account, with the strength of the one-vote-per-visitor control chosen per election [Voting]
- Three guest modes - one vote per device, one vote per email address, and one vote per verified email address, where a single-use link is sent to the address before the ballot is shown [Voting]
- Optional safeguards on top of the chosen mode, each configurable per election: a browser cookie check, a per-network-address vote limit, a device signature check, and the site captcha [Voting]
- Guest records are either fully anonymous - only a one-way hash is kept - or a name and email participation list, chosen per election. The ballot itself is secret either way [Privacy]
- Guest identity records are deleted automatically once an election closes. The ballots and the turnout figures are unaffected, so the votes simply become permanently anonymous [Privacy]
- Guest ballots are reported on the results screens as their own count, next to the existing turnout percentage [Results]
- An election may keep letting logged-in members vote as themselves with their own weight, or treat everyone as a guest [Voting]
- Guest ballots carry a per-election weight in weighted elections, since a guest has no voter record of their own [Voting]
Security
- Ballots are now checked for a valid session token. The vote forms had always included one but nothing verified it, so a vote could be triggered from another website [Security]
- Voting for a candidate is now a POST rather than a plain link. As a link, a vote could be cast simply by loading an image tag on any page the voter happened to visit [Security]
- The identifier a ballot carries is now signed. It was previously reversible with no secret, so a voter could construct one for any candidate, including in an election they had never been shown [Security]
- The vote confirmation screen now carries a session token; it previously had none at all [Security]
- Granting "Can Vote" to the Public group no longer writes a broken voter record that every later visitor collided with and that distorted the turnout figure [Voters]
- A registered voter can no longer vote a second time by logging out and voting as a guest. The member and guest paths record ballots under different identities, so neither could previously see the other's vote [Voting]
- An email address belonging to a registered account is refused on the guest form, with a prompt to log in instead [Voting]
- Verification links are single-use in full: redeeming one now also invalidates every other link issued for the same address, and the redeemed link is deleted rather than kept [Security]
- A verification link can no longer replace the identity of a session that already has one [Security]
- An anonymous election no longer stores the guest's name and email on the verification record, which would have linked a named person to their ballot [Privacy]
- A verification link is reissued when an address has been entered before but never voted, so a half-finished attempt cannot lock someone out [Voting]
- The guest identity cookie is marked Secure on HTTPS sites, and both guest cookies honour the site's configured cookie path and domain [Security]
Improved
- The voter status, election window and candidate checks that decide whether a vote is allowed existed as two verbatim copies that could drift apart. They are now one [Voting]
- The vote and voter tables are now explicitly InnoDB. Without it, on servers that default to MyISAM, the transaction protecting a ballot was silently doing nothing, so an interrupted vote could mark a voter as having voted while discarding their ballot [Voting]
- The votes table gained an index. It previously had none, so every tally and turnout figure read the whole table [Performance]
- The E2E harness now casts ballots over HTTP rather than by hand, and adds suites for tamper attempts and for guest voting - 110 automated assertions in total [Testing]
Upgrade Notes
- Guest voting is off for every existing election and has to be turned on deliberately, per election, under the new Guest Voting tab. With it off, an election behaves exactly as it did before.
- No guest mode can stop a determined person who is willing to keep creating mailboxes. One vote per device is beaten by a private browsing window and is a deterrent for an opinion poll, not a control. Where a result must survive being challenged, use a registered voter list. The admin screen states this per mode.
- The per-network-address limit is off by default because offices, schools, households and mobile networks share one address, so it can refuse genuine voters.
- Voting for a candidate is now a form rather than a link. A site with a customised copy of the candidate card template (layouts/candidate/card.php) must update it: the old vote link no longer works, by design.
- Database changes: nine new columns on the election table, two new tables for guest identities, two indexes on the votes table, and the vote-status and voter tables converted to InnoDB.
v6.6.0 (2026-08-18)
New Features
- Single Election menu item type: point a menu item straight at one election, giving it its own URL, page title and breadcrumb [Menus]
- Election Results menu item type, so an election's results can be linked from a menu [Menus]
- Display options for the election page: show or hide the title, opening and closing dates, election status, the visitor's voting status, description, View Results button, Order By dropdown and the Candidates/Lists tabs [Display]
- Display options for the cards themselves: candidate image and placeholder, image height, candidate number, list name and description with a configurable truncation length; motion number; candidate list description, avatars and numbers; and every element of an election card in the elections list [Display]
- Every display option is set globally under Options and can be overridden on an individual menu item, the same way Joomla's own articles work [Display]
- The candidate grid and the elections list grid are configurable per screen size, from phones through extra large desktops, at 1 to 6 cards per row [Display]
Improved
- The elections list menu item type is now called "Elections list" and carries a description. Previously it and the single election type were both listed as "JoomElection main page", so the two were impossible to tell apart when creating a menu item [Menus]
Fixed
- A link to one election, built on a page whose menu item pointed at a different election, resolved to the menu item's election instead of the linked one [Routing]
- Candidate list names and the candidate names inside them were not escaped on the Candidate lists tab [Security]
- The Default Candidate Order setting never reached the query, so the Order By dropdown showed an order the candidate list was not actually sorted by [Elections]
- Building an election link could raise a fatal error on a page with no active menu item [Routing]
Upgrade Notes
- No database changes. Every new display option defaults to the current appearance, so a site that is upgraded and left alone renders exactly as it did before.
- Default Candidate Order now genuinely sorts the candidate list. If your candidates' manual ordering differs from their candidate numbers, the default order on the election page may change; set Default Candidate Order to "Candidate number" under Options to keep the previous ordering.
- Existing menu items continue to work unchanged and are now shown as "Elections list".
v6.5.0 (2026-07-23)
New Features
- Motions election type: voters take a Yes, No or Abstain position on a numbered agenda, alongside the existing candidate and candidate list elections [Elections]
- Admin Motions section for writing, numbering and ordering the motions in an election, with a per-election toggle for whether Abstain is offered [Motions]
- Motion ballot: the voter answers every motion in a single form, and the whole ballot is validated server-side before anything is recorded [Voting]
- Motion outcomes - Carried, Not carried, or Not carried (tie) - on the frontend and admin results screens and in CSV exports [Results]
- Weighted voting applies to motions, with each motion counted independently [Voting]
Improved
- The E2E voting harness covers motion elections, with expected tallies and outcomes computed by hand rather than derived from the component's own counting [Testing]
Fixed
- Admin-entered names were not escaped on the results, ballot and candidate list screens [Security]
- A new voter could not be saved from the Select User modal [Voters]
Upgrade Notes
- Adds the 6.5.0 database migration: a third election type, a motion_allow_abstain column on elections, and a nullable choice column on votes.
- Existing votes keep a NULL choice, which marks them as candidate or candidate list ballots, so no existing election result is altered.
- Candidate and candidate list elections are otherwise untouched.
v6.4.1 (2026-07-22)
New Features
- Ballot Simulation: preview a voter's ballot under the current weighted settings before saving, showing the resolved weight, allowance and per-candidate cap alongside the ballot the voter would actually see [Voting]
Improved
- Ballot Simulation warns when a voter's allowance cannot be spent, for example 450 votes where three candidates capped at 2 each leave room for only 6 [Voting]
Fixed
- Multi-seat elections declared only one winner. A 2-seat election now marks both seats, and a tie on the final seat is reported as a tie instead of being awarded to whichever candidate happened to sort first [Results]
- Candidate list election results were ordered by candidate name instead of votes, which could place a candidate with no votes at the top of the table [Results]
- Admin footer showed "Version" with no number [UI]
Upgrade Notes
- No database changes, and no existing results are altered. Vote totals were always counted correctly; what changed is which candidates are marked as having won a seat.
- Single-seat elections are unaffected and still show one "Winner". Multi-seat elections now show "Elected" on every candidate who took a seat.
v6.4.0 (2026-07-16)
New Features
- Multi-seat elections: a Seats setting gives each voter seats × their weight votes [Elections]
- Max Votes per Candidate limits how many votes one candidate may take from one voter, set per election and overridable per voter and per user group [Voting]
- Ballots capped at one vote per candidate now show checkboxes instead of number boxes [Voting]
- Optional 6th CSV column for a voter's per-candidate cap [Voters]
Fixed
- Turnout by voting power could exceed 100% in a multi-seat election, counting one weight per voter against every ballot row cast [Results]
Upgrade Notes
- Elections are unaffected by default: Seats defaults to 1, which keeps a voter's allowance equal to their weight exactly as in 6.3.0.
- If you gave individual voters a weight of 5 to grant them "five votes", set their weight back to 1 and use Seats = 5 instead. Leaving the weight at 5 alongside Seats = 5 would give an allowance of 25.
v6.3.0 (2026-07-15)
New Features
- Weighted voting: per-voter and per-user-group vote weights, with per-election overrides [Elections]
- Block and split vote allocation modes for weighted elections [Voting]
- Demo Mode with one-click sample data installation [Demo]
- User and admin documentation in docs/ [Documentation]
Improved
- Result widgets polish and candidate images [Results]
- Selectable demo voters instead of hardcoded usernames [Demo Data]
Fixed
- Vote "too many redirects" loop in demo mode [Voting]
- SEF election links with unsafe characters not routing correctly [Routing]
- Candidate saved to wrong election (off-by-one) [Edit Candidate]
- Joomla\CMS\Filesystem\Folder class not found [Demo Data]
v6.2.0 (2026-03-27)
New Features
- Detailed CSV Export with Voter Records
- Configurable Results Display and control who can when and who can see
Improved
- use Joomla date language constant instead of hardcoded one
- auto show/hide candidate list field based on selected election type [Candidate form]
- Make candidate list field required if eelction type match it [Candidate Form]
- UI/UX of candidates and candidates list [Election view]
- Election result widgets UI/UX with Chart.js visualizations [Results]
Fixed
- saving candidate list sometimes fail [Candidate form]
- some missing languages constant for alerts in actions [Candidates Manage]
v6.0.1 (2025-11-26)
New Features
- Joomla 6 support without need of compatiblity plugin to be enabled
Improved
- Package feature [Installation]
v5.3.5 (2025-09-12)
Improved
- Vote invite email now support HTML
v5.3.4 (2025-04-26)
Improved
- Some UI/UX improvements on election view
- vote access info now use method for better reuse
Fixed
- Generate password was not working correctly for voters
- Joomla database checker issues all corrected
v5.3.0 (2024-03-15)
New Features
- order candidates in backend
- 2 new orderby types (order, reverse order)
- set default candidates order by in election
- display not yet started elections status
Improved
- start voting button added to election card
- election voter email should not be empty
Fixed
- html tags stripped when saving description [XML Forms]
- issue with timezone when election saved
- election voter email should not be empty
v5.1.1 (2024-02-16)
Improved
- UI/UX of candidates list specially columns order [Backend]
- new column added that display candidate list name
- UI/UX of elections list [Backend]
Fixed
- candidates list select doesn't update when choosing election [Candidate form]
- candidates list select should be required only if election type is list
v5.0 (2023-11-27)
New Features
- Joomla 5 support without need of BC plugin to be enabled
Improved
- DID and UpdateServer tags moved to xml package file
v4.4.4 (27/08/2023)
Improved
v4.4.0 (18/06/2023)
New Features
- support of contentPrepare on description field
Improved
- candidate card now use JLayout for better reuse
Fixed
- wrong id in electiosn and elections list fields
- html stripped in candidate description
v4.3.0 (10/06/2023)
New Features
- Ability to display candidate image
Improved
- candidates and candidate form was redone to follow Joomla Framework
- Editor field now use JForm on all forms
v4.2.4 (30/01/2023)
Improved
- Elections list table UI/UX
Fixed
- deleting items was not working [Lists] [Backend]
- pagination was not working [Candidates and Candidate Lists View]
v4.2.2 (20/01/2023)
Fixed
- pagination was not working [Backend]
- Elections list table UI/UX broken
v4.2.0 (01/09/2022)
New Features
- Allow/disallow Joomla user groups to vote
v4.1.0 (28/08/2022)
New Features
- Display election type [Backend] [Elections List]
- User can now vote on multiple elections
Improved
- Some old code removed for loading bootstrap
- Election result button UI/UX improved [Backend] [Elections List]
- Display "not voter" message if current user is not a voter.
- Insert voter simplified
- vote insertion code improved
- Some changes in xml enty points
Fixed
- Fatal error when deleting voter
- don't delete joomla user when deleting voter
v4.0 (23/05/2022)
New Features
- Joomla 4 support
- Bootstrap 5 support
- UI/UX improvements in frontend
- Download Key Joomla integration
Improved
- Download ID widget removed cuz no more needed
- All old assets removed
- PHP 8+ support
Fixed
- Some php issues
- wrong option variable in candidates and vote confirmation views
v1.1.0 (24/09/2020)
Fixed
- Installed version value doesn't display [Dashboard] [Download ID layout]
- Missed "Multiple Group" constant language [Voters view]
- Always hide existing user field on edit [Voter edit view]
v1.0 (01/07/2020)