A decentralized contact tracing system, inspired by DP-3T and Apple/Google's Exposure Notification, featuring:
server
: A server storing exposed identifierscng-client
: An embedded client based on the Contiki-NG oscng-adapter
: An adapter that mediates between the embedded client and the servermobile-client
: A mobile client for Android/iOS, using Flutter
Cooja Simulation of the Contiki-NG client nodes
Each client node periodically generates pseudorandom 16-bit identifiers (referred to as "rolling identifiers") and distributes the most recent identifier at a fixed interval. There are two protocols involved here:
- The Contact Tracing Protocol
- Each message consists of an unframed, 16-bit integer representing an identifier
- Every node receiving such a message is expected to store it for exactly 14 days
- Supported transports:
- Contiki's Nullnet
- through the
cng-client
- through the
- iBeacons
- using the last 2 bytes of the UUID for the payload
- through the
mobile-client
- Contiki's Nullnet
- The REST/JSON API
- Currently supports two (public) endpoints:
/api/v1/exposures
(GET
/DELETE
)/api/v1/exposures/:id
(GET
/PUT
/DELETE
)
- Currently supports two (public) endpoints:
Note that the different contact-tracing transports are not yet compatible.
This project is continuously deployed using GitHub Actions, GitHub Packages and a Kubernetes cluster hosted by Digitalocean.