Ga naar hoofdinhoud
50% korting alle plannen, beperkte tijd. Vanaf $2.48/mo
13 min left
Developer-tools en DevOps

Self-Hosted Visual Regression Testing: BackstopJS vs. Argos (and What Happened to Lost Pixel)

M Door Matej 13 min leestijd
Comparison of self-hosted visual regression testing tools BackstopJS, Argos, and the archived Lost Pixel.

Stel je voor dat je je CI standaardiseert op een van de drie open source tools voor visuele regressietests die iedereen op de shortlist zet (BackstopJS, Argos, Lost Pixel) en een week na de start van het onderzoek ontdekt dat twee van de drie niet zijn wat ze van buitenaf leken. Argos heeft uitstekende code op GitHub, maar de maintainer zegt onomwonden dat self-hosting niet ondersteund en niet gedocumenteerd is. Lost Pixel werd op 22 april 2026 gearchiveerd, toen het team bij Figma ging werken, en leverde geen migratiepad voor de teams die het al gebruikten.

Dan blijft er precies één van de drie over die vandaag echt self-hostbaar en onderhouden is. Wat een vreemde uitspraak is over een categorie met zoveel schijnbare keuze, maar zo ligt het landschap er werkelijk bij. De tools die mensen als drie gelijken behandelen, zijn in de praktijk één werkende self-hosted optie, één sterke tool die op andermans servers draait, en één waar je weg zou moeten migreren.

Dit is een self-hosting-eerst blik op de self-hosted tools voor visuele regressietests die het contact met de realiteit overleven: welke bij welke beperking past, en wat je moet doen als je nu op Lost Pixel zit.

De korte versie

  • BackstopJS is de self-hostbare, onderhouden, MIT-gelicentieerde optie zonder kosten. Puppeteer standaard met Playwright-ondersteuning, pixel-diffing via Resemble.js en een HTML-review-UI (met voorbehouden bij het renderen in Docker die je moet inplannen).
  • Argos is de sterkere tool qua workflow (PR-review en ARIA-snapshot-diffing sinds eind 2025), maar het is in de praktijk een beheerde SaaS. De maintainer biedt geen ondersteuning of documentatie om het zelf te draaien.
  • Lost Pixel werd in april 2026 gearchiveerd. Zet het niet in voor nieuw werk, en als je het gebruikt, plan je migratie nu.

Het oordeel in één regel: voor een volledig self-hosted CI-pipeline is BackstopJS de praktische keuze. Wil je de beste review-workflow en kun je een SaaS-afhankelijkheid accepteren, dan is Argos de betere tool.

(Wat dit niet behandelt: Cypress-gebaseerde visuele tests, Storybook-specifieke component-workflows en zelf gemeten prestatiecijfers. Deze vergelijking is opgebouwd uit feiten uit primaire bronnen, niet uit een testopstelling die ik zelf heb gedraaid.)

Het landschap van self-hosted visuele regressietests is veranderd

Twee concrete gebeurtenissen in het afgelopen jaar hebben deze shortlist hervormd, en beide zijn makkelijk te missen als je uitgaat van een lijstje dat vóór hen is geschreven.

Het eerste: in een GitHub-discussie van september 2025verklaarde een Argos-maintainer dat Argos geen ondersteuning of documentatie biedt om het buiten de beheerde dienst te draaien. De code is MIT-gelicentieerd en ligt open, dus "je kunt het zelf hosten" klopt technisch, maar er is geen ondersteund pad, een onderscheid dat enorm belangrijk wordt zodra jij degene met piket bent.

Het tweede: de Lost Pixel-repository werd gearchiveerd op 22 april 2026, alleen-lezen, toen het team aankondigde dat het bij Figma ging werken. Geen migratiegids vergezelde de stopzetting. Een tool die tot voor kort een legitiem gratis self-hosted alternatief voor Percy en Chromatic was, is nu een afhankelijkheid zonder maintainer.

Beide veranderingen wijzen dezelfde kant op. De reden dat teams hier überhaupt belanden, SaaS-prijzen die groeien met browsers maal viewports maal pagina's, of een compliance-regel tegen het uploaden van screenshots van niet-uitgebrachte UI naar een derde, is niet verdwenen. Wat wél is veranderd, is dat het self-hosted menu korter is dan het lijkt.

