Skip to content

slowli/elasticpoll.app

Repository files navigation

Elastic Poll

Build status Live website License: Apache-2.0

Serverless web app that allows organizing single-choice and multi-choice polls that combine privacy and universal verifiability with the help of some applied cryptography.

Core technologies:

See the Implementation page for details on how the app works, and the About page for more details on technologies used.

⚠ Warnings

Cryptography behind the app was not independently audited, in particular against side-channel (e.g., timing) attacks.

The app entirely lacks a server part; the poll state is stored within the browser. It is participants’ responsibility to exchange data via a reliable broadcast channel, sync it among themselves, and to back this data up if needed.

The application is early-stage and the backward compatibility is not yet a thing. Thus, polls created in one version of the app may become unreadable in the following versions.

Running locally

You will need to install a Node / npm toolchain (preferably via a manager like nvm) and a Rust toolchain (preferably via rustup). Both toolchains should be recent; i.e., Node 18-LTS and Rust 1.72+. You should also install wasm-pack.

To serve the app locally with the Webpack dev server, run

npm start

Testing

To run tests, use npm test. Be aware that this command requires specifying browsers used for testing as flags (e.g., -- --firefox).

Consult package.json for the full list of linting and testing commands. Note that Rust-related linting requires additional components (fmt and clippy) installed as a part of the relevant toolchain.

License

Licensed under Apache-2.0 license.