Privacy by design and by default with Pryv.io

In this guide we address developers building data-collecting applications who want to understand how Pryv.io supports privacy by design and privacy by default. It describes Pryv.io’s architectural choices, the platform defaults that protect personal data out of the box, and what remains in the developer’s hands.

Table of contents

  1. Introduction
  2. Why a developer should care
  3. Glossary
  4. Privacy by design in Pryv.io
    1. The standard pattern and its limits
    2. Pryv.io’s architecture
    3. Data model: subject and context segregation
  5. Privacy by default in Pryv.io
    1. The opt-in pattern
    2. Twelve platform defaults
  6. What stays in the developer’s hands
  7. Privacy-enhancing technologies
  8. References

Introduction

The new FADP and GDPR require all organizations to be able to answer, on demand, a list of data-subject questions: send me a copy of all my data, tell me who has accessed my data, prove that you have my consent, let me modify who can access my data, delete my personal data.

These obligations land on developers and IT engineering, not just on legal teams. The platform you build on either makes these answers easy to produce — or it doesn’t.

Pryv.io was designed from the start so that the platform answers most of these questions for you, by construction. This guide walks through what that means in practice: the architecture that makes privacy structural rather than an afterthought, the data model that gives you granular consent for free, and the platform defaults that protect personal data the moment your app goes live.

Why a developer should care

In the past decades, organizations moved from treating personal data as a data asset to recognizing it as a data debt. Vast amounts of personal data were collected; regulations and user expectations caught up; established data-governance practices became outdated.

Developers building today inherit that debt unless the substrate they use clears it for them. Designing for privacy from the beginning — privacy by design — is much cheaper than retrofitting it later. And shipping privacy-protective defaults — privacy by default — raises the level of trust with your users, which translates into better sign-up rates, better retention, and more willingness to share data.

Glossary

Privacy by design in Pryv.io

Privacy by design means proactively considering privacy throughout the data lifecycle, starting from the very first design phase. Article 25(1) of the GDPR requires controllers to integrate data-protection principles at the time the means for processing are determined — not as a later add-on.

The standard pattern and its limits

Most platforms put access control next to the data, like this:

Processes ──direct access──► Personal Data
              │
              ▼
         Audit / Logs (after-the-fact, manual)

The consequences:

Pryv.io’s architecture

Pryv.io puts Access Control on its own layer, between every process and any personal data:

       Data Governance
              │
              ▼
Processes ─►Access Control ─►Personal Data
              │
              ▼
   Audit / Logs per-Data-Subject (invariant, automatic)

This isn’t a recommended deployment pattern. It’s what the platform ships.

Data model: subject and context segregation

The standard relational model — one schema organized for processing purposes (customer table, account table, service-record table) — has three privacy problems:

Pryv.io segregates data by data subject AND context instead:

The subject sees explicit grants when accepting an application:

App "Personal Log Book" requests:
 - Edit "Nutrition"
 - Edit "Diary"
 - Read "Advices"

[Accept]  [Refuse]

instead of a wall of legalese.

This segregation is the structural substrate for:

And your data stays usable by machines — events carry a structured type: class/format JSON Schema, so analytics and ML pipelines consume them like any tabular store.

For a deeper walkthrough of the data model, see the Data modelling guide.

Privacy by default in Pryv.io

Privacy by default means automatically protecting personal data without any action from the data subject. Article 25(2) of the GDPR puts it this way: by default, only personal data necessary for each specific purpose are processed.

The opt-in pattern

Most cookie banners ship the privacy anti-pattern:

“This site uses cookies to provide you with an optimal browsing experience. By continuing to visit this site, you agree to the use of these cookies.”

Privacy is opt-out: the user must navigate to preferences to deactivate processing they didn’t actively choose.

Privacy by default flips this:

“By default, non-necessary cookies are deactivated. You can help us improving our website by activating analytics cookies.”

[ACTIVATE] [CONTINUE]

Privacy is opt-in: the user must explicitly activate the processing categories they want to enable.

The reference auth flow shipped with Pryv.io — app-web-auth3 — implements this pattern by default. The auth screen surfaces the requested permissions explicitly, per stream and per level (read / write / contribute / manage); Accept and Refuse buttons are visually balanced; the granted permissions are stored on the access and remain revocable at any time via DELETE /accesses/:id.

The auth UI primitive doesn’t support the anti-pattern — you can’t accidentally ship a “by continuing you agree” flow even if you wanted to.

See the Consent implementation guide for the detailed walkthrough.

Twelve platform defaults

When an auditor asks “show me what’s privacy-protective by default”, point at this catalogue:

What stays in the developer’s hands

The defaults above are structural — Pryv.io enforces them. But Art.25(2) also has axes the platform can’t decide for you:

Privacy-enhancing technologies

Cryptography-based PETs that you can layer on top of Pryv.io’s substrate:

Pryv.io’s architecture doesn’t preclude any of these — they sit on top of the platform substrate. The choice of which PETs to add is yours.

References