There are 5 repositories within the ElectionGuard SDK:
- ElectionGuard Specification
- ElectionGuard Python
- ElectionGuard C++
- ElectionGuard Python API
- ElectionGuard React UI
If you're looking to develop for ElectionGuard, it might help if you pick something you're familiar with. The following list acts to showcase the language to assist you in finding the right place. Each repository contains information on the best way to contribute and how to setup the development environment. Take a look and see what appeals to you.
The ElectionGuard Specification repository addresses the mathematical and conceptual underpinnings of end-to-end verifiability in a manner that comfortably accommodates post-election audits. The specification houses the core data constructs, tests, and datasets that we recommend to ensure portability and data integrity.
The ElectionGuard site is also built from this repository using mkdocs. This can be a friendly place to start out for new developers trying to get started.
The ElectionGuard Python library is a reference implementation of the ElectionGuard SDK. It covers the entire suite of functionality and processes necessary to implement an end-to-end verifiable election as part a voting system:
- Key generation ceremony
- Ballot encryption
- Tally ceremony
- Ballot decryption
It is designed to be portable over performant, universal over Pythonic (although we do try to adhere to the Zen of Python).
Any real-world voting use case will need to incorporate the capabilities of the Python library to run an end-to-end verifiable election or post-election audit.
Source | Package | Documentation
Community-sourced Java port
Check out our community contributions for a Java port.
The ElectionGuard C++ library performs ballot encryption. It is designed for devices that handle the user experience of voting. These devices follow the economics and performance of embedded systems: special-purpose devices designed for low cost. We assume Intel Atom class processor-level performance and Raspberry Pi 3 types of operating systems. In addition to the C++ library itself, there is some focus on target different standalone packages. This leads to the usage of other languages like C and C#.
ElectionGuard Python API
This API uses the
electionguard-python package in a Python API utilizing FastAPI. This exposes the full featured Python ElectionGuard and allows users to create docker containers of the API.
This UI application features several TypeScript packages as a monorepo, a version-controlled code repository that holds many projects, to reduce repeated tooling. It contains two web applications. One is an application to administer an election. The other is an application to display the election results. There are two helper packages, one functions as an api client and the other is a component library.