Kernpunt van deze sectie: slechts één van de drie tools die mensen op de shortlist zetten is vandaag echt self-hostbaar en wordt actief onderhouden.

Timeline showing the self-hosted visual regression landscape in 2025-2026: BackstopJS remains maintained and self-hosted, Argos shifts to SaaS-only in practice, and Lost Pixel is archived and read-only.

BackstopJS: de echt self-hostbare optie

De installatie is npm install -g backstopjs (of een lokale projectinstallatie), en dat ene feit verklaart grotendeels waarom BackstopJS wint op de self-hosting-as: er is geen dienst om te reverse-engineeren, geen beheerde backend waar het stiekem van afhangt. Het draait als npm-pakket of Docker-container op infrastructuur die je zelf beheert, onder MIT-licentie, zonder licentiekosten. De README vermeldt dat de huidige lijn (6.3.x) Node 20 ondersteunt.

Onder de motorkap stuurt het standaard Puppeteer aan (headless Chrome) en ondersteunt het ook Playwright over chromium, firefox en webkit. Het diffing is pixelgebaseerd via Resemble.js, met een instelbare waarde misMatchThreshold die bepaalt hoeveel pixelafwijking als een fout telt. Goedkeuringen gebeuren via een HTML-rapport met een in-browser-UI om wijzigingen te accepteren.

De beperkingen zijn het punt waarop een strategische beslissing valt. BackstopJS heeft geen ingebouwde PR-blokkerende workflow: het vertelt je dat er een diff is, maar dat koppelen aan een "deze PR mag niet gemerged worden"-poort is aan jou. De configuratie leeft in JSON, één scenario per keer, en bij een paar honderd testgevallen wordt dat JSON zelf een onderhoudsoppervlak. De ontwikkeling is eerder traag dan snel: het project is niet gearchiveerd, het pakket staat momenteel op versie 6.3.25, en de repository toont ongeveer 7.200 GitHub-sterren en 516 open issues. Behandel BackstopJS dus als volwassen en bruikbaar, niet als een snel evoluerend platform voor visuele tests.

