Origineel YAML
Gewijzigd YAML

YAML-diff: vergelijk twee YAML-bestanden online

Plak twee YAML-documenten en krijg een nauwkeurige naast-elkaar-diff. Gemaakt voor Kubernetes-manifests, GitHub Actions-workflows, Helm values en docker-compose-bestanden.

Wat is de YAML-diff-tool?

Een gratis tool in de browser om twee YAML-documenten te vergelijken. Plak de oude versie links, de nieuwe rechts, en de verschillen worden teken voor teken gemarkeerd. De tekst verlaat je browser niet, en dat telt wanneer je manifests vergelijkt met verwijzingen naar secrets of interne hostnames.

De diff werkt op tekenniveau, dezelfde engine die onze tekst-diff-tool gebruikt. De YAML-modus van de editor verzorgt de syntax highlighting volgens de YAML 1.2.2-specificatie, dus block scalars, anchors en flow collections krijgen allemaal de juiste kleuren.

Heb je ooit naar een diff van 400 regels in een Helm values.yaml in een pull request gestaard, op zoek naar het ene foute spatie-niveau dat de chart brak, dan vindt deze tool dat in seconden. Hij is ook handig wanneer copy-paste tussen Slack en je editor spaties in tabs verandert, wat YAML resoluut weigert.

Hoe de YAML-diff echt werkt

De diff loopt op tekenniveau, en daarna groepeert een semantische opschoonpas de markeringen tot betekenisvolle blokken in plaats van losse karakters. Toevoegingen zijn groen in het rechterpaneel, verwijderingen rood links, en de tellers in elke koptekst geven aan hoeveel afzonderlijke wijzigingen de diff heeft gevonden.

YAML heeft parseregels die bijten als je het als een vergevingsgezind formaat behandelt. Indentatie is structureel volgens de YAML 1.2.2-spec, dus één verkeerd geplaatste spatie verandert de documentboom. Tabs zijn als indentatie verboden, en de parser wijst ze keihard af. Implicit typing maakt in YAML 1.1 van het token zonder aanhalingstekens NO de booleaanse false, het beruchte Norway problem: lijsten met landcodes verliezen Noorwegen ongemerkt. YAML 1.2 heeft de regels aangescherpt, alleen true, false, null en numerieke vormen worden zonder aanhalingstekens omgezet, maar veel tools parsen nog 1.1.

Heb je je YAML al naar JSON omgezet voor een downstream-consumer, dan regelt onze JSON-diff-tool de structurele zaken zoals sleutelvolgorde en canonicalisatie. JSON is een strikte deelverzameling van YAML 1.2, dus elk geldig JSON-document is ook geldig YAML: die compatibiliteit staat in de spec, en is de reden dat js-yaml en libyaml beide JSON zonder verrassingen kunnen round-trippen.

YAML vergelijken in drie stappen

Twee tekstpanelen, een diff. Geen registratie, geen upload, geen rondje langs de server.

  1. 1

    Plak of upload je YAML

    Plak de oude YAML links, de nieuwe rechts. Of klik aan een van beide kanten op Uploaden om een .yaml- of .yml-bestand direct te laden. De Voorbeeld-knop vult beide panelen met een klein Kubernetes-Deployment, zodat je de tool eerst in actie ziet.

  2. 2

    Controleer of de indentatie klopt met je bedoeling

    YAML gebruikt alleen spaties voor indentatie, nooit tabs. Heb je geplakt vanuit een chatclient of terminal die spaties in tabs heeft veranderd, dan weigert de parser het bestand. De editor markeert tabs en witruimte aan het regeleinde, zodat je ze opmerkt voordat ze een deploy laten falen.

  3. 3

    Lees de diff

    Verwijderingen verschijnen rood links, toevoegingen groen rechts. Beide panelen scrollen mee, zodat je lange manifests kunt volgen zonder de draad te verliezen. De wijzigingstellers in de koppen vatten samen hoeveel afzonderlijke edits de diff heeft gevonden.

Wanneer een YAML-diff de juiste tool is

Kubernetes-Deployment-specs vergelijken tussen staging en prod

