Entwicklung & Code
Linting-Stack für Node-Projekte: Code-Qualität, Formatierung und Prosa-Linting
Nicht nur Code bestimmt die Softwarequalität, sondern auch die Art, wie Softwareentwicklerinnen und -entwickler ihn dokumentieren und präsentieren. In einer Zeit, in der viele Entwicklerteams vollständig remote arbeiten und die Codebase weiter kontinuierlich wächst, ist die konsistente und automatisierte Qualitätskontrolle eine Notwendigkeit.
Weiterlesen nach der Anzeige

David König ist seit über 20 Jahren in der IT aktiv. Viele Jahre hat ihn das Thema Workplace-Management und Infrastruktur als Berater beschäftigt, bevor er in die Entwicklung gegangen ist, um sich intensiv mit den Themen Produkt-Management und DevOps auseinanderzusetzen. Nachdem er den Schaffensprozess von Software von allen Seiten kennengelernt hat und neben der IT-Community auch in der Heim- und Handcommunity aktiv ist, versteht er die Entwicklung und den Betrieb von Software weniger als Wissenschaft, sondern als Handwerk. Dieser Gedanke treibt ihn und er versucht immer wieder, Parallelen zwischen Handwerk und Softwareentwicklung aufzuzeigen.
Heute betreibt David Softwareentwicklung in der Automotive-Branche bei der adesso SE und zusammen mit vielen weiteren Kollegen IoT-Projekte und die pragmatische Vision der Softwareentwicklung als Handwerk vor allem im AI-Bereich.
Während meiner Arbeit an einem node-basierten Dokumentationsstack mit dem Static-Site-Generator Astro und Starlight, einem darauf aufbauenden Framework speziell für Dokumentationswebsites, bin ich auf die Herausforderung gestoßen, nicht nur sauberen Code, sondern auch hochwertige Prosa zu produzieren. Prosa kommt aus dem Lateinischen und bedeutet „geradeheraus reden“ – also ohne Schnörkel normal sprechen.
Im Rahmen einer Dokumentation bezeichnet Prosa den gesamten ausformulierten Textinhalt der technischen Dokumentation – alle Erklärungen, Anleitungen, Beschreibungen und Kommentare. Ziel ist es, dass Stil-Konsistenz, Grammatik, Wortwahl, Lesbarkeit und die Einhaltung von Dokumentationsrichtlinien sichergestellt sind und die technische Dokumentation nicht nur funktional korrekt, sondern auch verständlich, einheitlich und professionell geschrieben ist.
Die Lösung: Ein mehrstufiges Linting-System, das Code-Qualität, Formatierung und Prosa-Linting für englischsprachige Dokumentation geschickt miteinander verbindet und sich durch Git Pre-Commit Hooks sowie CI/CD-Pipelines automatisieren lässt. Prosa Linting für deutsche Texte ist nicht nativ integriert, lässt sich aber durch eigene Regeln integrieren. Hierbei kann die KI bei der Erstellung der Regeln gute Dienste tun. Eine gute Hilfestellung bietet hier auch der webbasierte Regelgenerator valegen.
- Automatisierung ist der Schlüssel: Pre-Commit Hooks und CI/CD-Pipelines stellen sicher, dass Qualitätsstandards eingehalten werden
- Dreistufiger Ansatz: Code-Qualität, Formatierung und Prosa-Linting ergänzen sich perfekt
- Tool-Integration: Astro, Starlight, Vale und moderne Entwicklertools harmonieren ausgezeichnet
- Skalierbarkeit: Das System wächst mit dem Projekt und dem Team mit
- Zukunftssicherheit: KI-Integration wird nahtlos möglich
Test-Setup: Astrogon als Grundlage für das Linting-System
Weiterlesen nach der Anzeige
Bevor es an die detaillierte Umsetzung des dreistufigen Linting-Konzepts geht, ist eine praktische Arbeitsumgebung einzurichten. Als grundlegendes Code- und Dokumentations-Beispiel dient Astrogon – ein vielseitiges Astro-Theme, das sich ideal für die Demonstration des Linting-Systems eignet. Astrogon ist ein schnell anpassbares, Mehrzweck-Website-Template, das auf Astro JS, Tailwind CSS und React basiert. So bildet es eine solide Grundlage für verschiedene Website-Typen – von Blogs über Dokumentationsseiten bis hin zu Portfolio-Websites.
Astrogon eignet sich deshalb als Demo-Basis, weil es:
- Verschiedene Dateitypen enthält: .astro, .tsx, .js, .md, .mdx, .css
- Realistische Komplexität bietet: ein echtes Projekt mit authentischen Herausforderungen
- Einen modernen Stack verwendet: aktuelle Technologien, die typisch für moderne Webprojekte sind
- Gut strukturiert ist: klare Ordnerstruktur für effektives Linting
- Content-fokussiert arbeitet: viel Text-Content für Prosa-Linting
Durch einen Fork des originalen Astrogon Repository, den man lokal klont, lässt sich das Projekt einfach aufsetzen.
# Create a fork (via GitHub.com)
# Clone repository
git clone
cd my-linting-project
# Install dependencies
npm install
# Fix existing vulnerabilities
npm audit fix
# Start development server
npm run dev
Nach der Installation steht eine vollständig funktionsfähige Website mit folgender Struktur parat:
my-linting-project/
├── docs/ # Documentation
├── public/ # Static public viewable resources
├── src/
│ ├── assets/ # Pictures, icons,...
│ ├── components/ # reusable components
│ ├── content/ # Markdown/MDX content collections
│ ├── lib/ # Utility functions
│ ├── pages/ # Astro-pages (Routing)
│ ├── styles/ # CSS/SCSS files
│ ├── types/ # TypeScript type-definitions
│ ├── content.config.ts # Content Collections configuration
│ └── env.d.ts # Environment variables types
├── .editorconfig # Editor-configuration
├── .prettierrc # Preconfigured prettier
├── .markdownlint.json # Preconfigured markdownlot
├── astro.config.mjs # Astro configuration
├── package.json # Dependencies and scripts
├── tailwind.config.js # Tailwind CSS configuration
├── tsconfig.json # TypeScript Configuration
└── wrangler.jsonc # Cloudflare workers configuration
Integration der Linter in den Stack
Modernes Linting geht weit über die reine Syntaxprüfung hinaus und umfasst drei komplementäre Dimensionen der Qualitätskontrolle: Code-Qualität für die Logik, Formatierung für die Konsistenz und Prosa-Linting für die menschliche Lesbarkeit. Für diese drei Aspekte kommen verschiedene Linter zum Einsatz: ESLint für die Code-Qualität, Prettier für die Formatierung und Vale für das Prosa-Linting.
Code-Qualität mit ESLint: ESLint bildet das Fundament des Linting-Stacks. Es analysiert TypeScript-, JavaScript- und Astro-Dateien auf potenzielle Fehler, Style-Inkonsistenzen und Best-Practice-Verletzungen. Die Installation leitet der folgende Befehl ein:
npm install -D eslint @typescript-eslint/eslint-plugin @typescript-eslint/parser astro-eslint-parser eslint-plugin-astro
Im nächsten Schritt folgt das Anlegen der Datei .eslintrc.js, die die Konfiguration für die verschiedenen Dateitypen definiert. Dies gelingt am einfachsten über den offiziellen Konfigurations-Wizard von ESLint:
npm init @eslint/config@latest
module.exports = {
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
],
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint"],
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
},
env: {
node: true,
browser: true,
es2022: true,
},
rules: {
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/no-empty-interface": "off",
},
overrides: [
{
files: ["*.astro"],
extends: ["plugin:astro/recommended"],
parser: "astro-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
extraFileExtensions: [".astro"],
},
},
],
};
Anschließend sind die aufrufenden npm-Skripte in der Datei package.json zu hinterlegen.
{
"scripts": {
"lint": "eslint ./src --ext .js,.ts,.jsx,.tsx,.astro --fix",
"lint:check": "eslint ./src --ext .js,.ts,.jsx,.tsx,.astro"
}
}
Der Befehl npm run lint korrigiert dann automatisch behebbare Probleme, während npm run lint:check nur überprüft, ohne Änderungen vorzunehmen, und die Ergebnisse im Terminal ausgibt.
Code-Formatierung mit Prettier: Prettier sorgt für einheitliche Code-Formatierung und nimmt Entwicklern die Diskussion über Code-Style ab. Besonders in Astro-Projekten mit gemischten Dateitypen ist eine konsistente Formatierung essenziell. Prettier lässt sich mit folgendem Befehl installieren:
npm install -D prettier prettier-plugin-astro prettier-plugin-tailwindcss
Die Konfiguration von .prettierrc\ im Root-Verzeichnis des Repository berücksichtigt die spezifischen Anforderungen von Astro-Projekten:
{
"plugins": ["prettier-plugin-astro", "prettier-plugin-tailwindcss"],
"semi": true,
"singleQuote": false,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 80,
"useTabs": false,
"bracketSpacing": true,
"bracketSameLine": false,
"arrowParens": "always",
"endOfLine": "lf",
"overrides": [
{
"files": ["*.astro"],
"options": {
"parser": "astro"
}
},
{
"files": ["*.md", "*.mdx"],
"options": {
"printWidth": 100,
"proseWrap": "always"
}
}
]
}
Sind die Abhängigkeiten installiert und die Konfiguration angelegt, werden die entsprechenden npm-Skripte in der Datei package.json eingefügt:
{
"scripts": {
...
...
"format": "prettier --write ./src --log-level silent",
"format:check": "prettier --check ./src --log-level silent"
}
}
Der Befehl npm run format korrigiert anschließend automatisch behebbare Probleme, während npm run format:check nur überprüft, ohne Änderungen vorzunehmen, und die Ergebnisse im Terminal ausgibt.
Prosa-Linting mit Vale: Vale ist ein Open-Source-Tool für das Prosa-Linting, das wie ein Code-Linter funktioniert, aber Fließtext verarbeitet. Es prüft Texte auf stilistische Fehler, wiederkehrende Muster und Verstöße gegen vordefinierte oder eigene Stilrichtlinien. Es funktioniert mit Markdown, HTML, AsciiDoc oder reStructuredText und analysiert diese Formate anhand konfigurierter Regeln. Die Style-Guides, anhand derer Vale überprüft, können frei gewählt, angepasst oder erweitert werden – beispielsweise nach Vorbildern von Google, Microsoft oder eigenen Anforderungen.
Typische Regeln erkennen etwa unnötige Passiv-Konstruktionen, zu viele Wiederholungen, fehlende Oxford-Kommas – also das Komma vor der Konjunktion in einer Aufzählung, das helfen soll, Missverständnisse zu vermeiden – oder „Weak Words“ wie „viele“ oder „manchmal“. Die Ergebnisse zeigt Vale direkt im Editor, in der Kommandozeile oder als Teil automatisierter CI-Prozesse.
Vale erfordert eine plattformspezifische Installation sowie den Download der Style-Guides und LibreOffice-kompatibler Hunspell-Wörterbücher (.dic/.aff-Dateien) für die Rechtschreibprüfung in anderen Sprachen als Englisch. Ja, die Kombination von Prosa-Linting-Style-Guides (wie Vale, Google oder Microsoft Style Guides) mit einem deutschen Wörterbuch ist durchaus sinnvoll und funktioniert einwandfrei – Vale nutzt Hunspell-Dictionaries unabhängig voneinander für Rechtschreibung und Stilregeln. Rechtschreibprüfung prüft Wörter auf Korrektheit, während Prosa-Linting Stil, Lesbarkeit und Konventionen überwacht; beide ergänzen sich nahtlos in einem Workflow. Für das beispielhafte Repository habe ich entsprechende Linux/macOS– und Windows-Skripte angelegt, die das Setup erledigen. Getestet ist aktuell nur das Bash-Skript, das PowerShell-Skript wurde via KI automatisiert auf Basis des Bash-Skripts erstellt.
Abweichend von der standardmäßigen Vorgehensweise, bei der Probleme mit dem in Vale integrierten Installer vale sync auftraten, laden die Skripte die git-Repositories für die Styleguides manuell herunter und löschen alle git-spezifischen Inhalte.
# Linux/macOS
chmod +x .vale/install-vale.sh
./.vale/install-vale.sh
# Windows
powershell -ExecutionPolicy Bypass -File .vale/install-vale.ps1
Nach Ausführen der Skripte entsteht folgendes Verzeichnis im Root-Verzeichnis des Repositories:
my-linting-project/
├── .vale/
├── dictionaries
│ ├── de_DE.aff
│ ├── de_DE.dic
├── styles
├── Base
│ ├── accept.txt
│ ├── reject.txt
│ ├── Microsoft/
│ ├── write-good/
├── install-vale.ps1
├── install-vale.sh
└── vale
Zu beachten ist dabei noch, alle dynamisch generierten Inhalte in die .gitignore-Datei aufzunehmen.
# Vale binary (install with npm run install-vale)
.vale/dictionaries
.vale/styles/Microsoft
.vale/styles/write-good
.vale/vale
.vale/vale.exe
Vale-Styleguides auswählen und installieren
Das Installationsskript lädt nicht nur Vale herunter, sondern auch die benötigten Styleguides. Auf der Vale-Website sind, neben einigen weiteren spezifischen, vier wesentliche Style-Guides referenziert:
- Starker Fokus auf technische Konsistenz und Präzision für Entwickler.
- Große Ausnahmeliste für Akronyme und Begriffe aus APIs.
- Substitutionslisten mit Google-typischer Terminologie.
- Stil: direkt, technisch, an Entwickler gerichtet, prägnant, präzise.
- Quelle Git, Quelle Style-Guide
Microsoft
- Sehr starke Gewichtung auf Inklusivität und Barrierefreiheit.
- Klare Satzlängen- und Limits für Wörter.
- Hunderte produkt- und communityspezifische Begriffe.
- Stil: freundlich, inklusiv, leserorientiert, markengerecht, barrierefrei.
- Quelle Git, Quelle Style-Guide
Red Hat
- Strikte Regeln zu „Open Source“-neutraler Sprache und Kollaboration.
- Erlaubt keinen Produkt-Bias, eigene Accessibility- und Bias-Listen.
- Regeln für CLI-Beispiele, Dateipfade und produktneutrale Formulierungen.
- Bevorzugt kollaborativen Duktus und Community-Perspektive.
- Stil: offen, kollaborativ, communitygetrieben, produktneutral, inklusiv.
- Quelle Git, Quelle Style-Guide
Write-good
- Fokussiert sich rein auf sprachliche Klarheit und verbessert Lesbarkeit und Stil, ohne produkt- oder technikspezifische Prüfkriterien.
- In modernen Dokumentations-Workflows eignen sich Write-Good-Regeln ergänzend, um die sprachliche Qualität unabhängig von der Plattform zu verbessern.
- Write-Good Vale Style-Guide
Im Folgenden kommt der „Microsoft Style Guide“ zum Einsatz – erweitert um die Style-Guides „write-good“, „MDX“ und „Vale Core“. Diese sind wie folgt charakterisiert:
Microsoft Style Guide: Unternehmensstandards für technische Dokumentation
write-good: allgemeine Regeln für klares Schreiben
Vale Core: grundlegende Prosa-Regeln
MDX: Prüfung der Sprache innerhalb von JSX Tags
Beim Einsatz unterschiedlicher Style-Guides in Kombination lässt sich in manchen Situationen schwer identifizieren, warum welche Regel benötigt wird. Ein Beispiel macht dies klarer. Gegeben ist folgende MDX-Datei:
---
title: "Using Feature Y"
author: "Adesso"
---
# Feature Y Benefits
You will be able to use this feature very effectively. It was developed by adeso and their team.
DO NOT use this feature if your environment isn't set correctly.
Step 1: Initializing the data source
Step 2 Call the performOperation() function
Step 3: Confirm the output's accuracy
> Note: The process can be slow. It is important that you wait patiently.
For details, check our doc [documentation](htp://example.com/feature-y).
Die Ergebnisse des Lintings fasst die folgende Tabelle zusammen:
| Fehler | Welcher Regelsatz | Erklärungen & Korrektur |
| Autor „Adesso“ und „adeso“ inkonsistent geschrieben | Custom Regel | Korrigiert in „adesso“ |
|
Großschreibung in JSX-Komponente ` |
MDX-Regelsatz |
Meldet falsche Großschreibung oder unbekannte JSX-Tags, erwartet ` |
| Markdown-Liste ohne korrekte Aufzählungszeichen | MDX-Regelsatz | Fehlt das `-` oder die Nummerierung bei Liste (z.B. `Step 2` ist kein Listenelement) |
| Unsichere URL im Link (htp statt http) | Microsoft Regelsatz | Erkennt ungültige URLs, fordert Korrektur auf gültiges Schema (` |
| Übermäßiger Gebrauch von Floskeln (z.B. „very effectively“, „It is important that“) | Write-Good | Empfiehlt prägnantere Ausdrucksweise („effectively“, „Wait patiently.“) |
| Use of first-person pronouns („You will be able…“, „you wait patiently“) in nicht passender Art | Microsoft Regelsatz | Warnt bei unpassender Verwendung von Personalpronomen, schlägt Sparse-Usage vor |
| Passiver Sprachgebrauch („was developed“) | Write-Good & Microsoft | Empfiehlt aktive Formulierung, z.B. „adesso developed this feature.“ |
Die korrigierte MDX-Datei sieht nach der Regelprüfung dann wie folgt aus:
---
title: "Using Feature Y"
author: "adesso"
---
# Feature Y Benefits
You can use this feature effectively, adesso and their team developed it.
Do not use this feature if your environment is not set correctly.
- Step 1: Initialize the data source
- Step 2: Call the performOperation() function
- Step 3: Confirm the output's accuracy
> Note: The process can be slow. Please wait patiently.
For details, check our [documentation](
Mithin ergeben sich folgende Einschränkungen:
- Die Vale-Style-Guides sind nur für englischen Text optimiert, eine Anpassung an Deutsch oder andere Sprachen scheint bisher nicht vorgesehen zu sein.
- Die Style-Guides basieren auf klassischen Regular Expressions. Wer KI-basierte Ansätze erwartet, wird enttäuscht.
- Speziell in größeren Projekten empfiehlt es sich einen eigenen Style-Guide aufzubauen. Die Konfiguration von Vale erfordert eine kontinuierliche Anpassung an die Bedürfnisse des Projekts.
Konfigurieren und Anpassen von Vale (.vale.ini)
Die Vale-Konfigurationsdatei gibt an, in welchen Verzeichnissen und mit welchen Style-Vorgaben das Tool den Text überprüfen soll. Für das Beispiel sei angenommen, dass sich der englische Content in den Unterverzeichnissen des Ordners /src/content befindet.
# Vale configuration file
# See:
Packages = MDX
StylesPath = .vale/styles
# Add dictionary path for German dictionaries
DictionaryPath = .vale/dictionaries
MinAlertLevel = error
# File type associations - English content (excluding German docs)
[src/content/**]{.md,.mdx}
# Enable/disable specific styles for English content
BasedOnStyles = Vale, write-good, Microsoft
# Enable rules
Vale.Terms = YES # Disables term-based checks. Example: Avoid using "jargon".
Vale.Spelling = YES # Disables spelling checks. Example: "recieve" instead of "receive".
Vale.Vocab = YES # Disables vocabulary checks. Example: Using "utilize" instead of "use".
Vale.Repetition = YES # Disables repetition checks. Example: "very very good".
Vale.Wordiness = YES # Disables wordiness checks. Example: "in order to" instead of "to".
# Write-good rules (English-specific)
write-good.Weasel = YES # Disables detection of weasel words. Example: "some people say".
write-good.TooWordy = YES # Disables detection of overly wordy phrases. Example: "due to the fact that".
write-good.So = YES # Disables detection of sentences starting with "so". Example: "So, we decided to...".
write-good.ThereIs = YES # Disables detection of "there is/are" constructions. Example: "There is a need for...".
write-good.Passive = YES # Disables detection of passive voice. Example: "The ball was thrown by John".
write-good.Adverbs = YES # Disables detection of adverbs. Example: "He ran quickly".
write-good.Cliches = YES # Disables detection of cliches. Example: "Think outside the box".
write-good.E-Prime = YES # Disables detection of E-Prime violations. Example: "He is a teacher".
write-good.Illusions = YES # Disables detection of ambiguous phrases. Example: "The results were significant".
# Microsoft style rules (English-specific)
Microsoft.Gender = YES # Ensures gender-neutral language is used. Example: Use "they" instead of "he/she".
Microsoft.PassiveVoice = YES # Flags sentences written in passive voice. Example: "The report was written by Sarah".
Microsoft.Cliches = YES # Detects overused phrases and cliches. Example: "At the end of the day".
Microsoft.Jargon = YES # Highlights technical jargon that may confuse readers. Example: "Leverage synergies".
Microsoft.Complexity = YES # Identifies sentences that are overly complex or difficult to read. Example: "The implementation of the solution was carried out in a manner that ensured...".
Microsoft.Redundancy = YES # Flags redundant phrases or words. Example: "Free gift".
Microsoft.Spelling = YES # Checks for spelling errors based on Microsoft's style guide. Example: "color" vs. "colour".
Microsoft.Spacing = YES # Disables because of D2 diagrams - Allows ignoring spacing-related issues. Example: "word word".
Microsoft.Contracting = YES # Allows ignoring contracting-related issues. Example: "isn't" vs. "is not".
Microsoft.Quotes = YES # Allows ignoring quotes-related issues. Example: "'single quotes' vs. "double quotes".
Microsoft.Contractions = YES # Allows ignoring contractions-related issues. Example: "can't" vs. "cannot".
Microsoft.Foreign = YES # Allows ignoring foreign phrases and words. Example: "et cetera".
Microsoft.Plurals = YES # Allows ignoring pluralization-related issues. Example: "criterias" vs. "criteria".
Microsoft.Auto = YES # Disables automatic suggestions for corrections. Example: "autocorrect".
Microsoft.AMPM = YES # Allows ignoring AM/PM formatting issues. Example: "2 PM" vs. "14:00".
Microsoft.DateOrder = YES # Allows ignoring date order-related issues. Example: "MM/DD/YYYY" vs. "DD/MM/YYYY".
Microsoft.Dashes = YES # Allows ignoring dash-related issues. Example: "em-dash" vs. "en-dash".
Microsoft.DateFormat = YES # Allows ignoring date format-related issues. Example: "2025-10-01" vs. "01/10/2025".
Microsoft.Units = YES # Allows ignoring unit-related issues. Example: "5kg" vs. "5 kg".
Microsoft.Avoid = YES # Allows ignoring "avoid" suggestions. Example: "Avoid using passive voice".
Microsoft.Negative = YES # Allows ignoring negative phrasing suggestions. Example: "Not bad" vs. "Good".
Nun sind noch die richtigen Cross-Platform npm-Skripte für Vale bereitzustellen, um den Linter zu installieren und aufzurufen.
{
"scripts": {
...
...
"postinstall": "npm run install-vale",
"install-vale": "node -e \"const cmd = process.platform === 'win32' ? 'powershell -ExecutionPolicy Bypass -File .vale/install-vale.ps1' : 'bash .vale/install-vale.sh'; require('child_process').exec(cmd, (err, stdout, stderr) => { if (err) { console.error(stderr); process.exit(1); } console.log(stdout); })\"",
"prose": "node -e \"const vale = process.platform === 'win32' ? './.vale/vale.exe' : './.vale/vale'; const { exec } = require('child_process'); exec(vale + ' --config=.vale.ini src/content', (err, stdout, stderr) => { console.log(stdout); if (stderr) console.error(stderr); if (err) process.exit(1); });\""
}
}
postinstall: Wird automatisch aufgerufen, wennnpm installausgeführt wirdinstall-vale: Ruft je nach Plattform die richtigen Installationsscripte aufprose: Ruft das Linting auf und gibt Fehler in der Kategorie „error“, „warning“ und „information“ aus
Ausnahmen für Sonderfälle sind eigens zu definieren, etwa für Situationen, in denen Vale eine Regel bewusst ignorieren soll. Beispielsweise würde die Regel write-good.So für den Satz „So the experiment failed because the measurements were taken incorrectly“ normalerweise den folgenden Fehler melden:
src/content/blog/myfile.mdx
188:52 error Don't start a sentence with write-good.So
'So '.
✖ 1 error, 0 warnings and 0 suggestions in 38 files.
Um für diesen spezifischen Fall die Prüfung abzuschalten, ist die entsprechende Zeile mit einem Kommentar zu umfassen:
{/* */}
So the experiment failed because the measurements were taken incorrectly
{/* */}
Zu beachten ist dabei, dass die beiden Kommentar-Tags und die betroffene Zeile durch einen Zeilenumbruch getrennt sein müssen. Da es sich zudem um MDX-Dateien handelt, müssen die Zeilen erst mit einem JSX-Kommentarblock umschlossen werden, damit der Server nicht meckert, und anschließend mit einem HTML-Kommentarblock, damit Vale diesen erkennt. Darüber hinaus benötigt Vale – mit folgenden beiden Zeilen in der vale.ini – einen Hinweis, dass MDX-Dateien letztlich auch als Markdown-Dateien zu behandeln sind:
[formats]
mdx = md
Im Falle kompletter Textblöcke oder wenn der Grund der Deaktivierung der Vale-Regel benannt werden soll, ist es ebenfalls möglich, nur einzelne Regeln abzuschalten:
{/* */}
So the experiment failed because the measurements were taken incorrectly
{/* */}
Entwicklung & Code
.NET 11.0 Preview 2 liefert asynchrone Runtime
Microsoft hat die zweite Preview-Version für .NET 11.0 veröffentlicht und bringt darin unter anderem Neuerungen für die asynchrone Programmierung.
Weiterlesen nach der Anzeige

Dr. Holger Schwichtenberg hat Fachbücher zu .NET 10.0, C# 14.0, Blazor 10.0 und Entity Framework Core 10.0 veröffentlicht. Er arbeitet als Berater und Trainer bei www.IT-Visions.de.
Die Schlüsselwörter async und await sind in vielen modernen Programmiersprachen verankert, zum Beispiel in Python seit 2015, in JavaScript seit 2017, in Rust seit 2019 und in Swift seit 2021. Auf die Frage „Wer hat es erfunden?“ muss man in diesem Fall sagen: Microsoft. Im Jahr 2012 erschienen diese beiden Schlüsselwörter zuerst in C# Version 5.0 und Visual Basic .NET Version 11.0. Sie vereinfachten die asynchrone Programmierung für Entwicklerinnen und Entwickler gegenüber vorher existierenden Konzepten und inspirierten danach viele andere Programmiersprachen.
Was für Entwicklerinnen und Entwickler einfach ist, ist unter der Haube aber bis heute komplex: In den .NET-Sprachen sind async und await bisher im Compiler als State Machines realisiert. In .NET 11.0 Preview 2 bringt Microsoft nun eine weiterentwickelte Version der .NET-Laufzeitumgebung Common Language Runtime (CLR), die nativ das Aussetzen und die Wiederaufnahme asynchroner Methoden unterstützt. Das erzeugt nicht nur weniger Overhead als die bisherigen State Machines, sondern ermöglicht schlankere Stack Traces und einfacheres Debugging.
Listing 1 zeigt vier asynchrone Methoden, die sich gegenseitig aufrufen.
using System.Diagnostics;
namespace NET11_Console.Runtime;
public class NET11_RuntimeAsync
{
public async Task Run()
{
await MethodeEbene1();
}
async Task MethodeEbene1()
{
await Task.CompletedTask;
await MethodeEbene2();
}
async Task MethodeEbene2()
{
await Task.CompletedTask;
await MethodeEbene3();
}
async Task MethodeEbene3()
{
await Task.CompletedTask;
Console.WriteLine(new StackTrace(fNeedFileInfo: true));
}
}
Listing 1: Verkettung asynchroner Methoden
Weiterlesen nach der Anzeige
Bisher sah man als Ergebnis von Listing 1 die State Machine im Stack Trace:
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene3() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 27
at
System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine&
stateMachine)
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene3()
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene2() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 21
at
System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine&
stateMachine)
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene2()
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene1() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 15
at
System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine&
stateMachine)
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene1()
at NET11_Console.Runtime.NET11_RuntimeAsync.Run() in h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 9
at
System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine&
stateMachine)
at NET11_Console.Runtime.NET11_RuntimeAsync.Run()
at Program.$(String[] args) in h:\git\ITVDemos\NET11\NET11_Console\Program.cs:line 8
Mit der neuen Laufzeitunterstützung für Asynchronität ist der Stack Trace deutlich kompakter:
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene3() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 27
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene2() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 21
at NET11_Console.Runtime.NET11_RuntimeAsync.MethodeEbene1() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 15
at NET11_Console.Runtime.NET11_RuntimeAsync.Run() in
h:\git\ITVDemos\NET11\NET11_Console\Runtime\NET11_RuntimeAsync.cs:line 9
at Program.$(String[] args) in h:\git\ITVDemos\NET11\NET11_Console\Program.cs:line 8
Auf dieser Basis konnte Microsoft auch das Debugging-Erlebnis verbessern, siehe Pull Request „Runtime support for breakpoints and stepping“ auf GitHub.
Allerdings erfordert die neue Unterstützung für Asynchronität in der Laufzeitumgebung aktuell noch, dass diese Neuerung in der Projektdatei separat aktiviert wird, siehe Listing 2.
net11.0
…
runtime-async=on
true
Listing 2: Aktivierung der Asynchronität in der Laufzeitumgebung per Projekteinstellungen
Alle TAR-Formate
Das TAR-Archivformat beherrscht .NET seit der Version 7.0 mit den Klassen TarFile, TarEntry, TarReader und TarWriter im Namensraum System.Formats.Tar. Bei der Erstellung einer TAR-Datei mit TarFile.CreateFromDirectory() und TarFile.CreateFromDirectoryAsync() wurde als Archivformat immer das PAX-Format (POSIX.1-2001) verwendet. Entwicklerinnen und Entwickler haben seit .NET 11.0 Preview 2 die Möglichkeit, alle vier TAR-Formate zu wählen: TarEntryFormat.V7 (das ursprüngliche TAR-Format), TarEntryFormat.Ustar (Unix Standard TAR), TarEntryFormat.Gnu und TarEntryFormat.Pax.
Dies geschieht durch den zusätzlichen Parameter mit einem Enumerationswert aus TarEntryFormat:
TarFile.CreateFromDirectory("d:\Export", @"t:\archiv.gnu.rar",
includeBaseDirectory: true, TarEntryFormat.Gnu);
Ein wesentlicher Unterschied zwischen den TAR-Formaten sind die maximalen Dateilängen: V7 erlaubt nur maximal 100 Zeichen für den Namen eines Eintrags. Bei USTAR sind es 256 Zeichen. Bei GNU und PAX ist die Länge von Dateinamen unbegrenzt. Bei USTAR ist die Dateigröße auf 8 GB beschränkt.
MinBy() und MaxBy() für Datenbankzugriffe
Die LINQ-Operatoren MinBy() und MaxBy() hat Microsoft bereits in .NET 6.0 eingeführt. Anders als die schon seit der ersten LINQ-Version in .NET Framework 3.5 verfügbaren Operatoren Min() und Max() liefern MinBy() und MaxBy() nicht nur den Minimal- bzw. Maximalwert selbst, sondern das ganze umgebende Objekt mit. Bisher waren MinBy() und MaxBy() nur in LINQ-to-Objects einsetzbar. Das ändert sich nun in .NET 11.0: Auch Entity Framework Core kann diese LINQ-Operatoren in SQL-Befehle umsetzen, siehe Listing 3.
var ctx = new DA.WWWings.WwwingsV1EnContext();
// Min vs. MinBy()
var wenigsteFreiePlaetze = ctx.Flights.Min(x => x.FreeSeats);
CUI.H1("Der Flug mit den wenigsten Plätzen hat " + wenigsteFreiePlaetze + " freie Plätze");
var flugMitDenWenigstenFreienPlaetzen = ctx.Flights.MinBy(x => x.FreeSeats);
Console.WriteLine(flugMitDenWenigstenFreienPlaetzen);
// Max() vs. MaxBy()
var meisteFreiePlaetze = ctx.Flights.Max(x => x.FreeSeats);
CUI.H1("Der Flug mit den meisten freien Plätzen hat " + meisteFreiePlaetze + " freie Plätze");
var flugMitDenMeistenFreienPlaetzen = ctx.Flights.MaxBy(x => x.FreeSeats);
Console.WriteLine(flugMitDenMeistenFreienPlaetzen);
Listing 3: MinBy() und MaxBy() in Entity Framework Core 11.0
Während der LINQ-Operator Min() die MIN()-Funktion in SQL nutzt
SELECT MIN([f].[FreeSeats])
FROM [Operation].[Flight] AS [f]
erstellt MinBy() eine sortierte Datensatzmenge und liefert den obersten Datensatz mit TOP(1) zurück:
SELECT TOP(1) [f].[FlightNo], [f].[Airline], [f].[Departure], [f].[Destination],
[f].[FlightDate], [f].[FreeSeats], [f].[Memo], [f].[NonSmokingFlight], [f].[Pilot_PersonID],
[f].[Seats], [f].[Timestamp]
FROM [Operation].[Flight] AS [f]
ORDER BY [f].[FreeSeats]
Datenübergabe zwischen HTTP-Anfragen mit TempData
Die in .NET 8.0 eingeführte Blazor-Variante Static Server-Side Rendering (SSR) ist den vorherigen Ansätzen für die Erstellung von Multi-Page-Apps im modernen .NET (ASP.NET Core Model-View-Controller (MVC) und ASP.NET Core Razor Pages) überlegen, hinsichtlich des Komponentenmodells, der Razor-Syntax und des partiellen Seitenaustauschs. Allerdings gab es bis dato auch einige Funktionen in MVC und Razor Pages, die Blazor SSR nicht beherrschte. Dazu gehören das Caching von Seitenteilen, erweiterbare Bedingungen für Routenparameter und die Datenübergabe zwischen HTTP-Anfragen mit dem TempData-Objekt (siehe GitHub-Issue). Letzteres ist nun in .NET 11.0 Preview 2 möglich. Die Datenspeicherung erfolgt wahlweise als Cookie (CookieTempDataProvider) oder im Session Storage (SessionStorageTempDataProvider) des Webbrowsers.
Anders als bei MVC und Razor Pages ist TempData aber keine Property der Basisklasse, sondern muss als Cascading Parameter explizit konsumiert werden, siehe Listing 5. Dabei ist zu beachten, dass TempData wie bei MVC und Razor Pages nur Zeichenketten abspeichern kann, das heißt, komplexe Objekte müssen Entwicklerinnen und Entwickler selbst serialisieren, siehe Listing 4.
@page "/Registration"
@using BlazorSSRSamples
@using Newtonsoft.Json
@inject NavigationManager NavigationManager
Ihr Name:
reg.Name)" />
Ihre E-Mail-Adresse:
reg.EMail)" />
@code {
[SupplyParameterFromForm]
RegistrationData reg { get; set; } = new();
[CascadingParameter]
public ITempData? TempData { get; set; }
private string? message;
private void HandleSubmit()
{
TempData!["Message"] = "Registrierung erfolgreich übermittelt!";
TempData!["Reg"] = System.Text.Json.JsonSerializer.Serialize(reg); // speichert nur Strings
TempData!["RegInfo"] = DateTime.Now.ToString();
NavigationManager.NavigateTo("RegistrationConfirm", new NavigationOptions() { ForceLoad = true });
}
}
Listing 4: TempData in Blazor-SSR-Seite befüllen
@page "/RegistrationConfirm"
@using BlazorSSRSamples
@inject NavigationManager NavigationManager
@message
@if (reg.HasValue)
{
Ihre Daten:
@reg.Name
@reg.EMail
}
@if (regInfo.HasValue)
{
Registriert am:
@regInfo
}
@code {
[CascadingParameter]
public ITempData? TempData { get; set; }
private string? message;
private string? regInfo;
BlazorSSRSamples.RegistrationData? reg { get; set; } = new();
protected override void OnInitialized()
{
message = TempData?.Get("Message") as string ?? "No message";
reg = System.Text.Json.JsonSerializer.Deserialize(TempData?.Get("Reg").ToString());
regInfo = TempData?.Get("regInfo") as string;
}
}
Listing 5: TempData in Blazor-SSR-Seite auslesen
Geplant für kommende Preview-Versionen ist, dass das Auslesen von Daten aus TempData über eine Annotation [SupplyParameterFromTempData], mit der man eine Property annotieren kann, vereinfacht wird, siehe Pull Request.
Weitere Neuerungen in .NET 11.0 Preview 2
Laut den Release Notes von .NET 11.0 Preview 2 gibt es folgende weitere Neuerungen:
- Der in ASP.NET integrierte Webserver Kestrel lehnt nun ungültige Anfragen schneller ab, weil Microsoft intern auf das Auslösen einer
BadHttpRequestExceptionverzichtet und stattdessen eine Struktur zurückgibt. Das verbessert laut Microsoft den Durchsatz um 20 bis 40 Prozent bei Angriffen via Port Scanning oder mit fehlerhaften Anfragen. - .NET-Core-basierte WebAPIs unterstützen jetzt die Open API Specification in der Version 3.2. In .NET 10.0 war es Version 3.1.1.
- Für die Erstellung von Web-Worker-Projekten gibt es nun eine eigene Projektvorlage „.NET Web Worker“ in Visual Studio beziehungsweise an der Kommandozeile:
dotnet new webworker. Dabei entsteht eine DLL, die in Blazor-WebAssembly-basierten Anwendungen genutzt werden kann. - Bei Entity Framework Core kann man nun für SQL Server die dort eingebaute Volltextsuche via Fluent API konfigurieren:
modelBuilder.Entity(b =>
{
b.HasFullTextIndex(e => new { e.Titel, e.Text})
.HasKeyIndex("PK_FullTextEntity")
.HasLanguage("Titel", "German")
.HasLanguage("Text", "German");
});
- Ebenso steht in Entity Framework Core die Vektorsuche mit der SQL-Server-2025-Funktion
VECTOR_SEARCH()via LINQ-OperationVectorSearch()zur Verfügung:
var sqlVector = new SqlVector(EmbeddingsUtil.Get(suchBegriff));
var q = ctx.TexteSet.VectorSearch>(b => b.Embedding, sqlVector, "cosine", topN: 5);
Dabei ist zu beachten, dass man VECTOR_SEARCH() auch in der stabilen Version von SQL Server 2025 erst via SQL-Befehl aktivieren muss
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES ON
und in .NET die Warnung „EP9105“ deaktivieren muss:
#pragma warning disable EF9105 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
- In .NET MAUI wurde das Steuerelement
verbessert. Die Syntax ist nun kompakter.
Außerdem kann man Elemente auf der Karte (Polygon, Polyline, Circle) nun per IsVisible und ZIndex steuern. Zudem gibt es Click()-Ereignisse auf diesen Elementen.
- Auch .NET-MAUI-Anwendungen für Apple-Betriebssysteme (iOS, tvOS und Mac Catalyst) können nun auf der .NET Core Runtime statt Mono laufen. Seit .NET 10.0 war dies experimentell für MAUI-Anwendungen auf Android möglich. Auch die Apple-Implementierung der .NET Core Runtime gilt aber als experimentell. Die Anwendungen werden aktuell durch die Umstellung aber größer und das Debugging ist noch eingeschränkt.
- Die Größe der Container Images von .NET SDK 11.0 Preview 2 ist gegenüber .NET 11.0 Preview 1 um 41 bis 44 MB (bis zu 17 Prozent) verkleinert, da Microsoft nun Hard Links für doppelte Dateien verwendet. Das gilt auch für die Installer für Linux und macOS.

Verkleinerte Docker-Images des .NET 11.0 Software Development Kit
(Bild: Microsoft)
Sonst nichts Neues
Laut den Release Notes von .NET 11.0 Preview 2 gibt es in dieser Vorschauversion keine Neuerungen für die Sprachsyntax von Visual Basic und C# sowie das GUI-Framework Windows Forms. Bei der Windows Presentation Foundation (WPF) gibt es nur einen Bugfix.
Ausblick
.NET 11.0 soll im November 2026 erscheinen und einen Standard-Term Support von zwei Jahren erhalten. Bis dahin können Entwicklerinnen und Entwickler mit fünf weiteren Preview-Versionen von April bis August sowie jeweils einer Release-Candidate-Version im September und Oktober rechnen. heise developer wird jeweils berichten.
(mai)
Entwicklung & Code
Bericht: Nvidia bereitet KI-Agentenplattform „NemoClaw“ vor
Weiterlesen nach der Anzeige
Nvidia folgt dem Hype um den KI-Agenten OpenClaw und entwickelt eine Plattform namens „NemoClaw“ speziell für Unternehmen, berichtet Wired unter Berufung auf mehrere Personen, die mit Nvidias Plänen vertraut sein sollen. Die Plattform soll es Unternehmen ermöglichen, KI-Agenten einzusetzen, die Aufgaben für die eigene Belegschaft übernehmen.
Da es sich um ein Open-Source-Projekt handeln soll, wird der Code nicht nur Unternehmen zur Verfügung stehen. Nvidia will Unternehmenspartnern jedoch zusätzliche Werkzeuge für Sicherheit und Datenschutz bereitstellen, um zentrale Risiken beim Einsatz autonomer KI-Agenten zu reduzieren. Außerdem könnten sie laut Bericht frühzeitig und kostenlos Zugang zu „NemoClaw“ erhalten, wenn sie sich an der Entwicklung beteiligen.
Der Chiphersteller habe „NemoClaw“ bereits bei verschiedenen großen Softwareanbietern beworben. Der Wired-Bericht nennt Salesforce, Cisco, Google, Adobe und CrowdStrike als mögliche Partner. Ob aus den Gesprächen konkrete Kooperationen hervorgegangen sind, sei allerdings noch unklar.
Strategische Öffnung bei Nvidia?
Dem Bericht zufolge sei es wahrscheinlich, dass mögliche Partner die Plattform unabhängig davon nutzen können, ob ihre KI-Agenten auf Nvidia-Chips laufen.
Der Verzicht auf eine Bindung an Nvidia-GPUs ist eher ungewöhnlich für Nvidia. Bisher stützte sich das Softwareökosystem des Konzerns stark auf die proprietäre Plattform CUDA, die Entwickler faktisch an Nvidia-Hardware bindet und dem Unternehmen einen wichtigen Wettbewerbsvorteil verschafft hat.
Der Open-Source-Ansatz ist ebenfalls bemerkenswert, auch wenn es dafür bereits Beispiele gibt: So veröffentlichte Nvidia im Dezember mit Nemotron 3 Nano ein KI-Modell, das fast vollständig Open Source ist.
Weiterlesen nach der Anzeige
„NemoClaw“ könnte ein weiterer Schritt in Richtung Öffnung sein, der womöglich durch den zunehmenden Erfolg offener KI-Modelle motiviert ist. Viele Start-ups und Entwickler nutzen solche frei verfügbaren Modelle, um neue Anwendungen zu testen oder eigene Produkte darauf aufzubauen.
Hinzu kommt, dass große KI-Anbieter zunehmend eigene Chips entwickeln oder entwickeln lassen, um sich langfristig unabhängiger von Nvidia zu machen. In dieses Bild passt auch Nvidias Partnerschaft mit dem Start-up Groq, das sogenannte Inferenz-Chips entwickelt. Diese sind weniger für das Training von KI-Modellen gedacht, als dafür, bereits trainierte KI im Alltag möglichst schnell und energieeffizient antworten zu lassen.
Das Wall Street Journal berichtete kürzlich, dass Nvidia auf der kommenden Entwicklerkonferenz GTC einen eigenen Inferenz-Chip auf Basis eines Groq-Designs vorstellen könnte. Womöglich gibt es dann auch Konkretes zu „NemoClaw“ zu erfahren. Die Konferenz findet vom 16. bis 19. März in San José statt.
OpenClaw zeigt Chancen und Risiken autonomer KI-Agenten
Der KI-Agent OpenClaw sorgte Anfang des Jahres für große Aufmerksamkeit in der KI-Szene. Das Open-Source-Projekt des Entwicklers Peter Steinberger unterscheidet sich deutlich von klassischen KI-Chatbots, die meist nur auf einzelne Eingaben reagieren und Antworten generieren. Der auf einem lokalen Rechner laufende OpenClaw kann dagegen mehrstufige Aufgaben selbstständig ausführen und dabei verschiedene Programme oder Online-Dienste steuern.
Gleichzeitig birgt dieser Ansatz auch Risiken, da die mächtigen KI-Agenten mit weitreichenden Zugriffsrechten potenziell Schaden anrichten können, wenn sie fehlerhaft arbeiten oder manipuliert werden. Die chinesische Cybersicherheitsbehörde hat deshalb erst kürzlich Behörden, Staatsbetrieben sowie Banken davon abgeraten, den KI-Agenten auf Arbeitsgeräten zu installieren. OpenAI nahm Steinberger im Februar unter Vertrag, OpenClaw ist aber weiterhin Open Source.
(tobe)
Entwicklung & Code
Webframework: Astro 6.0 experimentiert mit neuem Rust-Compiler
Das quelloffene JavaScript-Framework Astro hat Version 6.0 erreicht. Darin sind zahlreiche Neuerungen enthalten, unter anderem eine Überarbeitung des Entwicklungsservers und eine integrierte Fonts-API. Die bestehenden Features Live Content Collections und Content-Security-Policy-API sind nun stabil. Als experimentelle Funktion steht ein neuer Rust-Compiler als Nachfolger des Go-basierten Compilers in den Startlöchern.
Weiterlesen nach der Anzeige
(Bild: jaboy/123rf.com)

Tools und Trends in der JavaScript-Welt: Die enterJS 2026 wird am 16. und 17. Juni in Mannheim stattfinden. Das Programm dreht sich rund um JavaScript und TypeScript, Frameworks, Tools und Bibliotheken, Security, UX und mehr. Frühbuchertickets sind im Online-Ticketshop erhältlich.
Rust-Compiler: vom Experiment zum geplanten Standard
Wie das Astro-Team ausführt, begann der neue Rust-Compiler zunächst nur als KI-Experiment. Aber da er sich als schneller und teils sogar zuverlässiger erwiesen hat als der Go-Compiler, soll er in Zukunft zum Standard werden. Interessierte können ihn bereits ausprobieren, indem sie das rustCompiler-Flag aktivieren und das entsprechende Package installieren (npm install @astrojs/compiler-rs). Auch an weiterem Rust-basierten Tooling arbeiten die Astro-Entwickler nach eigenen Angaben bereits.
Neue Fonts-API und stabile Funktionen
In Astro 6.0 finden Entwickler eine integrierte Fonts-API vor. Damit lassen sich Fonts mithilfe lokaler Dateien oder Anbietern wie Google oder Fontsource konfigurieren. Anschließend übernimmt Astro weitere Arbeiten wie das Herunterladen und Caching für Selbst-Hosting oder das Generieren optimierter Fallbacks.
Bereits seit Astro 2.0 sind Content Collections mit an Bord. Damit können Entwicklerinnen und Entwickler Sets an strukturierten Inhalten in Astro-Projekten verwalten, beispielsweise Blogeinträge oder Produktbeschreibungen. Astro kann hierfür mit lokal gespeicherten Daten in den Formaten Markdown, MDX, Markdoc, YAML, TOML oder JSON umgehen. Bisher erforderten Content Collections einen Rebuild, wenn sich Inhalte änderten.
Das gehört dank der nun stabilen Live Content Collections der Vergangenheit an: Sie erfassen den Content zur Request-Zeit und erlauben eine unverzügliche Aktualisierung von Inhalten ohne Rebuild. Astro-Developer können eine Live-Quelle in der Datei src/live.config.ts mittels defineLiveCollection() festlegen. Parallel zu den Live Content Collections lassen sich im gleichen Projekt auch die klassischen Content Collections nutzen.
Weiterlesen nach der Anzeige
Ebenfalls stabil ist ein sicherheitsrelevantes Feature, die Content-Security-Policy-API. Laut dem Astro-Team ist Astro eines der ersten JavaScript-Metaframeworks, die integrierten Support für Content Security Policy (CSP) für statische und dynamische Seiten sowohl in Server- als auch Serverless-Umgebungen bieten.
Cloudflare-Fokus: Update für astro dev
Astros Entwicklungsserver astro dev wurde überarbeitet, um mit Runtimes abseits von Node.js, wie Cloudflares workerd-Laufzeit, zusammenzuspielen. Dazu kommt Vites neue Environment API zum Einsatz. Da der Dev-Server ursprünglich auf Node.js ausgelegt war, konnten Developer unter Verwendung anderer Runtimes wie Cloudflare Workers, Bun oder Deno die eigentliche Produktionslaufzeit bisher nicht während der Entwicklung einsetzen. Nun können sie während der Entwicklung eine benutzerdefinierte Laufzeitumgebung auswählen. Dev-Server und Build-Pipeline verwenden in Astro 6.0 die gleichen Codepfade.
Diese Überarbeitung entspringt der offiziellen Partnerschaft mit dem Unternehmen Cloudflare, das im Herbst letzten Jahres Astro mit 150.000 US-Dollar unterstützte. Im Januar 2026 wurde Astro von Cloudflare übernommen, soll jedoch Open Source bleiben.
Weitere Details zu den Neuerungen in Astro 6.0 lassen sich dem Astro-Blog entnehmen.
Lesen Sie auch
(mai)
-
Künstliche Intelligenzvor 2 MonatenSchnelles Boot statt Bus und Bahn: Was sich von London und New York lernen lässt
-
Social Mediavor 1 WocheCommunity Management und Zielgruppen-Analyse: Die besten Insights aus Blog und Podcast
-
Social Mediavor 4 WochenCommunity Management zwischen Reichweite und Verantwortung
-
Künstliche Intelligenzvor 3 Wochen
Top 10: Die beste kabellose Überwachungskamera im Test – Akku, WLAN, LTE & Solar
-
Künstliche Intelligenzvor 3 MonatenDigital Health: „Den meisten ist nicht klar, wie existenziell IT‑Sicherheit ist“
-
Social Mediavor 3 MonatenDie meistgehörten Gastfolgen 2025 im Feed & Fudder Podcast – Social Media, Recruiting und Karriere-Insights
-
UX/UI & Webdesignvor 1 MonatEindrucksvolle neue Identity für White Ribbon › PAGE online
-
Künstliche Intelligenzvor 3 MonatenEMEC vereint Gezeitenkraft, Batteriespeicher und H₂-Produktion in einer Anlage
