Skip to content


There are 5 repositories within the ElectionGuard SDK:

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.

ElectionGuard Specification Markdown

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.

Specification | Source

ElectionGuard Python Python

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.

ElectionGuard C++ C++CC#

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 Python

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.


ElectionGuard UI TypeScript

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.