Het scherpste operationele risico is het renderen in Docker. Twee issues, witte of afgekapte screenshots in Docker (#1156) en inconsistente resultaten na de Docker-upgrade naar v5.3.0 (#1303), staan al jaren onopgelost open. Docker is bovendien precies wat je voor CI wilt, omdat het het renderen tussen machines normaliseert. Zo geeft de tool die je de meeste controle geeft je ook een bekende, onopgeloste klasse van instabiliteit in precies de opstelling waarin je het gaat draaien. Dat is een planbaar risico, geen dealbreaker, maar het hoort op tafel voordat je je vastlegt.

Pro-tip: de baseline-val tussen besturingssystemen. Als je ontwikkelaars baselines op macOS vastleggen en je CI-runners Linux zijn, falen je tests alleen al door verschillen in font-anti-aliasing, nog voordat er een echte regressie bestaat. Zoals een vakman heeft gedocumenteerd, verschilt het renderen van fonts tussen het Linux-image dat CI-diensten gebruiken en een lokale macOS-machine, genoeg om een visuele test op zichzelf te laten falen. De oplossing is om baselines in één omgeving te genereren en te vergelijken (draai BackstopJS lokaal in hetzelfde Docker-image dat je in CI gebruikt), zodat de referentie- en vergelijkingsafbeeldingen uit identiek renderen komen.

Argos: de beste workflow, maar in de praktijk SaaS

Argos raakt de review-ervaring op een manier die BackstopJS niet lukt, en dat is de hele reden dat het ondanks het self-hosting-voorbehoud op deze lijst staat. Het integreert met Playwright, Cypress, Storybook, WebdriverIO en Puppeteer, en koppelt aan GitHub Actions, GitLab CI, Bitbucket en Azure DevOps. De PR-review-workflow is een eersteklas productvlak, en het is blijven bewegen. Recente changelog-vermeldingen voegen collaboratieve reviews met vastgepinde opmerkingen toe (juni 2026) en het automatisch negeren van onstabiele wijzigingen.

Zijn interessantste technische onderscheider is het diffing. Bovenop het deterministische pixel-diffing voegde Argos ARIA-snapshot-diffing voor zijn Playwright-SDK toe op 4 november 2025. ARIA-snapshot-diffing vergelijkt de accessibility-boom (rollen, labels en structuur) naast de pixel-screenshot, wat een klasse semantische en accessibility-regressies opvangt die een puur pixel-diff kan missen (een knop die er nog identiek uitziet maar zijn toegankelijke label heeft verloren, bijvoorbeeld). Voor teams met accessibility-verplichtingen is dat een echte mogelijkheid die de alleen-pixel-tools niet bieden.

Dan de beperking. De code is MIT, maar het product is de beheerde dienst, en de maintainer is er expliciet over geweest dat self-hosting niet gedocumenteerd en niet ondersteund is. Je kunt het vanuit de broncode opzetten. Je doet het alleen in de wetenschap dat elke stroomopwaartse wijziging je deployment kan breken en niemand verplicht is te helpen. Er is een verwante onzekerheid die je beter kunt benoemen dan beweren: community-meldingen suggereren dat integratie met GitLab Self-Managed een Enterprise-plan verwacht (ik behandel dat als een community-signaal, niet als een bevestigde specificatie, dus verifieer het aan je eigen opstelling voordat het een beslissing stuurt).

Dit levert een oncomfortabel gat op. Een team met strikte privacyvereisten (precies het team dat het meest gemotiveerd is om zelf te hosten) dat ook de Argos-review-ervaring wil, heeft geen goed pad. Ze kunnen de beheerde dienst gebruiken en de afhankelijkheid van een derde accepteren, of zonder ondersteuning zelf hosten, of een andere tool kiezen. Er is geen schone vierde deur, en het is eerlijker dat te benoemen dan te doen alsof de open source-licentie hem sluit.

Kernpunt van deze sectie: Argos is de sterkere tool. Het zelf hosten is niet ondersteund en operationeel fragiel.

Lost Pixel: gearchiveerd, en wat te doen als je het gebruikt

De eigen banner van de Lost Pixel-repository is het hele verhaal in één regel: de repository werd op 22 april 2026 door de eigenaar gearchiveerd en is nu alleen-lezen. Het team ging bij Figma werken, de laatste release was v3.22.0 in november 2024, en er is geen migratiegids gepubliceerd.

Tot de archivering was Lost Pixel een redelijke keuze (Docker-gebaseerd renderen, ondersteuning voor Playwright en Storybook plus Ladle en Histoire, en zowel volledige-pagina- als component-niveau visuele tests). Niets daarvan veranderde technisch op 22 april. Wat veranderde, is dat het nu geen maintainer, geen beveiligingspatches en geen roadmap heeft, wat voor een CI-afhankelijkheid diskwalificerend is voor nieuw werk, hoe goed de huidige versie ook draait.

Als je het vandaag gebruikt, splitst de migratie zich op naar hoe je het gebruikte. Als je op de component-niveau tests leunde, vooral Storybook- of Ladle-workflows, is je dichtstbijzijnde vervanging de beheerde Argos-dienst of Playwrights native screenshot-tests. BackstopJS kan selectors of Storybook-URL's vastleggen, maar geeft je niet dezelfde ingebouwde component-workflow als Lost Pixel, dus zou je die componenttoestanden zelf moeten modelleren. Als je het voor volledige-pagina visuele regressie gebruikte, is BackstopJS de directe self-hosted opvolger. Hoe dan ook is de overstap niet dringend in de zin van "je builds breken morgen", maar de klok tikt: een niet-onderhouden testtool rot stilletjes weg terwijl de versies van je browser, besturingssysteem en framework wegdrijven van die waartegen het voor het laatst is gebouwd.

Vergelijking in één oogopslag

Hier dezelfde informatie naast elkaar, zodat je de assen die voor een CI-beslissing tellen kunt overlopen voordat je ze op je eigen beperkingen legt.

AsBackstopJSArgosLost Pixel
LicentieMITMIT-code, beheerd SaaS-productMIT
Realiteit van self-hostingVolledig self-hostbaar door ontwerpMogelijk maar zonder ondersteuning en zonder documentatieWas self-hostbaar, nu gearchiveerd
OnderhoudsstatusOnderhouden, traag en volwassenActief (beheerde dienst)Gearchiveerd op 22 april 2026
Diffing-aanpakPixel-diff (Resemble.js)Pixel-diff plus ARIA-snapshot-diffPixel-diff (niet onderhouden)
Framework- en engine-ondersteuningPuppeteer (standaard), PlaywrightPlaywright, Cypress, Storybook, WebdriverIO, PuppeteerPlaywright, Storybook, Ladle, Histoire (op het moment van archivering)
Review-workflowHTML-rapport, handmatig goedkeuren, geen PR-poortPR-review, collaboratieve opmerkingen, PR-gatingNiet van toepassing (gearchiveerd)
KostenGratisSaaS-prijzen (snapshot-gebaseerd)Gratis maar niet onderhouden
Side-by-side comparison of BackstopJS, Argos, and Lost Pixel across self-hosting, maintenance, diffing, review workflow, and cost.

Hoe te kiezen (beslissingskader)

Begin bij je hardste beperking, niet bij een functielijst. De beperking schrapt het grootste deel van het menu voor je.

  • Volledig self-hosted, nul budget, en je kunt tests accepteren die alleen volledige pagina met handmatige review zijn: BackstopJS. Het is de enige optie die self-hosted, onderhouden en gratis tegelijk vervult, en de afwegingen (geen PR-poort, JSON-configuratie, Docker-instabiliteit) zijn bekende grootheden waaromheen je kunt ontwerpen.
  • Je wilt de beste review-ervaring, PR-gating en ARIA-diffing, en je kunt een SaaS-afhankelijkheid accepteren: de beheerde Argos-dienst. Dit is het pad naar de sterke punten van Argos zonder het risico van niet-ondersteund self-hosting. Als een compliance-regel het uploaden van screenshots naar derden verbiedt, is deze deur dicht en ben je terug bij BackstopJS.
  • Kleine testsuite of Playwright-first: overweeg helemaal geen speciale tool toe te voegen. Playwright bevat toHaveScreenshot() native, en voor suites onder ongeveer 100 tests is het misschien alles wat je nodig hebt. Eén vakmansgids legt het omslagpunt waarop een speciale tool zich begint terug te betalen rond die schaal (behandel dat als een branche-observatie, niet als een officieel Playwright-getal). De beheerlast van baseline-bestanden in git groeit voorbij dat punt, en daar betaalt een speciale tool zich terug.
  • Momenteel op Lost Pixel: migreer nu, volgens de opsplitsing in de vorige sectie. Neem "het werkt nog" niet als reden om te blijven.

Een voorbehoud dat aan al deze tools voorafgaat en ze overleeft: het Sparkbox-team, dat jaren geleden schreef, koos bewust een gehoste optie omdat ingenieurs daadwerkelijk de tests laten gebruiken moeilijker was dan de opzet. Een self-hosted tool met een zwakkere review-UI kan winnen op kosten en verliezen op adoptie (als je team een luidruchtig BackstopJS-rapport negeert, heeft de nulkosten-licentie je niets opgeleverd). Weeg de review-ervaring mee in de beslissing, niet alleen de prijs.

Kernpunt van deze sectie: de beperking kiest de tool. Self-hosted en gratis wijst naar BackstopJS, beste workflow met acceptabele SaaS wijst naar Argos, en klein en Playwright-first wijst misschien naar helemaal geen tool.

De CI-runner voor headless Chromium dimensioneren

Alle drie de tools sturen headless Chromium aan, en het is de geheugenvoetafdruk van Chromium (niet de CPU) die de grootte van je runner bepaalt, omdat elke gelijktijdige browser-worker zijn eigen paar gigabyte RAM wil. Dimensioneer je de machine te klein, dan falen je visuele tests niet netjes. Ze worden halverwege de run door OOM afgeschoten en gerapporteerd als onstabiele infrastructuurruis, het ergste soort fout om te debuggen.

Als ruwe richtlijn, gedimensioneerd op parallelisme in plaats van als harde cijfers (het werkelijke gebruik hangt af van de paginacomplexiteit en van hoeveel workers je parallel draait):

  • Klein team of seriële tests: ongeveer 2 vCPU / 4 GB RAM verwerkt één enkele headless-Chromium-worker met CI-daemon-overhead.
  • CI-gebruik in teamverband: ongeveer 4 vCPU / 8 GB RAM ondersteunt ruwweg 2 tot 4 parallelle browser-workers, waar de meeste teams belanden.
  • Hoge doorvoer of grote suites: ongeveer 8 vCPU / 16 GB RAM voor hoge parallelliteit, of wanneer de visuele-regressie-run een runner deelt met ander CI-werk.

Opslag is de stille post. Screenshot-artefacten en historische baselines stapelen zich run na run op, dus plan voor die groei: reserveer royale opslagruimte als je baselines lokaal bewaart, of duw baselines en artefacten naar objectopslag zodat de schijf van de runner niet de beperking is.

Een VPS is de natuurlijke host voor een self-hosted CI-runner die dit doet, omdat je voorspelbaar, toegewijd RAM wilt voor de Chromium-workers, en een homelab-machine alleen zin heeft als de hardware er al staat. Als je ook de omringende CI-stack opzet, zijn de onderdelen rond de visuele-testtool één-klik-deployments in de Cloudzy-marketplace: Gitea, GitLab, Jenkins en Forgejo voor de CI-forge, en Docker voor de rendering-consistentie die de tools nodig hebben. De visuele-regressietool zelf installeer je erbovenop via npm of Docker, dus zet een Linux VPS op, gedimensioneerd volgens de bereiken hierboven, en draai het daar. Als je Docker-gebaseerde CI opzet, behandelen de Cloudzy-gidsen over self-hosted GitLab-alternatieven en Docker-containers opsommen de aangrenzende opzet.

CI runner sizing for headless Chromium across three tiers: 2 vCPU / 4 GB for serial tests, 4 vCPU / 8 GB for 2 to 4 parallel workers, and 8 vCPU / 16 GB for large suites, with storage headroom for baselines.

Veelgestelde vragen

Is Argos self-hostbaar?

Technisch wel (de code is MIT-gelicentieerd), maar de maintainer verklaarde in september 2025 dat Argos geen ondersteuning of documentatie biedt om het buiten de beheerde dienst te draaien. Behandel self-hosting als niet ondersteund en operationeel fragiel: het kan breken bij elke stroomopwaartse wijziging zonder dat een maintainer verplicht is te helpen. Voor de meeste teams is de beheerde dienst de praktische manier om de voordelen van Argos te krijgen.

Wat is er met Lost Pixel gebeurd?

Lost Pixel werd op 22 april 2026 gearchiveerd, toen het team bij Figma ging werken en het product stopzette. De repository is alleen-lezen, de laatste release was v3.22.0 in november 2024, en er is geen migratiegids verstrekt. Zet het niet in voor nieuw werk. Als je het gebruikt, plan een migratie naar BackstopJS (volledige-pagina tests) of naar Argos en Playwright-native (componenttests).

Wat is ARIA-snapshot-diffing?

ARIA-snapshot-diffing vergelijkt de accessibility-boom (rollen, labels en structuur) naast de pixel-screenshot en vangt semantische en accessibility-regressies op die een pixel-diff alleen kan missen, zoals een visueel identieke knop die zijn toegankelijke label heeft verloren. Argos voegde de functie toe op 4 november 2025.

Hoeveel RAM heeft headless Chromium nodig in CI?

Eén enkele seriële worker draait doorgaans op ongeveer 2 tot 4 GB, en gelijktijdige workers schalen het RAM van daaruit ruwweg lineair. Het werkelijke gebruik hangt af van de paginacomplexiteit en van hoeveel browser-instanties je parallel draait, dus behandel deze getallen als richtlijnen in plaats van harde cijfers en laat marge om door OOM afgeschoten testruns te vermijden.

Ondersteunt BackstopJS Playwright?

Ja. Puppeteer is de standaard-engine (headless Chrome), en BackstopJS ondersteunt ook Playwright over chromium, firefox en webkit. De engine selecteer je in je configuratie.

Delen

Meer van de blog

Blijf lezen.

Klaar om uit te rollen? Vanaf $2,48/mnd.

Onafhankelijke cloud, sinds 2008. AMD EPYC, NVMe, 40 Gbps. 14 dagen niet-goed-geld-terug.