Voer kubectl get deployment web -o yaml uit op beide clusters en diff de uitvoer. Vaak staat prod nog op replicas: 2 en een oude image-tag omdat een rollout aan het einde van een sprint daar nooit is aangekomen, en een tekst-diff is de snelste manier om dat te bevestigen voor je kubectl apply opnieuw draait. Het Kubernetes-objectmodel is door en door YAML, dus dit is het dagelijkse geval.

GitHub Actions-workflow-YAML diffen

Wanneer een workflow niet meer afgaat na het hernoemen van een branch of een job ineens 8 minuten langer duurt, diff je .github/workflows/ci.yml tegen de laatste groene commit. De boosdoener is meestal een gewijzigd on:-filter, een verwijderde cache:-sleutel in actions/setup-node, of een matrix-entry die stilletjes van node-version: "18" (string) naar node-version: 18 (number) is gegaan en de type checker heeft laten struikelen.

docker-compose-env-wijzigingen nakijken voor een deploy

Diff docker-compose.yml tegen de versie in main om te checken welke environment:-entries je echt hebt veranderd. Mensen plakken een lijstje nieuwe env-variabelen en vergeten dat een ervan al onder een andere service was gezet, en de override draait dan ergens anders ongemerkt een vlag om. De diff maakt dat duidelijk.

values.yaml van een Helm-chart over releases volgen

Bij een chart-upgrade van 1.8.0 naar 2.0.0 diff je je values.yaml tegen de nieuwe defaults van de maintainer. Helm merget waardes per sleutel, dus een hernoemde top-levelsleutel (image.tag die onder image.repository verhuist) valt stilletjes terug op de chart-default. De diff brengt de hernoeming aan het licht voordat helm upgrade een regressie uitrolt.

OpenAPI- en Swagger-YAML-schemas reviewen

Een diff van een openapi.yaml van 3.000 regels is onleesbaar wanneer een codegenerator de paths alfabetisch herschikt. Zet de versies naast elkaar en de echte wijziging duikt op: een required-veld dat aan een request-schema is toegevoegd, of een response waarvan het type stilzwijgend van string naar integer is gegaan. Makkelijker dan in een gegenereerde SDK gaan graven om te zien waarom de build brak.

Diffs van Ansible-playbooks tussen omgevingen

Werkt een playbook in dev en faalt hij in prod, diff dan de inventory of de defaults/main.yml van de role tussen beide. Een veelvoorkomende oorzaak is een hostvar die nooit is overgezet, of een become: yes die in dev op de role staat maar in prod op een enkele task. De diff vindt dat in seconden.

YAML-spiekbriefje

Een korte spiekbrief voor de parse-randgevallen die deze tool het vaakst aan het licht brengt. Alles is gebaseerd op de YAML-specificatie en het echte gedrag van parsers.

TopicWhat this tool does
IndentatieAlleen spaties, en het aantal is structureel. Twee en vier spaties zijn allebei gebruikelijk; kies er een per bestand en houd je daaraan. De YAML-pagina op Wikipedia geeft een goede samenvatting van de geschiedenis.
TabsVolgens de spec verboden als indentatie. Toegestaan binnen scalar-waardes. Voegt je editor bij Enter een tab in, stel hem dan in op spaties voor .yaml- en .yml-bestanden.
Anchors en aliases&name definieert een anchor; *name verwijst ernaar. Handig om grote blokken zoals container-env-variabelen of standaard-service-config te herhalen zonder copy-paste.
Merge keys<<: *base mergt het aangewezen mapping in het huidige. Een YAML 1.1-feature. De meeste parsers, waaronder libyaml, accepteren het nog; de YAML 1.2-spec heeft het laten vallen.
Multi-document-bestandenDrie streepjes (---) scheiden documenten in een stream. Handig om meerdere Kubernetes-objecten via een kubectl apply -f erdoor te jagen. ... sluit een document af.
Block scalars| behoudt regelovergangen (literal); > vouwt ze tot spaties. Modifiers - en + regelen de afsluitende regelovergangen. Gebruik | voor shell-scripts en > voor lange prozateksten.
Norway problemZonder aanhalingstekens worden NO, YES, ON, OFF in YAML 1.1 booleans. Zet ze tussen aanhalingstekens of gebruik een 1.2-parser. Zie de YAML-type-definities voor de strings die worden omgezet.
CoderingDe YAML 1.2-spec vereist UTF-8. UTF-16 is met BOM toegestaan. In de praktijk verwachten tools UTF-8 zonder BOM, dus sla je bestanden zo op om verrassingen te vermijden.

