Protobuf Validator
Plak een .proto-schema. Krijg meteen een validatierapport — parse-fouten, dubbele veldnummers, gereserveerde-range-overtredingen en meer.
Invoer (.proto-schema)
Uitvoer (validatierapport)
Wat deze tool doet
Je drukt op opslaan in een Protocol Buffers-bestand, draait protoc of buf, en de build sterft met een onleesbare regel/kolom-fout. Deze validator parst je .proto volgens dezelfde regels die een strenge compiler hanteert en zegt je in begrijpelijke taal wat er mis is — voor je commit en je CI-pipeline het voor je oppikt.
Naast "kan dit überhaupt parsen" doet de tool ook een lint-pass met de checks die de spec daadwerkelijk eist: veldnummers moeten in 1..536870911 liggen, het bereik 19000..19999 is door Google intern gereserveerd, elk veldnummer in een message moet uniek zijn en veldnamen mogen niet herhaald worden. Dit zijn de overtredingen die echte build-failures veroorzaken, en de validator laat ze allemaal in één keer zien in plaats van één-per-één zoals de compiler.
Alles draait in je browser — je .proto, je message-namen en je package-paden verlaten je machine niet. De parser kan om met syntax/package/import-directives, regel- en blokcommentaar, geneste message- en enum-blokken, oneof, map<K, V>, repeated, optional, services (overgeslagen) en field options. Ontworpen voor dezelfde workflow als de officiële proto3-taalgids.
Zo gebruik je het
Drie stappen, draait terwijl je typt. De output-editor ververst ~300 ms nadat je stopt met typen.
Plak je .proto-schema
Drop het schema in de linker editor — één bestand, hoe lang dan ook. syntax = "proto3"; bovenaan mag, maar is optioneel. De parser herkent import-statements (worden overgeslagen — cross-file resolutie valt hier buiten scope; plak geïmporteerde messages inline als je die mee wilt valideren). Alle commentaren worden vóór het parsen weggehaald.
Als je editor bij plakken slimme aanhalingstekens toevoegt, kan de validator een tokenisatiefout aanmerken. Haal ze weg of plak vanuit een platte-tekstbron.
Lees het rapport
Rechts: een groen vinkje als het schema schoon is, anders een lijst met meldingen. Elke melding wijst de exacte message en het exacte veld aan, dus je kunt ze in je editor fixen zonder grep. Het rapport vat ook het aantal messages, het aantal enums en het totaal aantal velden samen.
Fix en plak opnieuw
Pas de fix toe in je editor en plak het bijgewerkte schema. De output revalideert binnen een seconde. Geen reload, geen rebuild, geen wachten tot CI rood teruggeeft. Als het schema schoon is, kopieer het rapport in een PR-comment als je een record van de validatie wilt achterlaten.
Wanneer dit echt tijd scheelt
Fouten vangen voor je naar CI pusht
Je team draait buf lint in CI. Eerst lokaal valideren betekent dat je niet pusht, wacht, rood ziet, fixt en opnieuw pusht — de hele cyclus krimpt tot één browsertab.
Een Protobuf-PR van een collega reviewen
Je reviewt een schema-wijziging maar hebt geen protoc-toolchain lokaal staan. Plak de nieuwe .proto hier, kijk of het structureel klopt, en laat een gerichte review achter in plaats van "ziet er goed uit, ship it".
Migreren van proto2 naar proto3
Oude schemas gebruiken vaak required (weg in proto3) of hebben veldnummers die er prima uitzien tot je ze controleert. De validator markeert duplicaten en out-of-range nummers in één pass, sneller dan 800 regels .proto met de hand doorlezen.
Een gegenereerde .proto van een code-gen tool valideren
Generators (bijv. JSON Schema → Protobuf, OpenAPI → Protobuf) produceren soms schemas met edge-case-fouten — dubbele veldnummers, treffers in het gereserveerde bereik. Pijp de output door de validator voor je hem vertrouwt.
Veelgestelde vragen
Wordt mijn .proto-schema naar een server gestuurd?
Nee. De parser en de lint-checks draaien volledig in je browser als JavaScript. Open DevTools en kijk naar het Network-tabblad terwijl je plakt — nul requests. Handig voor schemas met interne typenamen, package-paden of wat dan ook dat je niet naar een externe validator wilt sturen.
Wat checkt de lint-pass eigenlijk?
Veldnummers moeten in 1..536870911 liggen (exclusief het door Google gereserveerde bereik 19000..19999), elk veldnummer in een message moet uniek zijn en elke veldnaam in een message moet uniek zijn. Alles wat een van deze regels schendt wordt gerapporteerd met het exacte pad message.field. De parse-stap faalt ook op missende puntkomma’s, niet-passende accolades, onverwachte tokens enz.
Valideert het tegen de proto3-spec of proto2?
Het accepteert beide syntaxen (proto3 default-zero, proto2 required/optional qualifiers enz.). De lint-checks zijn spec-defined en gelden voor beide. De strengste checks zoals "geen required in proto3" worden hier niet afgedwongen — protoc zelf vangt die wel.
Waarom wordt mijn veldnummer 19000 gemarkeerd?
Het bereik 19000..19999 is intern door Google gereserveerd voor de Protocol Buffers-implementatie. Als je een veldnummer in dat bereik toekent, wijst echte protoc het schema af. De validator vangt dit vroeg, zodat je het van deze tool hoort en niet van een verwarrende build-melding.
Volgt het imports?
Nee. import-statements worden herkend en overgeslagen — message-types uit andere bestanden lossen op als "unknown" en worden niet gevalideerd. Als je een message moet valideren die afhangt van geïmporteerde types, plak dan ook de geïmporteerde messages in dezelfde invoer.
Hoe groot kan het schema zijn?
Tienduizenden regels gaat zonder problemen. Validatie is lokaal, geen upload, geen rate limit, geen netwerk-roundtrip — plak de hele repo als je wilt, de limiet is je browsergeheugen.
Gerelateerde tools
Als je met Protobuf en JSON werkt, passen deze er goed bij: