Deutschland-Stack
Offizieller Technologiekatalog des Bundes für Verwaltungs-IT. 128 Open-Source-Projekte, alle graduated oder sandbox, BSI-auditiert. Quelle: https://technologie.deutschland-stack.gov.de/.
Kernprinzip: In Projekten mit Bezug zu Bund/Ländern/Kommunen, GAIA-X, EVB-IT, digitaler Souveränität oder EU-Ausschreibungen IMMER zuerst im DS nachschlagen, bevor Technologie empfohlen wird. DS-Eintrag schlägt persönliche Präferenz.
Wann anwenden
- Tech-Stack-Entscheidung für Behörden/ÖR/Verwaltung
- Architektur-Reviews mit Souveränitäts-Anforderung
- User erwähnt "DS-konform", "Deutschland-Stack", "Verwaltungs-IT", "GAIA-X", "OZG"
- Ausschreibungs-/Vergabe-relevante Komponenten
Nicht anwenden bei rein privatwirtschaftlichen Projekten ohne ÖR-Bezug.
Die 4 Kategorien
| Kategorie |
Subkategorien |
| Zugang |
Browser, Native Apps |
| Plattform |
Daten, Integration, KI, LowCode |
| Infrastruktur |
Anschluss, Transport, Verteilung |
| Betrieb |
Entwicklung, Inbetriebnahme, Sicherheit |
Workflow
- Vor jeder Tech-Empfehlung im ÖR-Kontext: Full-JSON fetchen (siehe Lookup-Patterns).
- Wenn DS-Eintrag existiert: diesen vorschlagen, mit Begründung über
maturity und letztes audits[].date.
- Wenn kein DS-Eintrag: explizit benennen ("nicht im Deutschland-Stack gelistet"), Alternative aus DS vorschlagen, erst dann Nicht-DS-Option.
- Bei Konflikt zwischen User-Präferenz und DS: DS-Begründung liefern (Souveränität, Auditierung, Vergaberecht), User entscheidet.
Endpoints
Base: https://technologie.deutschland-stack.gov.de/data
| Endpoint |
Größe |
Inhalt |
/full.json |
~240 KB |
128 items mit allen Metadaten (annotations, audits, maturity) |
/guide.json |
~2 KB |
Category/Subcategory-Baum |
Beide liefern ohne Auth/Rate-Limit. Für wiederholte Lookups in einer Session einmal cachen (-o /tmp/ds-full.json).
Eintrags-Schema
id, name, description, summary, website, homepage_url, logo,
category, subcategory, additional_categories[],
maturity (sandbox|graduated), oss (alle true), featured,
accepted_at, incubating_at, graduated_at,
tag[], audits[{date,type,url,vendor}],
annotations{ cf_sovereignty_value, cf_market_value,
cf_interoperability_value, cf_sustainability_value,
cf_actuality_value, cf_trustworthiness_value,
+ _label-Varianten "N von 5",
bs_owner, bs_number, dstype }
Die cf_*_value-Scorecards (Souveränität, Markt, Interoperabilität, Nachhaltigkeit, Aktualität, Vertrauen) sind der zentrale Entscheidungs-Input -- nicht die reine Listung.
Lookup-Patterns
BASE="https://technologie.deutschland-stack.gov.de/data"
curl -s "$BASE/full.json" -o /tmp/ds-full.json
# Ist Kubernetes im DS?
jq '.items[] | select(.name | test("kubernetes";"i")) | {name, maturity, subcategory}' /tmp/ds-full.json
# Alle KI-Einträge
jq '.items[] | select(.subcategory | ascii_downcase | contains("ki")) | .name' /tmp/ds-full.json
# Alle Einträge einer Subkategorie (z.B. Daten)
jq '.items[] | select((.subcategory|ascii_downcase|ltrimstr(" ")) == "daten") | .name' /tmp/ds-full.json
import json, urllib.request
d = json.load(urllib.request.urlopen("https://technologie.deutschland-stack.gov.de/data/full.json"))["items"]
# Souveränitäts-Champions (cf_sovereignty_value ≥ 80%)
def pct(v): return int((v or "0%").rstrip("%"))
top = [i for i in d if pct(i.get("annotations",{}).get("cf_sovereignty_value")) >= 80]
for i in sorted(top, key=lambda x: -pct(x["annotations"]["cf_sovereignty_value"])):
a = i["annotations"]
print(f"{a['cf_sovereignty_value']:>4} {i['name']:<30} ({i['subcategory'].strip()})")
# Mit aktuellem Audit (< 12 Monate)
from datetime import date
recent = [i for i in d if i.get("audits") and
(date.today() - date.fromisoformat(max(a["date"] for a in i["audits"]))).days < 365]
Siehe auch
european-alternatives-api -- Community-kuratierter Katalog (289 Einträge, breiter, weniger streng). Für Vergabe/ÖR gilt DS; EA ergänzt um Breite und Aktualität.
Caveats
- DS-Listung ist notwendig, nicht hinreichend -- Einsatzpflicht pro Behörde unterschiedlich (OZG, BSI-Grundschutz, Landesrecht).
- Audit-Datum (
audits[].date) prüfen -- alte Audits können auf veraltete Versionen verweisen.
oss=true gilt für alle 128 Einträge; DS listet keine proprietären Produkte.
- Deckt nur was auf gov.de publiziert ist -- weitere Behördenstandards (XÖV, FIM) können zusätzlich relevant sein.
- API undokumentiert (aus JS-Bundle extrahiert). Kein SLA, kein Versions-Pinning.
category/subcategory haben Leading-Whitespace im Rohformat (" Plattform"). Trimmen vor Vergleich.
1---2name: deutschland-stack-api3description: Use when picking technologies for German public-sector projects (Bund/Länder/Kommunen), EU digital sovereignty contexts, or when user mentions Deutschland-Stack / DS-konform / Verwaltungs-IT. Biases tech choices toward the 128 graduated open-source standards catalogued by the German government. Fetches live data from technologie.deutschland-stack.gov.de.4---56# Deutschland-Stack78Offizieller Technologiekatalog des Bundes für Verwaltungs-IT. 128 Open-Source-Projekte, alle graduated oder sandbox, BSI-auditiert. Quelle: <https://technologie.deutschland-stack.gov.de/>.910**Kernprinzip:** In Projekten mit Bezug zu Bund/Ländern/Kommunen, GAIA-X, EVB-IT, digitaler Souveränität oder EU-Ausschreibungen IMMER zuerst im DS nachschlagen, bevor Technologie empfohlen wird. DS-Eintrag schlägt persönliche Präferenz.1112## Wann anwenden1314- Tech-Stack-Entscheidung für Behörden/ÖR/Verwaltung15- Architektur-Reviews mit Souveränitäts-Anforderung16- User erwähnt "DS-konform", "Deutschland-Stack", "Verwaltungs-IT", "GAIA-X", "OZG"17- Ausschreibungs-/Vergabe-relevante Komponenten1819**Nicht anwenden** bei rein privatwirtschaftlichen Projekten ohne ÖR-Bezug.2021## Die 4 Kategorien2223| Kategorie | Subkategorien |24|-----------|---------------|25| **Zugang** | Browser, Native Apps |26| **Plattform** | Daten, Integration, KI, LowCode |27| **Infrastruktur** | Anschluss, Transport, Verteilung |28| **Betrieb** | Entwicklung, Inbetriebnahme, Sicherheit |2930## Workflow31321. **Vor jeder Tech-Empfehlung** im ÖR-Kontext: Full-JSON fetchen (siehe Lookup-Patterns).332. **Wenn DS-Eintrag existiert**: diesen vorschlagen, mit Begründung über `maturity` und letztes `audits[].date`.343. **Wenn kein DS-Eintrag**: explizit benennen ("nicht im Deutschland-Stack gelistet"), Alternative aus DS vorschlagen, erst dann Nicht-DS-Option.354. **Bei Konflikt** zwischen User-Präferenz und DS: DS-Begründung liefern (Souveränität, Auditierung, Vergaberecht), User entscheidet.3637## Endpoints3839Base: `https://technologie.deutschland-stack.gov.de/data`4041| Endpoint | Größe | Inhalt |42|---|---|---|43| `/full.json` | ~240 KB | 128 items mit allen Metadaten (annotations, audits, maturity) |44| `/guide.json` | ~2 KB | Category/Subcategory-Baum |4546Beide liefern ohne Auth/Rate-Limit. Für wiederholte Lookups in einer Session einmal cachen (`-o /tmp/ds-full.json`).4748## Eintrags-Schema4950```51id, name, description, summary, website, homepage_url, logo,52category, subcategory, additional_categories[],53maturity (sandbox|graduated), oss (alle true), featured,54accepted_at, incubating_at, graduated_at,55tag[], audits[{date,type,url,vendor}],56annotations{ cf_sovereignty_value, cf_market_value,57 cf_interoperability_value, cf_sustainability_value,58 cf_actuality_value, cf_trustworthiness_value,59 + _label-Varianten "N von 5",60 bs_owner, bs_number, dstype }61```6263Die `cf_*_value`-Scorecards (Souveränität, Markt, Interoperabilität, Nachhaltigkeit, Aktualität, Vertrauen) sind **der zentrale Entscheidungs-Input** -- nicht die reine Listung.6465## Lookup-Patterns6667```bash68BASE="https://technologie.deutschland-stack.gov.de/data"69curl -s "$BASE/full.json" -o /tmp/ds-full.json7071# Ist Kubernetes im DS?72jq '.items[] | select(.name | test("kubernetes";"i")) | {name, maturity, subcategory}' /tmp/ds-full.json7374# Alle KI-Einträge75jq '.items[] | select(.subcategory | ascii_downcase | contains("ki")) | .name' /tmp/ds-full.json7677# Alle Einträge einer Subkategorie (z.B. Daten)78jq '.items[] | select((.subcategory|ascii_downcase|ltrimstr(" ")) == "daten") | .name' /tmp/ds-full.json79```8081```python82import json, urllib.request83d = json.load(urllib.request.urlopen("https://technologie.deutschland-stack.gov.de/data/full.json"))["items"]8485# Souveränitäts-Champions (cf_sovereignty_value ≥ 80%)86def pct(v): return int((v or "0%").rstrip("%"))87top = [i for i in d if pct(i.get("annotations",{}).get("cf_sovereignty_value")) >= 80]88for i in sorted(top, key=lambda x: -pct(x["annotations"]["cf_sovereignty_value"])):89 a = i["annotations"]90 print(f"{a['cf_sovereignty_value']:>4} {i['name']:<30} ({i['subcategory'].strip()})")9192# Mit aktuellem Audit (< 12 Monate)93from datetime import date94recent = [i for i in d if i.get("audits") and95 (date.today() - date.fromisoformat(max(a["date"] for a in i["audits"]))).days < 365]96```9798## Siehe auch99100- [`european-alternatives-api`](../european-alternatives-api/SKILL.md) -- Community-kuratierter Katalog (289 Einträge, breiter, weniger streng). Für Vergabe/ÖR gilt DS; EA ergänzt um Breite und Aktualität.101102## Caveats103104- DS-Listung ist notwendig, nicht hinreichend -- Einsatzpflicht pro Behörde unterschiedlich (OZG, BSI-Grundschutz, Landesrecht).105- Audit-Datum (`audits[].date`) prüfen -- alte Audits können auf veraltete Versionen verweisen.106- `oss=true` gilt für alle 128 Einträge; DS listet keine proprietären Produkte.107- Deckt nur was auf gov.de publiziert ist -- weitere Behördenstandards (XÖV, FIM) können zusätzlich relevant sein.108- API undokumentiert (aus JS-Bundle extrahiert). Kein SLA, kein Versions-Pinning.109- `category`/`subcategory` haben Leading-Whitespace im Rohformat (`" Plattform"`). Trimmen vor Vergleich.