---
title: Sanity
description: >-
  Hol dir mit der Quelle sanity() Dokumente aus einem Sanity-Dataset – eine GROQ-Abfrage wählt die Dokumente aus, und ihre Portable-Text-Inhalte werden zu Markdown.
---

Der integrierte `sanity()`-Adapter führt eine GROQ-Abfrage aus. Dabei ordnet er die Felder jedes Dokuments dem Frontmatter zu und wandelt den Portable-Text-Inhalt in Markdown um. Als Laufzeitabhängigkeit deklariert der Adapter `@sanity/client`. Das ist ein optionaler Peer, du musst ihn also nur installieren, wenn du diese Quelle verwendest.

```ts blume.config.ts
import { defineConfig } from "blume";
import { filesystem, sanity } from "blume/sources";

export default defineConfig({
  content: {
    sources: [
      filesystem({ root: "docs" }),
      sanity({
        prefix: "guides",
        projectId: "abc123",
        dataset: "production",
        query: `*[_type == "guide"]`,
        // Field paths default to title / slug.current / body / _updatedAt
        fields: { slug: "slug.current", body: "content" },
      }),
    ],
  },
});
```

Ein Lese-Token für ein privates Dataset kommt aus der Umgebungsvariable `SANITY_TOKEN`, die der Adapter deklariert. Eigene Portable-Text-Blocktypen ordnest du über die Engine-Option `serializers` Blume-Komponenten zu. Diese Option steht dir zur Verfügung, wenn du `sanitySource` direkt erstellst und an [`custom()`](/de/docs/content/sources/custom) übergibst. Sobald du `serializers` setzt, werden die Seiten der Quelle als MDX geschrieben. So werden Komponenten oder Direktiven, die ein Serializer zurückgibt, auch gerendert.
