> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kazzle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Geheimen

> Versleutelde kluis voor API-sleutels, inloggegevens en gevoelige configuratie.

# Geheimen

Kazzle heeft een ingebouwde versleutelde kluis voor het opslaan van API-sleutels, databaseinloggegevens, tokens en andere gevoelige waarden die uw app nodig heeft. Geheimen zijn versleuteld in rust met AES-256-GCM met KMS-verpakte gegevensversleutelingssleutels — onversleutelde waarden raken nooit de database.

## Concepten

**Collecties** groeperen gerelateerde geheimen (bijv. `stripe-keys`, `database-credentials`). Elke collectie heeft een **slug** (kleine letters, met koppeltekens) die u in configuratiebestanden en CLI-opdrachten gebruikt.

**Omgevingen** zijn optionele bereiken binnen een collectie (bijv. `production`, `staging`). Geheimen kunnen aan een specifieke omgeving worden gekoppeld of op collectieniveau als standaardwaarden blijven staan.

**Resolutievolgorde:** bij het oplossen van geheimen voor een bepaalde collectie + omgeving overschrijven omgevingsspecifieke geheimen geheimen op collectieniveau met dezelfde naam. Dit stelt u in staat om de meeste geheimen in omgevingen te delen terwijl u specifieke waarden per omgeving overschrijft.

## Geheimen beheren

### In de app

Open **Instellingen > Kluis** om collecties, omgevingen en geheimen via de UI te maken.

### Met de AI

De AI kan collecties maken, omgevingen maken, geheimen opslaan, ze tussen bereiken verplaatsen en ze voor u verwijderen.

De AI ziet geheimennamen en metagegevens, maar niet de versleutelde waarden.

### Met de CLI

```bash theme={"theme":"material-theme-darker"}
# Geheimen exporteren als KEY=value-regels
kazzle secrets.export --collection=stripe-keys --env=production
```

## Geheimen uit uw app refereren

Wijs de `env` van een component naar een geheimencollectie en omgeving in `kazzle.config.ts`. Elk geheim in dat bereik wordt geïnjecteerd als een procesomgevingsvariabele waarvan de naam overeenkomt met de geheimennaam:

```typescript theme={"theme":"material-theme-darker"}
import { defineConfig } from '@kazzle/app';

export default defineConfig({
  components: [
    {
      name: 'API Server',
      type: 'process',
      path: './server',
      env: {
        collection: 'stripe-keys',
        environment: 'production'
      }
    }
  ]
});
```

`env.collection` en `env.environment` zijn **slugs**, geen weergavenamen. Gebruik `env.include` om alleen een subset van de geheimen van de collectie in te voegen:

```typescript theme={"theme":"material-theme-darker"}
env: {
  collection: 'stripe-keys',
  environment: 'production',
  include: ['STRIPE_SECRET_KEY']
}
```

## Hoe geheimen omgevingsvariabelen worden

Wanneer geheimen voor een component worden opgelost:

1. De collectie wordt per slug in uw space gevonden
2. Geheimen die aan de opgegeven omgeving zijn gekoppeld, worden geladen
3. Geheimen op collectieniveau (geen omgeving) worden als standaardwaarden opgenomen
4. Omgevingsspecifieke geheimen overschrijven geheimen op collectieniveau met dezelfde naam
5. Geheimverwijzingen in waarden worden opgelost
6. Geheimennamen worden omgezet naar omgevingsvariabelindeling: hoofdletters, niet-alfanumerieke tekens worden onderstrepen

Een geheim met de naam `Stripe Secret Key` wordt `STRIPE_SECRET_KEY`.

Elk geheim heeft een **body-modus** die bepaalt hoe het wordt geïnjecteerd:

* **`string`** geheimen (API-sleutels, tokens, URI's) worden geïnjecteerd als gewone scalaire tekenreeksen
* **`json`** geheimen (gestructureerde configuratie) worden geïnjecteerd als JSON-tekenreeksen
* **`fields`** geheimen (inloggegevens, getypte veldenverzamelingen) worden geïnjecteerd als JSON-tekenreeksen

## Wanneer geheimen worden geïnjecteerd

| Context                      | Geïnjecteerd? | Details                                                                            |
| ---------------------------- | ------------- | ---------------------------------------------------------------------------------- |
| **Deploy** (procescomponent) | Ja            | Toegevoegd als runtime-omgevingsvariabelen in productie                            |
| **Deploy** (UI-component)    | Gedeeltelijk  | Alleen geheimen met `VITE_*` voorvoegsel worden tijdens het bouwen doorgegeven     |
| **CLI** (`kazzle run`)       | Ja            | Geïnjecteerd in de omgeving van de opdracht                                        |
| **CLI** (`secrets.export`)   | Ja            | Geëxporteerd als `KEY=value`-regels                                                |
| **Dev-preview**              | Nog niet      | De preview-starter lost component `env` nog niet op — gebruik `kazzle run` voor nu |

## Sjabloonverwijzingen

Geheimwaarden kunnen verwijzen naar andere geheimenvelden met dezelfde syntaxis die Kazzle elders gebruikt:

```
postgresql://${secret.123e4567-e89b-12d3-a456-426614174000.username}:${secret.123e4567-e89b-12d3-a456-426614174000.password}@db.example.com:5432/mydb
```

Ondersteunde indelingen:

* `${secret.<uuid>.<field>}` — specifiek veld of JSON-pad in geheimwaarden of hulpmiddelparameters waar kluisverwijzingen zijn ingeschakeld.
* `${secret.<uuid>}` — hele geheimtekst. Gebruik alleen wanneer een hulpmiddel expliciet om het volledige onbewerkte geheim vraagt; gebruik dit niet in app-omgeving/configuratie.

Verwijzingen worden opgelost nadat geheimen zijn geladen. Circulaire of verbroken verwijzingen mislukken in plaats van stilzwijgend terug te vallen.
