{"id":39921,"date":"2021-09-09T11:33:53","date_gmt":"2021-09-09T09:33:53","guid":{"rendered":"https:\/\/kinsta.com\/?p=100242"},"modified":"2023-09-12T10:09:21","modified_gmt":"2023-09-12T08:09:21","slug":"monorepo-vs-multi-repo","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/","title":{"rendered":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories"},"content":{"rendered":"<p>Er zijn twee hoofdstrategie\u00ebn voor het <a href=\"https:\/\/kinsta.com\/nl\/prijzen\/\">hosten<\/a> en beheren van code via Git: mono-repo en multi-repo. Ze hebben allebei voordelen en nadelen.<\/p>\n<p>Beide strategie\u00ebn zijn te gebruiken voor codebases in alle programmeertalen. Je kan beide strategie\u00ebn toepassen voor projecten die maar een paar <a href=\"https:\/\/kinsta.com\/nl\/blog\/javascript-bibliotheken\/\">libraries<\/a> gebruiken of juist duizenden. Zelfs of het nou gaat om een paar teamleden of complete afdelingen, en of je priv\u00e9 host of een open source aanpak kiest, dan kan je nog steeds kiezen tussen multi-repo en mono-repo.<\/p>\n<p>Dus wat zijn precies de voordelen en nadelen van beide aanpakken? Wanneer moeten we de ene of juist de andere gebruiken? Laten we daar snel achter komen!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Wat zijn repos?<\/h2>\n<p>Een repo (de afkorting van repository, oftewel een verzamelplek) is een opslagplek voor alle veranderingen, versies en bestanden van een project, waardoor developers &#8220;versiebeheer&#8221; kunnen uitvoeren op alle onderdelen van een project tijdens de ontwikkeling.<\/p>\n<p>We refereren meestal aan <a href=\"https:\/\/kinsta.com\/nl\/docs\/wordpress-hosting\/sitebeheer\/git\/\">Git<\/a>\u00a0repositories (zoals aangeboden door\u00a0<a href=\"https:\/\/kinsta.com\/nl\/blog\/git-vs-github\/\">GitHub<\/a>,\u00a0<a href=\"https:\/\/kinsta.com\/nl\/blog\/gitlab-en-github\/\">GitLab<\/a>, of\u00a0<a href=\"https:\/\/kinsta.com\/nl\/blog\/bitbucket-vs-github\/\">Bitbucket<\/a>), maar het concept is ook toe te passen op andere versiebeheersystemen (bijvoorbeeld Mercurial).<\/p>\n\n<h2>Wat is een mono-repo?<\/h2>\n<p>De route van een mono-repo gebruikt een enkele <a href=\"https:\/\/kinsta.com\/nl\/blog\/bitbucket-vs-github\/\">repository<\/a> voor alle code van meerdere libraries of diensten waaruit een project of meerdere projecten bestaan. Als je het volledig doorvoert kan de hele codebase van een bedrijf, met verschillende projecten en programmeertalen, zelfs gehost worden in \u00e9\u00e9n enkele repository.<\/p>\n<h2>Voordelen van een mono-repo<\/h2>\n<p>Het hosten van een gehele codebase in \u00e9\u00e9n repository heeft de onderstaande voordelen.<\/p>\n<h3>Lagere drempels om te beginnen<\/h3>\n<p>Wanneer nieuwe medewerkers beginnen te werken voor een bedrijf, moeten ze de code downloaden en de vereiste tools installeren om aan de slag te kunnen. Stel dat het project verdeeld is over verschillende repositories, allemaal met eigen instructies voor het installeren en vereiste tools. In dat geval zal de eerste installatie nogal complex worden, en meestal zal de documentatie ook niet helemaal compleet zijn, waardoor de nieuwe teamleden hulp moeten vragen aan collega&#8217;s.<\/p>\n<p>Een mono-repo vereenvoudigt dit allemaal. Aangezien er maar \u00e9\u00e9n locatie is waar alle code en <a href=\"https:\/\/kinsta.com\/nl\/docs\/devkinsta\/\">documentatie<\/a> staat, kan je de start van nieuwe leden eenvoudiger maken.<\/p>\n<h3>Centraal codebeheer<\/h3>\n<p>Door maar \u00e9\u00e9n repository te gebruiken zien alle developers in principe alle code. Dit vereenvoudigt het beheer van code aangezien we een enkele issue tracker kunnen gebruiken voor het bijhouden van alle problemen in de hele levenscyclus van een toepassing.<\/p>\n<p>Deze voordelen zijn waardevol wanneer een probleem te maken heeft met meerdere onderliggende libraries, waarbij de bug in de afhankelijke library zit. Met meerdere repositories kan het nogal uitdagend worden om het <a href=\"https:\/\/kinsta.com\/nl\/blog\/inspect-element\/\">precieze stukje code<\/a> te vinden waar het probleem vandaan komt.<\/p>\n<p>Daarnaast zouden we moeten uitvogelen welke repository we moeten gebruiken om het probleem op te gaan lossen, en vervolgens alle andere teamleden daarvoor uit te nodigen.<\/p>\n<p>Maar met een mono-repo is het lokaliseren van problemen in de code en het samenwerken aan een oplossing veel eenvoudiger.<\/p>\n<h3>Eenvoudig refactoren van complete toepassingen<\/h3>\n<p>Wanneer je de complete code van een hele toepassing gaat refactoren, zullen daar meerdere libraries bij betrokken worden. Als je die op verschillende repositories hebt staan, zal het beheren van alle verschillende pull-request en ze allemaal gesynchroniseerd houden een flinke uitdaging worden.<\/p>\n<p>Een mono-repo maakt het makkelijker om alle wijzigingen in alle code te synchroniseren en alles in \u00e9\u00e9n pull request te versturen.<\/p>\n<h3>Gerelateerde functies gaan minder snel kapot<\/h3>\n<p>Met een mono-repo kunnen we de tests voor alle libraries uitvoeren, elke keer wanneer er maar \u00e9\u00e9n library aangepast wordt. Daardoor is de kans veel kleiner dat je een verandering maakt waarvan later blijkt dat het een probleem oplevert in andere libraries.<\/p>\n<h3>Teams delen dezelfde developmentcultuur<\/h3>\n<p>Met een mono-repo aanpak is het bijna onmogelijk dat er verschillende subculturen ontstaan onder verschillende teams. Aangezien ze allemaal dezelfde repository gebruiken, zullen ze ook meestal dezelfde <a href=\"https:\/\/kinsta.com\/nl\/blog\/beste-programmeertaal-om-te-leren\/\">programmeermethoden<\/a> en beheerstrategie\u00ebn gebruiken en ook dezelfde <a href=\"https:\/\/kinsta.com\/nl\/blog\/apm-tools\/\">developmenttools<\/a>.<\/p>\n<h2>Nadelen van een aanpak met een mono-repo<\/h2>\n<p>Het gebruiken van \u00e9\u00e9n repository voor alle code heeft natuurlijk ook nadelen.<\/p>\n<h3>Tragere developmentcyclus<\/h3>\n<p>Wanneer de code voor een library blokkerende veranderingen bevat, waardoor ook de tests voor gerelateerde libraries vastlopen, zal de code eerst overal gecorrigeerd moeten worden voordat wijzigingen doorgevoerd kunnen worden.<\/p>\n<p>Als deze libraries door andere teams gemaakt worden, die met eigen prioriteiten bezig zijn en daardoor moeite hebben om hun code aan te passen om jouw problematische wijzigingen te accommoderen zodat alle tests lukken, kan de ontwikkeling van een nieuwe feature vertraging oplopen.<\/p>\n<p>Daarmee loop je zo het risico dat het hele project zo snel gaat als het traagste team. Dit kan erg frustrerend zijn voor snellere teams, wat nogal demotiverend is.<\/p>\n<p>Daarnaast moet een library ook de tests voor alle andere libraries uitvoeren. Hoe <a href=\"https:\/\/kinsta.com\/nl\/blog\/snelheidstest-website\/\">meer tests je moet uitvoeren<\/a>, hoe langer ze duren, en hoe minder snel je een cyclus kan afronden.<\/p>\n<h3>Vereist downloaden van gehele codebase<\/h3>\n<p>Doordat de mono-repo alle code van de organisatie bevat, kan dit een enorme structuur opleveren, van vele gigabytes. Wanneer iemand aan een onderliggende library wil werken, zullen ze de hele repository moeten downloaden.<\/p>\n<p>Het werken met een grote codebase levert een ineffici\u00ebnt gebruik van opslagruimte op, en betekent ook dat je er minder snel mee kan werken. Zo worden alledaagse acties zoals bijvoorbeeld het uitvoeren van <code>git status<\/code> of zoeken in de codebase met een regex erg traag, waardoor ze wel minuten langer kunnen duren dan wanneer je een opgesplitste codebase had.<\/p>\n<h3>Er worden nieuwe versies aangemaakt van onveranderde libraries<\/h3>\n<p>Wanneer we de mono-repo <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-tags\/\">taggen<\/a>, krijgt alle onderliggende code een nieuwe tag toegewezen. Als deze actie een nieuwe release veroorzaakt, zullen alle libraries die in de repository gehost worden gereleased worden met het versienummer van de tag, ook al zullen veel van de libraries helemaal geen wijzigingen hebben gehad.<\/p>\n<h3>Forken wordt moeilijker<\/h3>\n<p>Open source projecten moeten het zo makkelijk mogelijk maken voor bijdragers om met het project mee te doen. Met meerdere repositories kunnen ze meteen naar het specifieke onderdeel van een project gaan waar ze aan willen bijdragen. Maar wanneer een mono-repo meerdere projecten bevat, zullen bijdragers eerst de hele structuur door moeten, en moeten ze begrijpen hoe hun bijdrage invloed heeft op alle andere projecten.<\/p>\n<h2>Wat is een multi-repo?<\/h2>\n<p>De multi-repo route gebruikt juist meerdere repositories om meerdere libraries of services van een project te hosten. In het meest extreme geval zal elke minimale set van herbruikbare code of onafhankelijke functie (zoals een microservice) in een eigen repository gehost worden.<\/p>\n<h2>Voordelen van een multi-repo<\/h2>\n<p>Het hosten van elke library onafhankelijk van de anderen biedt allerlei voordelen.<\/p>\n<h3>Onafhankelijk versies maken van libraries<\/h3>\n<p>Wanneer je een repository tagt, zal de hele codebase de &#8220;nieuwe&#8221; tag toegewezen krijgen. Aangezien alleen de code voor een specifieke library op de repository zit, zal alleen die library getagd worden en een nieuwe versie krijgen, onafhankelijk van andere libraries.<\/p>\n<p>Door een onafhankelijk versie te hebben voor elke library kan je de dependency tree voor de toepassing opbouwen, waardoor je kan configureren welke versie van elke library er gebruikt moet worden.<\/p>\n<h3>Onafhankelijke releases van services<\/h3>\n<p>Aangezien de repository alleen de code voor een bepaalde service bevat en verder niks, kan een onafhankelijke deploymentcyclus gebruikt worden, onafhankelijk van de voortgang op andere onderdelen die er gebruik van maken.<\/p>\n<p>De service kan daardoor een snelle releasecyclus gebruiken, idealiter zelfs continuous delivery (waarbij nieuwe code meteen wordt ge\u00efmplementeerd zodra alle tests gelukt zijn). Sommige libraries die gebruik maken van de service hebben wellicht een tragere releasecyclus, bijvoorbeeld met slechts \u00e9\u00e9n nieuwe release per week.<\/p>\n<h3>Maakt toegangscontrole binnen de organisatie eenvoudiger<\/h3>\n<p>Alleen teamleden die werken aan de ontwikkeling van een bepaalde library hoeven toegang te hebben tot de bijbehorende library en de code te downloaden. Daardoor zit er meteen een toegangscontrole op elke laag van de <a href=\"https:\/\/kinsta.com\/nl\/blog\/application-performance-monitoring\/\">toepassing<\/a>. Iedereen die werkt met de library kan het recht om te wijzigen krijgen, en verder krijgt niemand toegang. Eventueel zou je ook alleen-lezen rechten kunnen geven aan sommige mensen.<\/p>\n<h3>Maakt het mogelijk dat teams onafhankelijk werken<\/h3>\n<p>Teamleden kunnen de architectuur van een library ontwerpen en de code implementeren, zonder rekening te hoeven houden met andere teams. Ze kunnen beslissingen maken op basis van wat de library doet in het algemeen, zonder na te hoeven denken over de specifieke vereisten van een bepaald ander team of andere toepassing.<\/p>\n<h2>Nadelen van een aanpak met een multi-repo<\/h2>\n<p>Het gebruiken van meerdere repositories kan natuurlijk ook nadelen opleveren.<\/p>\n<h3>Libraries moeten steeds opnieuw gesynchroniseerd worden<\/h3>\n<p>Wanneer een nieuwe versie van een library blokkerende wijzigingen bevat, moeten alle afhankelijke libraries aangepast worden aan de nieuwste versie. Als de releasecyclus van de library korter en sneller is dan die van afhankelijke libraries, kan de synchronisatie al snel mis gaan lopen.<\/p>\n<p>Teams zijn dan vooral bezig met het inhalen van releases van andere teams, in plaats van met hun eigen werk. Aangezien verschillende teams verschillende prioriteiten kunnen hebben, kan dit een uitdagende situatie opleveren.<\/p>\n<p>En wanneer een team het niet bij kan of wil benen, kan het zijn dat ze uiteindelijk een verouderde versie van een library gaan gebruiken. Dit heeft natuurlijk allerlei gevolgen voor het eindresultaat (qua beveiliging, snelheid en andere factoren), waardoor het gat in de ontwikkeling tussen verschillende libraries nog groter wordt.<\/p>\n<h3>Teams kunnen gefragmenteerd raken<\/h3>\n<p>Wanneer verschillende teams niet met andere teams hoeven samen te werken, kunnen ze zich terug gaan trekken in hun eigen silo. Op lange term kan dat ervoor zorgen dat je aparte subculturen binnen de organisatie krijgt, zoals het gebruik van verschillende programmeermethoden of zelfs verschillende developmenttools.<\/p>\n<p>Als een teamlid dan naar een ander team moet overstappen of ermee moet samenwerken, kan dat een cultuurschok opleveren en moeten ze opnieuw leren hoe ze hun werk moeten doen.<\/p>\n<h2>Mono-repo of multi-repo: belangrijkste verschillen<\/h2>\n<p>Beide aanpakken hebben uiteindelijk hetzelfde doel: de codebase beheren. Daarom moeten beide opties dezelfde uitdagingen oplossen, zoals het beheer van releases, het aanmoedigen van <a href=\"https:\/\/kinsta.com\/nl\/blog\/microsoft-teams-vs-slack\/\">samenwerkingen tussen teams en teamleden<\/a>, het omgaan met probleem, het uitvoeren van tests en nog veel meer.<\/p>\n<p>Het grootste verschil zit in de kern in de timing van wanneer teamleden beslissingen moeten maken: van tevoren voor een mono-repo of pas later bij een multi-repo.<\/p>\n<p>Laten we dat verder analyseren.<\/p>\n<p>Aangezien alle libraries een eigen versie krijgen in een multi-repo, kan een team dat een library met blokkerende wijzigingen releaset dit veilig doen door een nieuw grote releasenummer toe te wijzen aan deze release. Andere teams kunnen er dan voor kiezen om bij de oude versie te blijven en over te stappen wanneer hun code is aangepast.<\/p>\n<p>Met deze aanpak kan elk verantwoordelijk team zelf kiezen wanneer ze hun libraries willen aanpassen op anderen. Als ze dit te laat doen en er al weer een nieuwe versies is, komt er natuurlijk een steeds groter gat.<\/p>\n<p>Daardoor kan het ene team heel snel wijzigingen aan het doorvoeren zijn aan hun code, terwijl andere teams het niet kunnen bijbenen, waardoor ze libraries maken die uit elkaar lopen.<\/p>\n<p>Aan de andere kant kan je in een mono-repo geen nieuwe versie van een library releasen wanneer die een andere library verstoort, aangezien alle tests dan misgaan. In dat geval moet het eerste team eerst overleggen met het afhankelijk team om de wijzigingen te kunnen verwerken.<\/p>\n<p>Deze aanpak verplicht teams om <a href=\"https:\/\/kinsta.com\/nl\/blog\/javascript-bibliotheken\/\">al hun libraries<\/a> op elkaar aan te passen, elke keer dat er een library gewijzigd wordt. Alle teams moeten daardoor steeds met elkaar communiceren en een gezamenlijke oplossing vinden.<\/p>\n<p>Daardoor zal het snelle team minder snel wijzigingen door kunnen voeren, maar de code zal ook niet uit elkaar gaan lopen tussen libraries.<\/p>\n<p>Samenvattend kan de route van de multi-repo dus een cultuur aanmoedigen waarbij iedereen snel werkt, ook al gaat er dan soms iets mis, waardoor de snellere teams ook echt hun maximale output kunnen leveren. Kies je voor de aanpak van de mono-repo, dan krijg je een voorzichtigere cultuur waarbij iedereen met elkaar praat, en er geen team achteropraakt.<\/p>\n<h2>Hybride poly-als-mono aanpak<\/h2>\n<p>Als je niet kan kiezen tussen de multi-repo of mono-repo aanpak, is er ook nog een middenweg: gebruik meerdere repositories en zet een tool in om ze gesynchroniseerd te houden, waardoor het lijkt op een mono-repo, maar met meer flexibiliteit.<\/p>\n<p><a href=\"https:\/\/github.com\/mateodelnorte\/meta\">Meta<\/a>\u00a0is zo&#8217;n tool. De tool organiseert meerdere repositories in submappen en biedt een <a href=\"https:\/\/kinsta.com\/nl\/blog\/ssh-gebruiken\/\">command-line interface<\/a> waarmee dezelfde opdracht tegelijkertijd op alle repositories uitgevoerd wordt.<\/p>\n<p>Een meta-repository bevat alle informatie over de repositories waar een project uit bestaat. Het klonen van deze repository via meta zal herhalend alle vereiste repositories klonen, waardoor nieuwe teamleden ook sneller aan de gang kunnen met hun projecten.<\/p>\n<p>Om een meta-repository te klonen inclusief alle gedefinieerde repos eronder, voeren we de volgende opdracht uit:<\/p>\n<pre><code class=\"language-bash\">meta git clone [meta repo url]\n<\/code><\/pre>\n<p>Meta zal een <code>git clone<\/code> uitvoeren voor elke repository en deze in een submap plaatsen:<\/p>\n<figure id=\"attachment_100243\" aria-describedby=\"caption-attachment-100243\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-100243 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2021\/07\/meta-cloning-1024x755.png\" alt=\"Klonen van een meta-project. \" width=\"1024\" height=\"755\"><\/a><figcaption id=\"caption-attachment-100243\" class=\"wp-caption-text\">Klonen van een meta-project. (Afbeelding: <a href=\"https:\/\/github.com\/mateodelnorte\/meta\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/mateodelnorte\/meta<\/a>)<\/figcaption><\/figure>\n<p>Vervolgens kan je de <code>meta exec<\/code> opdracht uitvoeren om de opdracht uit te voeren op elke submap. Zo kan je bijvoorbeeld <code>git checkout master<\/code> uitvoeren op elke repository:<\/p>\n<pre><code class=\"language-bash\">meta exec \"git checkout master\"\n<\/code><\/pre>\n<h2>Hybride mono-als-poly aanpak<\/h2>\n<p>Een andere mogelijkheid is het beheren van de code via een mono-repo tijdens de development, maar tijdens deployment de code van elke library kopi\u00ebren in een onafhankelijke repository.<\/p>\n<p>Deze strategie wordt veel gebruikt binnen het PHP ecosysteem omdat <a href=\"https:\/\/packagist.org\/\">Packagist<\/a> (het belangrijkste <a href=\"https:\/\/getcomposer.org\/\">Composer<\/a> repository) een publieke <a href=\"https:\/\/kinsta.com\/nl\/blog\/wat-is-een-url\/\">URL<\/a> voor de repository vereist om een package te kunnen publiceren. Het is daarbij niet mogelijk om aan te geven dat die package te vinden is in een submap van de repository.<\/p>\n<p>Gezien de beperking van Packagist, kunnen <a href=\"https:\/\/graphql-api.com\/blog\/extending-the-monorepo-builder\/\">PHP projecten nog steeds een mono-repo gebruiken tijdens development<\/a>, maar moeten ze altijd een multi-repo gebruiken tijdens de deployment.<\/p>\n<p>Om deze omzetting te realiseren, kunnen we een\u00a0<a href=\"https:\/\/stackoverflow.com\/questions\/359424\/detach-move-subdirectory-into-separate-git-repository\/17864475#17864475\">script uitvoeren met <code>git subtree split<\/code><\/a>. Of gebruik \u00e9\u00e9n van de beschikbare tools die dezelfde logica toepassen:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/splitsh\/lite\" target=\"_blank\" rel=\"noopener noreferrer\">Git Subtree Splitter<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dflydev\/git-subsplit\" target=\"_blank\" rel=\"noopener noreferrer\">Git Subsplit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/symplify\/monorepo-split-github-action\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Action for Monorepo Split<\/a><\/li>\n<\/ul>\n<h2>Wie gebruikt er mono-repo en multi-repo?<\/h2>\n<p>Er zijn diverse grote techbedrijven die voor de mono-repo aanpak kiezen, en andere die juist voor de multi-repo methode gaan.<\/p>\n<p><a href=\"https:\/\/cacm.acm.org\/magazines\/2016\/7\/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository\/fulltext\">Google<\/a>,\u00a0<a href=\"https:\/\/www.facebook.com\/atscaleevents\/videos\/systems-scale-2019-monorepos-moving-fast-in-a-huge-repository\/457153524992062\/\">Facebook<\/a>,\u00a0<a href=\"https:\/\/blog.twitter.com\/engineering\/en_us\/a\/2016\/the-release-of-pants-10\">Twitter<\/a>, en <a href=\"https:\/\/www.youtube.com\/watch?v=lV8-1S28ycM\">Uber<\/a>\u00a0hebben allemaal publiekelijk gekozen voor de mono-repo. Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/bharry\/the-largest-git-repo-on-the-planet\/\">beheert de grootste Git mono-repo ter wereld<\/a> voor het hosten van de broncode van het Windows besturingssysteem.<\/p>\n<p>Aan de andere kant zijn\u00a0<a href=\"https:\/\/netflixtechblog.com\/towards-true-continuous-integration-distributed-repositories-and-dependencies-2a2e3108c051\">Netflix<\/a>,\u00a0<a href=\"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3328433.3328435\">Amazon, en Lyft<\/a> bekende bedrijven die juist voor de multi-repo gekozen hebben.<\/p>\n<p>Er zijn ook hybride poly-als-mono bedrijven, zoals <a href=\"https:\/\/source.android.com\/setup\/create\/coding-tasks\">Android<\/a> die meerdere repositories updatet, die worden beheerd als mono-repo.<\/p>\n<p>En op de tegengestelde kant van mono-als-poly, beheert <a href=\"https:\/\/kinsta.com\/nl\/blog\/php-frameworks\/#symfony\">Symfony<\/a> de code voor al hun componenten in een mono-repo. Vervolgens splitsen ze deze op in onafhankelijke repositories tijdens deployment (zoals\u00a0 <a href=\"https:\/\/github.com\/symfony\/dependency-injection\"><code>symfony\/dependency-injection<\/code><\/a> en <a href=\"https:\/\/github.com\/symfony\/event-dispatcher\"><code>symfony\/event-dispatcher<\/code><\/a>.)<\/p>\n<h2>Voorbeelden van mono-repo en multi-repo<\/h2>\n<p>Het <a href=\"https:\/\/github.com\/WordPress\/WordPress\">WordPress account op GitHub<\/a> host voorbeelden van zowel de mono-repo als de multi-repo.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/nl\/blog\/gutenberg-wordpress-editor\/\">Gutenberg<\/a>, de WordPress block editor, is samengesteld uit enkele tientallen\u00a0<a href=\"https:\/\/kinsta.com\/nl\/blog\/wat-is-javascript\/\">JavaScript<\/a>\u00a0packages. Deze packages worden allemaal gehost op de <a href=\"https:\/\/github.com\/WordPress\/gutenberg\"><code>WordPress\/gutenberg<\/code>\u00a0mono-repo<\/a> en beheerd via <a href=\"https:\/\/github.com\/lerna\/lerna\">Lerna<\/a>\u00a0om ze te publiceren in de\u00a0<a href=\"https:\/\/kinsta.com\/nl\/blog\/wat-is-node-js\/#what-is-npm\">npm<\/a>\u00a0repository.<\/p>\n<p><a href=\"https:\/\/wordpress.org\/news\/2021\/05\/welcome-to-openverse\/\">Openverse<\/a>, de zoekmachine van openlijk gelicenseerde media, <a href=\"https:\/\/github.com\/WordPress\/openverse\/blob\/918b7cf1b6323291ab16c1ad5a27f3733709ec17\/README.md#openverse\">host de belangrijkste onderdelen<\/a> in onafhankelijke repositories:\u00a0<a href=\"https:\/\/github.com\/wordpress\/openverse-frontend\">Front-end<\/a>,\u00a0<a href=\"https:\/\/github.com\/wordpress\/openverse-catalog\">Catalog<\/a>, en <a href=\"https:\/\/github.com\/wordpress\/openverse-api\">API<\/a>.<\/p>\n<h2>Mono-repo of multi-repo: zo maak je een keuze<\/h2>\n<p>Zoals met veel uitdagingen in development, is er geen vast antwoord op welke aanpak de beste is. Verschillende organisaties en verschillende projecten zullen voordelen hebben van juist de ene of de andere aanpak op basis van unieke factoren, zoals:<\/p>\n<ul>\n<li>Hoe groot is de codebase? Bevat deze meerdere gigabytes aan data?<\/li>\n<li>Hoeveel mensen zullen aan de codebase werken? Zit dit rond de 10, 100 of 1000?<\/li>\n<li>Hoeveel packages zullen er zijn? Zit dit rond de 10, 100 of 1000?<\/li>\n<li>Hoeveel packages moet een team tegelijkertijd aan werken?<\/li>\n<li>Hoe nauw werken de packages samen?<\/li>\n<li>Worden er verschillende programmeertalen gebruikt? Vereisen ze specifieke <a href=\"https:\/\/kinsta.com\/nl\/blog\/cms-systemen\/\">software<\/a> of speciale hardware?<\/li>\n<li>Hoeveel deploymenttools zijn er nodig, en hoe complex zijn die?<\/li>\n<li>Wat is de cultuur in het bedrijf en in de verschillende teams? Worden teams aangemoedigd om nauw samen te werken?<\/li>\n<li>Welke <a href=\"https:\/\/kinsta.com\/nl\/blog\/webdevelopment-tools\/\">tools en technologie\u00ebn<\/a> kunnen de teams gebruiken?<\/li>\n<\/ul>\n\n<h2>Samenvatting<\/h2>\n<p>Er zijn twee hoofdstrategie\u00ebn voor het hosten en beheren van code: mono-repo en multi-repo. De mono-repo aanpak betekent het opslaan en verzamelen van code voor verschillende libraries of projecten, of zelfs alle code van een hele organisatie, in \u00e9\u00e9n repository. En het multi-repo systeem verdeelt de code in eenheden, bijvoorbeeld libraries of onafhankelijke services, en host de benodigde code daarvoor in een onafhankelijke repository.<\/p>\n<p>Welke aanpak je kiest hangt af van allerlei factoren. Beide keuzes hebben voordelen en nadelen, en in dit artikel hebben we daar uitgebreid naar gekeken.<\/p>\n<p><em>Nog vragen over mono-repos of multi-repos? Laat het ons weten in de reacties hieronder!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Er zijn twee hoofdstrategie\u00ebn voor het hosten en beheren van code via Git: mono-repo en multi-repo. Ze hebben allebei voordelen en nadelen. Beide strategie\u00ebn zijn te &#8230;<\/p>\n","protected":false},"author":196,"featured_media":39924,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[218,415],"topic":[876],"class_list":["post-39921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-git","tag-github","topic-tech-tips"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories<\/title>\n<meta name=\"description\" content=\"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories\" \/>\n<meta property=\"og:description\" content=\"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-09T09:33:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-12T08:09:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Leonardo Losoviz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@losoviz\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Leonardo Losoviz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\"},\"author\":{\"name\":\"Leonardo Losoviz\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\"},\"headline\":\"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories\",\"datePublished\":\"2021-09-09T09:33:53+00:00\",\"dateModified\":\"2023-09-12T08:09:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\"},\"wordCount\":2786,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg\",\"keywords\":[\"git\",\"GitHub\"],\"articleSection\":[\"Webdevelopment\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\",\"name\":\"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg\",\"datePublished\":\"2021-09-09T09:33:53+00:00\",\"dateModified\":\"2023-09-12T08:09:21+00:00\",\"description\":\"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tech tips\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/tech-tips\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238\",\"name\":\"Leonardo Losoviz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g\",\"caption\":\"Leonardo Losoviz\"},\"description\":\"Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com\/losoviz.\",\"sameAs\":[\"https:\/\/leoloso.com\",\"https:\/\/x.com\/losoviz\",\"https:\/\/www.youtube.com\/@GatoGraphQL\"],\"url\":\"https:\/\/kinsta.com\/nl\/blog\/author\/leonardolosoviz\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories","description":"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/","og_locale":"nl_NL","og_type":"article","og_title":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories","og_description":"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.","og_url":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2021-09-09T09:33:53+00:00","article_modified_time":"2023-09-12T08:09:21+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg","type":"image\/jpeg"}],"author":"Leonardo Losoviz","twitter_card":"summary_large_image","twitter_description":"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg","twitter_creator":"@losoviz","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Leonardo Losoviz","Geschatte leestijd":"13 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/"},"author":{"name":"Leonardo Losoviz","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238"},"headline":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories","datePublished":"2021-09-09T09:33:53+00:00","dateModified":"2023-09-12T08:09:21+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/"},"wordCount":2786,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg","keywords":["git","GitHub"],"articleSection":["Webdevelopment"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/","url":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/","name":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg","datePublished":"2021-09-09T09:33:53+00:00","dateModified":"2023-09-12T08:09:21+00:00","description":"Monorepo vs multi-repo - welke is het beste? Er zijn voor- en nadelen aan elke aanpak. Leer hier over de voor- en nadelen van elke aanpak.","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2021\/09\/monorepo-vs-multi-repo.jpeg","width":1460,"height":730,"caption":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Tech tips","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/tech-tips\/"},{"@type":"ListItem","position":3,"name":"Mono-repo of multi-repo: voordelen en nadelen van verschillende strategie\u00ebn voor code repositories"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/c382de1885cc21b079ec1e71d7faf238","name":"Leonardo Losoviz","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g","caption":"Leonardo Losoviz"},"description":"Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com\/losoviz.","sameAs":["https:\/\/leoloso.com","https:\/\/x.com\/losoviz","https:\/\/www.youtube.com\/@GatoGraphQL"],"url":"https:\/\/kinsta.com\/nl\/blog\/author\/leonardolosoviz\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/39921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/196"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=39921"}],"version-history":[{"count":4,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/39921\/revisions"}],"predecessor-version":[{"id":55428,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/39921\/revisions\/55428"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/en"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/de"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/it"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/pt"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/translations\/se"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/39921\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/39924"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=39921"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=39921"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=39921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}