YAML-diff: veelgestelde vragen

Helpt of schaadt YAMLs gevoeligheid voor witruimte de diff?

YAML is gevoelig voor witruimte, dus een gewone tekst-diff is al nuttig: elke wijziging in indentatie is een structurele wijziging, en de diff vangt die op. Het verschil zit in de presentatie. De YAML-modus kleurt anchors, tags, block scalars en flow collections met de syntaxiskleuren, dus je ziet in een oogopslag of een wijziging op een sleutel, een string-waarde of een lijst-element zit. Het diff-algoritme onder de motorkap is hetzelfde als bij onze tekst-diff-tool.

Waarom is YAML zo precies met indentatie en spaties?

Omdat de indentatie het enige is dat de parser vertelt welke sleutels bij welke mapping horen. De YAML 1.2.2-spec definieert het indentatieniveau van een node aan de hand van het aantal voorloopspaties en verbiedt tabs als indentatie. Een extra spatie promoveert een sleutel in een sub-mapping. Die strengheid is de prijs van een formaat zonder accolades en kommas, en de reden dat je vaker indentatiebugs ziet in YAML dan in JSON.

Wat is het Norway problem?

De implicit typing van YAML 1.1 maakt van het token zonder aanhalingstekens NO de booleaanse false. Een lijst landcodes met NO voor Noorwegen wordt zo stilletjes een lijst waarin een entry door false is vervangen. Hetzelfde geldt voor YES, ON, OFF en consorten. StrictYAML beschrijft dit uitgebreid. De oplossing is de waarde tussen aanhalingstekens zetten ("NO") of een parser gebruiken die YAML 1.2 volgt; die zet alleen true, false en null impliciet om.

Hoe werken anchors, aliases en merge keys?

Een anchor (&name) markeert een node, zodat je hem later met een alias (*name) kunt aanwijzen, wat herhaling in lange bestanden voorkomt. De merge key (<<: *name) was een YAML 1.1-uitbreiding die alle sleutels uit het aangewezen mapping in het huidige kopieert, handig voor gedeelde configuratie tussen services. Merge keys horen niet bij YAML 1.2, maar de meeste parsers, waaronder js-yaml, accepteren ze nog uit compatibiliteit. De diff behandelt anchors en aliases als platte tekst, dus een hernoemde anchor staat netjes in beeld.

Mag ik JSON in de YAML-diff-tool plakken?

Ja. JSON is een strikte deelverzameling van YAML 1.2, dus elk geldig JSON-document is ook een geldig YAML-document. Je kunt beide mengen als je dat echt wilt, en een flow collection in JSON-stijl in een blokstijl-bestand zetten. Voor puur JSON-werk heeft onze JSON-diff-tool opmaak- en validatieknoppen die JSON kennen, inclusief pretty-print en sort-keys.

Waarom weigert de parser mijn bestand als ik tabs gebruik?

Omdat de YAML-spec tabs als indentatie verbiedt. Uit de 1.2.2-spec: "To maintain portability, tab characters must not be used in indentation." Tabs mogen wel binnen scalar-waardes (een string mag een tab bevatten), alleen niet aan het begin van een regel waar de indentatie wordt gemeten. De oplossing is een snelle zoek-en-vervang van tab naar twee of vier spaties, afhankelijk van de conventie die je bestand al volgt.

Privacy en hoe dit werkt

Je YAML verlaat je browser niet. De editor, syntax highlighter en diff draaien allemaal lokaal op je machine. Geen analytics op je invoer, geen logs, geen rondje cloud. Het formaat dat we volgen is de YAML 1.2.2-specificatie. Om te bevestigen dat er niets wordt geuploaded, open de DevTools en houd het Network-tabblad in de gaten terwijl je vergelijkt.