Elektronisch kandidaatstellingssysteem
  • Rust 85.4%
  • TypeScript 6.3%
  • HTML 5.7%
  • CSS 2.4%
  • Shell 0.1%
Find a file
2026-11-06 16:40:00 +01:00
.config Enforce newline at the end of every file 2025-12-09 16:24:22 +01:00
.github Bump the github-actions group with 3 updates (#1459) 2026-11-05 09:31:27 +01:00
auth-service Fix security issues found using GPT-6.1 Sol / Daybreak (#1422) 2026-10-29 14:28:47 +01:00
bin Speed up CI: 17 -> 6 minutes (#1428) 2026-10-29 12:30:51 +00:00
deploy [#820] CSB authentication (#1118) 2026-09-01 12:03:57 +02:00
development Fix sonar cube issues and recovery deadline todo (#1444) 2026-11-03 10:10:49 +01:00
docs Add feature flags to development crate for faster compiles (#1441) 2026-11-02 14:20:56 +01:00
frontend [#1329] Finalise finalise page (again) (#1451) 2026-11-06 13:23:57 +00:00
locales [#1329] Finalise finalise page (again) (#1451) 2026-11-06 13:23:57 +00:00
pkioverheid [#743] Add support for PKIOverheid cert on BRP endpoint (#1389) 2026-10-20 11:53:26 +00:00
playwright [#1329] Finalise finalise page (again) (#1451) 2026-11-06 13:23:57 +00:00
src One session per user: a new login ends the user's other sessions (#1452) 2026-11-06 16:40:00 +01:00
tools Show summary of paper correction added/deleted items (#1384) 2026-10-20 12:02:42 +02:00
validate Reduce memory size of the event type (#1367) 2026-10-19 12:07:40 +02:00
.env [#737] Improve code structure (#735) 2026-05-26 14:27:13 +00:00
.gitignore Fix cache issue in pdf diff (#1356) 2026-10-12 10:19:43 +02:00
askama.toml [#937] Textris markdown (#967) 2026-07-21 14:02:28 +02:00
biome.json [#1178] Update feature flags and esbuild/biome (#1179) 2026-09-10 09:56:08 +02:00
build.rs [#1099] Generate election definition (#1015) 2026-09-03 14:14:23 +00:00
Cargo.lock Bump the cargo group with 31 updates (#1460) 2026-11-05 09:31:10 +01:00
Cargo.toml Bump the cargo group with 31 updates (#1460) 2026-11-05 09:31:10 +01:00
clippy.toml [#867, #742] TVS authentication (#643) 2026-09-03 15:24:36 +02:00
compose.yml Speed up CI: 17 -> 6 minutes (#1428) 2026-10-29 12:30:51 +00:00
CONTRIBUTING.md Add contributor and security policy 2025-12-01 10:58:02 +01:00
deny.toml Add ignore for zip crate CVE in code we do not use (#1443) 2026-11-02 11:16:05 +00:00
djlint.toml feature/e-ks#140: implement release pipeline (#333) 2026-03-02 16:02:57 +01:00
dylint.toml [#1298] Use published dylint-module-cycles instead of vendored lint (#1299) 2026-09-30 16:57:59 +02:00
LICENSE EUPL v1.2 license 2025-12-01 10:16:52 +01:00
MasterElectionTree.xml [#1099] Generate election definition (#1015) 2026-09-03 14:14:23 +00:00
README.md Added intructions on faster development builds (#1349) 2026-10-09 15:16:10 +02:00
rustfmt.toml Enforce newline at the end of every file 2025-12-09 16:24:22 +01:00
SECURITY.md [#1289] update SECURITY.md (#1288) 2026-09-29 10:21:05 +02:00
sigrid.yaml [#1178] Update feature flags and esbuild/biome (#1179) 2026-09-10 09:56:08 +02:00
sonar-project.properties Fix sonar cube issues and recovery deadline todo (#1444) 2026-11-03 10:10:49 +01:00

Let op: dit project bevindt zich momenteel in een opstartfase. Documentatie en code zullen onvolledig en soms incorrect zijn.

e-KS

Om te kunnen deelnemen aan een verkiezing moet een politieke groepering aangeven met welke kandidaten ze mee wil doen. Hiervoor moeten ze verschillende documenten inleveren bij het centraal stembureau. Dit heet de kandidaatstellingsprocedure.

e-KS staat voor het elektronisch Kandidaatstellingssysteem: een webapplicatie waarmee de Kiesraad de huidige kandidaatstellingsprocedure op een eerlijke, transparante en controleerbare manier wil moderniseren. Het nieuwe systeem zal op termijn de huidige ondersteunende software (OSV2020-PP en OSV2020-KS) vervangen.

Requirements

De kandidaatstellingsprocedure is verankerd in de Kieswet.

Een overzicht van het huidige proces en e-KS is te lezen in deze presentatie.

Belangrijke stukken of formulieren voor de kandidaatstellingsprocedure zijn:

Technische architectuur

Een overzicht van de voorgestelde technische afwegingen staat in deze presentatie.

Een diepere duik in de technische architectuur is te vinden in deze documentatie.

Development setup

  1. Install prerequisites:
  1. Build and download development tools:
bin/init
  1. Start the development environment (postgres, esbuild, cargo watch, etc.):
bin/dev

Faster local builds

Each distinct cargo configuration (features, rustflags, linker) gets its own copy of the dependency tree in target/, so keep them identical: bin/dev builds with --features development, use the same flag in the terminal. Two per-machine settings cannot live in the repository:

  1. rust-analyzer: same features, own build directory, no linkedProjects for the member crates. In .vscode/settings.json (gitignored):

    {
        "rust-analyzer.cargo.features": ["development"],
        "rust-analyzer.cargo.targetDir": true
    }
    
  2. Linker: link with wild via clang (cargo install wild-linker). In .cargo/config.toml (gitignored):

    [target.x86_64-unknown-linux-gnu]
    linker = "clang"
    rustflags = ["-C", "link-arg=--ld-path=wild"]
    

Development tools

  • bin/esbuild: transpile and bundle Typescript and CSS, also services frontend assets in development
  • bin/biome: format and lint Typescript
  • bin/setup: download tools, setup database, load fixtures, etc.
  • bin/dev: start development environment (postgres, esbuild, cargo watch, etc.)
  • bin/test: run integration tests (playwright) in a docker conmtainer
  • bin/init: build and download development tools
  • bin/check: run linter, formatters and Rust tests
  • bin/build: build backend and frontend for production
  • bin/update_locales: update locale files based on used keys in the codebase

Playwright tests

Playwright lives in playwright. See playwright/README.md for setup and run instructions.