A random-selection tool for classrooms and teams, with configurable workflows, managed history, and verifiable draw records.
Note
SecRandom is released under GNU GPLv3. You may modify and redistribute the source, but derivative redistributions must also use GNU GPLv3.
SecRandom is a fair random-selection application for classrooms, teams, events, decision-making, and other scenarios.
- Roll call: Supports standard random, history-balanced, and repeat-control draws.
- Quick draw: Quickly draws students through a standalone floating window.
- Lottery: Supports prize-wheel and inventory draws, with students and prizes managed independently.
- Rich presentation: Provides unified settings for animation, results, speech, music, and notifications, with fallback when a notification fails.
- Dynamically adjusts weights using history count, draw interval, group, gender, and other factors to reduce repeats and distribution imbalance.
- Uses stable internal identifiers to preserve history; student numbers, IDs, and names are display information only.
- Supports multiple student lists, prize pools, and
.xlsx,.xls,.csvimport, mapping, and preview. - Saves history for every draw round for convenient review.
- Every draw automatically saves a proof record file.
- You can choose to involve the server in and witness the draw process.
- Draw results can be checked again through official channels.
- Settings, lists, and history can all be imported, exported, backed up, and restored.
- Backups may include lists, history, draw proofs, images, and audio, but never passwords or other security information.
- Password, TOTP, or USB-drive protection can secure important operations, and you can choose which operations require verification.
| Mode | What it can do | What it cannot prove |
|---|---|---|
| Offline proof | Review a completed draw process; later edits, deletions, and a wiped-and-rebuilt chain are all detectable | It cannot prove that the local program, random seed, or roster was unchanged before the draw, nor rule out repeated trials and selection before it |
| Online witnessing | Protect the draw flow after the server locks it | It cannot prove that the roster is authentic, complete, or unfiltered before submission |
Notes:
- Every draw saves a locally replayable proof immediately and submits that same proof for server replay signing; its digest also goes to a third-party time-stamp authority (the digest only — never the roster or the draw content)
- Local proofs form an append-only hash chain, so deleting or rewriting one leaves a gap; the service remembers the chain head it has seen for each device, so wiping local proofs and rebuilding the chain is reported as a backwards chain position
- A proof commits a digest of the "record id to name/number/group" mapping of the roster it used, so editing the list after the draw to point a winning record at someone else is detectable
- Filtering the roster before the draw (deleting or disabling a student first) cannot be proven: the digest only covers the roster as it stood at draw time. Covering that would need a "confirm the roster with a third party before drawing" flow, which is not implemented
| Version | Stack | Stage |
|---|---|---|
| v1 | Python + PyQt5 + qfluentwidgets | First desktop implementation |
| v2 | Python + PySide6 + qfluentwidgets | Qt stack evolution |
| v3 | C# + Avalonia + FluentAvalonia | .NET desktop rewrite for continued draw, verification, and desktop-integration development |
- GitHub Releases provides release packages and change notes.
- The official download page provides the latest download entry point.
- Automatic updates validate a signed release manifest and artifact length/hash before deployment. Refer to the package and notes supplied with each release for installation details.
- SecRandom is released under GNU GPLv3.
- See THIRD-PARTY-NOTICES.md for third-party components, copyright information, and distribution-review notes.
- History-balanced weights and candidate filters help reduce repeat selections and improve long-term distribution. They do not replace management of real-world rosters, rules, or processes, and SecRandom does not claim to verify those conditions.
Thank you to everyone who contributes code, reports issues, improves documentation, or provides feedback. The avatars are generated from GitHub contributor data; select them to open the GitHub contributors page for complete statistics.
- Support us on Afdian
- QQ Group 833875216
- QQ Channel
- Bilibili
- Report an issue
- SecRandom documentation
- English contributing guide
Copyright © 2025-2026 SECTL