# Playground

> Try kern in your browser. Explore GDPR enforcement, pattern matching, HTTP services, AI pipelines and Secure\<T> in a simulated playground.

Source: https://kern-lang.eu/playground

Ctrl+Enter

#### GDPR Enforcement

user\_service.kern

```kern
from std.compliance import check_consent

struct User:
    name:    PersonalData<str>
    email:   PersonalData<str>
    age:     int

# This function lets personal data reach a plain sink.
# The kern compiler will REJECT this at compile time.

fn send_analytics(user: User):
    # PersonalData reaching a plain sink -- compile error!
    analytics.track(user.email.value)
    log.info("Tracked user: {user.name.value}")

# The safe path: validate consent, then process.

fn send_email_safe(user: User, consent: str):
    check_consent("process", consent)
    send(user.email_plain, "Welcome to our platform!")
    print("Email sent successfully")

fn main():
    user = User(
        name:  PersonalData("Eva Muller"),
        email: PersonalData("eva@example.eu"),
        age:   32
    )

    # send_analytics(user)   # Uncomment to see the error!
    send_email_safe(user, "granted")
```

Tab indents. Press Escape, then Tab, to leave the editor. Ctrl+Enter runs the example.

OutputSimulated · kern v1.2.0

```console
   Compiling user_service.kern...

error[E0302]: PersonalData<str> cannot reach a sink that does not declare PersonalData
  --> user_service.kern:13:21
   |
13 |     analytics.track(user.email.value)
   |                     ^^^^^^^^^^^^^^^^ direct access to PersonalData is forbidden
   |
   = help: use check_consent() to validate a lawful basis before processing
   = note: GDPR Article 6 requires a valid legal basis for processing personal data

error[E0302]: PersonalData<str> cannot reach a sink that does not declare PersonalData
  --> user_service.kern:14:32
   |
14 |     log.info("Tracked user: {user.name.value}")
   |                                ^^^^^^^^^^^^^^^  PersonalData cannot be interpolated into logs
   |
   = help: personal data must never be written to logs (GDPR Art. 25, data minimisation)

error: aborting due to 2 previous errors
```

## Want to run kern for real?

Install kern, or browse the source on [Codeberg](https://codeberg.org/PUAGroup/kern-lang) .

`curl -fsSL https://kern-lang.eu/install.sh | sh`
