[{"data":1,"prerenderedAt":988},["ShallowReactive",2],{"/blog/tips-for-managing-monorepos-in-gitlab":3,"navigation-en-us":202,"banner-en-us":630,"footer-en-us":640,"blog-post-authors-en-us-Sarah Waldner":884,"blog-related-posts-en-us-tips-for-managing-monorepos-in-gitlab":899,"blog-promotions-en-us":925,"next-steps-en-us":978},{"id":4,"title":5,"authors":6,"body":8,"category":178,"date":179,"description":180,"extension":181,"externalUrl":182,"faq":182,"featured":183,"heroImage":184,"meta":185,"navigation":186,"path":187,"seo":188,"slug":192,"stem":193,"tags":194,"template":200,"updatedDate":182,"__hash__":201},"blogPosts/en-us/blog/tips-for-managing-monorepos-in-gitlab.md","5 Tips for managing monorepos in GitLab",[7],"Sarah Waldner",{"type":9,"value":10,"toc":172},"minimark",[11,22,27,36,52,55,61,76,79,84,93,102,107,110,113,116,121,134,139,142,146,149],[12,13,14,15,21],"p",{},"GitLab was founded 10 years ago on Git because it is the market leading version control system. As ",[16,17,20],"a",{"href":18,"rel":19},"https://www.wsj.com/articles/SB10001424053111903480904576512250915629460",[],"Marc Andressen pointed out in 2011",", we see teams and code bases expanding at incredible rates, testing the limits of Git. Organizations are experiencing significant slowdowns in performance and added administration complexity working on enormous repositories or monolithic repositories.",[23,24,26],"h2",{"id":25},"why-do-organizations-develop-on-monorepos","Why do organizations develop on monorepos?",[12,28,29,30,35],{},"Great question. While ",[16,31,34],{"href":32,"rel":33},"https://www.infoworld.com/article/3638860/the-case-against-monorepos.html",[],"some"," might believe that monorepos are a no-no, there are valid reasons why companies, including  Google or GitLab (that’s right! We operate a monolithic repository), choose to do so. The main benefits are:",[37,38,39,43,46,49],"ul",{},[40,41,42],"li",{},"Monorepos can reduce silos between teams, streamlining collaboration on design, development, and operation of different services because everything is within the same repository.",[40,44,45],{},"Monorepos help organizations standardize on tooling and processes. If a company is pursuing a DevOps transformation, a monorepo can help accelerate change management when it comes to new workflows or the rollout of new tools.",[40,47,48],{},"Monorepos simplify dependency management because all packages can be updated in a single commit.",[40,50,51],{},"Monorepos offer unified CI/CD and build processes. Having all services in a single repository means that you can set up one system of pipelines for everyone.",[12,53,54],{},"While we still have a ways to go before monorepos or monolithic repositories are as easy to manage as multi-repos in GitLab, we put together five tips and tricks to maintain velocity while developing on a monorepo in GitLab.",[12,56,57],{},[58,59,60],"strong",{},"1. Use CODEOWNERS to streamline merge request approvals",[12,62,63,64,69,70,75],{},"CODEOWNERS files live in the repository and assign an owner to a portion of the code, making it super efficient to process changes. Investing time in setting up a robust ",[16,65,68],{"href":66,"rel":67},"https://docs.gitlab.com/user/project/codeowners/",[],"CODEOWNERS file"," that you can then use to automate ",[16,71,74],{"href":72,"rel":73},"https://docs.gitlab.com/user/project/merge_requests/approvals/",[],"merge request approvals"," from required people will save time down the road for developers.",[12,77,78],{},"You can then set your merge requests so they must be approved by Code Owners before merge. CODEOWNERS specified for the changed files in the merge request will be automatically notified.",[12,80,81],{},[58,82,83],{},"2. Improve git operation performance with Git LFS",[12,85,86,87,92],{},"A universal truth of git is that managing large files is challenging. If you work in the gaming industry, I am sure you’ve been through the annoying process of trying to remove a binary file from the repository history after a well-meaning coworker committed it. This is where ",[16,88,91],{"href":89,"rel":90},"https://docs.gitlab.com/topics/git/lfs/#git-large-file-storage-lfs",[],"Git LFS"," comes in. Git LFS keeps all the big files in a different location so that they do not exponentially increase the size of a repository.",[12,94,95,96,101],{},"The GitLab server communicates with the Git LFS client over HTTPS. You can enable Git LFS for a project by toggling it in ",[16,97,100],{"href":98,"rel":99},"https://docs.gitlab.com/user/project/settings/#configure-project-visibility-features-and-permissions",[],"project settings",". All files in Git LFS can be tracked in the GitLab interface. GitLab indicates what files are stored there with the LFS icon.",[12,103,104],{},[58,105,106],{},"3. Reduce download time with partial clone operations",[12,108,109],{},"Partial clone is a performance optimization that allows Git to function without having a complete copy of the repository. The goal of this work is to allow Git to better handle extremely large repositories.",[12,111,112],{},"As we just talked about, storing large binary files in Git is normally discouraged, because every large file added is downloaded by everyone who clones or fetches changes thereafter. These downloads are slow and problematic, especially when working from a slow or unreliable internet connection.",[12,114,115],{},"Using partial clone with a file size filter solves this problem, by excluding troublesome large files from clones and fetches.",[12,117,118],{},[58,119,120],{},"4. Take advantage of parent-child pipelines",[12,122,123,128,129,133],{},[16,124,127],{"href":125,"rel":126},"https://docs.gitlab.com/ci/pipelines/downstream_pipelines/",[],"Parent-child pipelines"," are where one pipeline triggers a set of downstream pipelines in the same project. The downstream pipelines still execute in the same stages or sequence without waiting for other pipelines to finish. Additionally, child pipelines reduce the configuration to the child pipeline, making it easier to interpret and understand. For monorepos, using parent-child pipelines in conjunction with ",[130,131,132],"code",{},"rules:changes"," will only run pipelines on specified files changes. This reduces wasted time running pipelines across the entire repository.",[12,135,136],{},[58,137,138],{},"5. Use incremental backups to eliminate downtime",[12,140,141],{},"Incremental backups can be faster than full backups because they only pack changes since the last backup into the backup bundle for each repository. This is super useful when you are working on a large repository and only developing on certain parts of the code base at a time.",[23,143,145],{"id":144},"where-we-are-headed","Where we are headed",[12,147,148],{},"While these tips have helped many customers migrate from other version control systems to GitLab, we know there is still room for improvement. Over the next year, you will see us working on the following projects. We’d LOVE to hear from you, so share your thoughts, ideas, or simply 👍 on an issue to help prioritize things that will make your life easier.",[37,150,151,158,165],{},[40,152,153],{},[16,154,157],{"href":155,"rel":156},"https://gitlab.com/groups/gitlab-org/-/epics/773",[],"Git for enormous repositories",[40,159,160],{},[16,161,164],{"href":162,"rel":163},"https://gitlab.com/groups/gitlab-org/-/epics/4895",[],"Expand SAST scanner support for monorepos",[40,166,167],{},[16,168,171],{"href":169,"rel":170},"https://gitlab.com/gitlab-org/gitlab/-/issues/299490",[],"Allow Reports to be Namespace to support monorepos",{"title":173,"searchDepth":174,"depth":174,"links":175},"",2,[176,177],{"id":25,"depth":174,"text":26},{"id":144,"depth":174,"text":145},"engineering","2022-07-12","Learn the benefits of operating a monolothic repository and how to get the most out of this structure.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667591/Blog/Hero%20Images/code-review-blog.jpg",{},true,"/en-us/blog/tips-for-managing-monorepos-in-gitlab",{"title":5,"description":180,"ogTitle":5,"ogDescription":180,"noIndex":183,"ogImage":184,"ogUrl":189,"ogSiteName":190,"ogType":191,"canonicalUrls":189},"https://about.gitlab.com/blog/tips-for-managing-monorepos-in-gitlab","https://about.gitlab.com","article","tips-for-managing-monorepos-in-gitlab","en-us/blog/tips-for-managing-monorepos-in-gitlab",[195,196,197,198,199],"DevOps","features","performance","product","workflow","BlogPost","ViwSNcT7I9uS2UMcKH69RAaLwNzMq7NMqXiFMC0iWnQ",{"logo":203,"freeTrial":208,"sales":213,"login":218,"items":223,"search":550,"minimal":581,"duo":600,"switchNav":609,"pricingDeployment":620},{"config":204},{"href":205,"dataGaName":206,"dataGaLocation":207},"/","gitlab logo","header",{"text":209,"config":210},"Get free trial",{"href":211,"dataGaName":212,"dataGaLocation":207},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":214,"config":215},"Request a demo",{"href":216,"dataGaName":217,"dataGaLocation":207},"/sales/?contact-topic=request-demo","sales",{"text":219,"config":220},"Sign in",{"href":221,"dataGaName":222,"dataGaLocation":207},"https://gitlab.com/users/sign_in/","sign in",[224,253,353,358,472,528],{"text":225,"config":226,"menu":228},"Platform",{"dataNavLevelOne":227},"platform",{"type":229,"columns":230},"cards",[231,237,245],{"title":225,"description":232,"link":233},"The intelligent orchestration platform for DevSecOps",{"text":234,"config":235},"Explore our Platform",{"href":236,"dataGaName":227,"dataGaLocation":207},"/platform/",{"title":238,"description":239,"link":240},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":241,"config":242},"Meet GitLab Duo",{"href":243,"dataGaName":244,"dataGaLocation":207},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":246,"description":247,"link":248},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":249,"config":250},"Learn more",{"href":251,"dataGaName":252,"dataGaLocation":207},"/why-gitlab/","why gitlab",{"text":254,"left":186,"config":255,"menu":257},"Product",{"dataNavLevelOne":256},"solutions",{"type":258,"link":259,"columns":263,"feature":332},"lists",{"text":260,"config":261},"View all Solutions",{"href":262,"dataGaName":256,"dataGaLocation":207},"/solutions/",[264,288,311],{"title":265,"description":266,"link":267,"items":272},"Automation","CI/CD and automation to accelerate deployment",{"config":268},{"icon":269,"href":270,"dataGaName":271,"dataGaLocation":207},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[273,277,280,284],{"text":274,"config":275},"CI/CD",{"href":276,"dataGaLocation":207,"dataGaName":274},"/solutions/continuous-integration/",{"text":238,"config":278},{"href":243,"dataGaLocation":207,"dataGaName":279},"gitlab duo agent platform - product menu",{"text":281,"config":282},"Source Code Management",{"href":283,"dataGaLocation":207,"dataGaName":281},"/solutions/source-code-management/",{"text":285,"config":286},"Automated Software Delivery",{"href":270,"dataGaLocation":207,"dataGaName":287},"Automated software delivery",{"title":289,"description":290,"link":291,"items":296},"Security","Deliver code faster without compromising security",{"config":292},{"href":293,"dataGaName":294,"dataGaLocation":207,"icon":295},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[297,301,306],{"text":298,"config":299},"Application Security Testing",{"href":293,"dataGaName":300,"dataGaLocation":207},"Application security testing",{"text":302,"config":303},"Software Supply Chain Security",{"href":304,"dataGaLocation":207,"dataGaName":305},"/solutions/supply-chain/","Software supply chain security",{"text":307,"config":308},"Software Compliance",{"href":309,"dataGaName":310,"dataGaLocation":207},"/solutions/software-compliance/","software compliance",{"title":312,"link":313,"items":318},"Measurement",{"config":314},{"icon":315,"href":316,"dataGaName":317,"dataGaLocation":207},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[319,323,327],{"text":320,"config":321},"Visibility & Measurement",{"href":316,"dataGaLocation":207,"dataGaName":322},"Visibility and Measurement",{"text":324,"config":325},"Value Stream Management",{"href":326,"dataGaLocation":207,"dataGaName":324},"/solutions/value-stream-management/",{"text":328,"config":329},"Analytics & Insights",{"href":330,"dataGaLocation":207,"dataGaName":331},"/solutions/analytics-and-insights/","Analytics and insights",{"title":333,"type":258,"items":334},"GitLab for",[335,341,347],{"text":336,"config":337},"Enterprise",{"icon":338,"href":339,"dataGaLocation":207,"dataGaName":340},"Building","/enterprise/","enterprise",{"text":342,"config":343},"Small Business",{"icon":344,"href":345,"dataGaLocation":207,"dataGaName":346},"Work","/small-business/","small business",{"text":348,"config":349},"Public Sector",{"icon":350,"href":351,"dataGaLocation":207,"dataGaName":352},"Organization","/solutions/public-sector/","public sector",{"text":354,"config":355},"Pricing",{"href":356,"dataGaName":357,"dataGaLocation":207,"dataNavLevelOne":357},"/pricing/","pricing",{"text":359,"config":360,"menu":362},"Resources",{"dataNavLevelOne":361},"resources",{"type":258,"link":363,"columns":367,"feature":461},{"text":364,"config":365},"View all resources",{"href":366,"dataGaName":361,"dataGaLocation":207},"/resources/",[368,401,428],{"title":369,"items":370},"Getting started",[371,376,381,386,391,396],{"text":372,"config":373},"Install",{"href":374,"dataGaName":375,"dataGaLocation":207},"/install/","install",{"text":377,"config":378},"Quick start guides",{"href":379,"dataGaName":380,"dataGaLocation":207},"/get-started/","quick setup checklists",{"text":382,"config":383},"Learn",{"href":384,"dataGaLocation":207,"dataGaName":385},"https://university.gitlab.com/","learn",{"text":387,"config":388},"Product documentation",{"href":389,"dataGaName":390,"dataGaLocation":207},"https://docs.gitlab.com/","product documentation",{"text":392,"config":393},"Best practice videos",{"href":394,"dataGaName":395,"dataGaLocation":207},"/getting-started-videos/","best practice videos",{"text":397,"config":398},"Integrations",{"href":399,"dataGaName":400,"dataGaLocation":207},"/integrations/","integrations",{"title":402,"items":403},"Discover",[404,409,414,419,423],{"text":405,"config":406},"Customer success stories",{"href":407,"dataGaName":408,"dataGaLocation":207},"/customers/","customer success stories",{"text":410,"config":411},"Blog",{"href":412,"dataGaName":413,"dataGaLocation":207},"/blog/","blog",{"text":415,"config":416},"Demo Hub",{"href":417,"dataGaName":418,"dataGaLocation":207},"/demo-hub/","demo hub",{"text":420,"config":421},"The Source",{"href":422,"dataGaName":413,"dataGaLocation":207},"/the-source/",{"text":424,"config":425},"Remote",{"href":426,"dataGaName":427,"dataGaLocation":207},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":429,"items":430},"Connect",[431,436,441,446,451,456],{"text":432,"config":433},"GitLab Services",{"href":434,"dataGaName":435,"dataGaLocation":207},"/services/","services",{"text":437,"config":438},"Contribute",{"href":439,"dataGaName":440,"dataGaLocation":207},"https://contributors.gitlab.com","contribute",{"text":442,"config":443},"Community",{"href":444,"dataGaName":445,"dataGaLocation":207},"/community/","community",{"text":447,"config":448},"Forum",{"href":449,"dataGaName":450,"dataGaLocation":207},"https://forum.gitlab.com/","forum",{"text":452,"config":453},"Events",{"href":454,"dataGaName":455,"dataGaLocation":207},"/events/","events",{"text":457,"config":458},"Partners",{"href":459,"dataGaName":460,"dataGaLocation":207},"/partners/","partners",{"config":462,"title":465,"text":466,"link":467},{"background":463,"textColor":464},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":468,"config":469},"Read the latest",{"href":470,"dataGaName":471,"dataGaLocation":207},"/whats-new/","whats new",{"text":473,"config":474,"menu":476},"Company",{"dataNavLevelOne":475},"company",{"type":258,"columns":477},[478],{"items":479},[480,485,491,493,498,503,508,513,518,523],{"text":481,"config":482},"About",{"href":483,"dataGaName":484,"dataGaLocation":207},"/company/","about",{"text":486,"config":487,"footerGa":490},"Jobs",{"href":488,"dataGaName":489,"dataGaLocation":207},"/jobs/","jobs",{"dataGaName":489},{"text":452,"config":492},{"href":454,"dataGaName":455,"dataGaLocation":207},{"text":494,"config":495},"Leadership",{"href":496,"dataGaName":497,"dataGaLocation":207},"/company/team/e-group/","leadership",{"text":499,"config":500},"Handbook",{"href":501,"dataGaName":502,"dataGaLocation":207},"https://handbook.gitlab.com/","handbook",{"text":504,"config":505},"Investor relations",{"href":506,"dataGaName":507,"dataGaLocation":207},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":509,"config":510},"Trust Center",{"href":511,"dataGaName":512,"dataGaLocation":207},"/security/","trust center",{"text":514,"config":515},"AI Transparency Center",{"href":516,"dataGaName":517,"dataGaLocation":207},"/ai-transparency-center/","ai transparency center",{"text":519,"config":520},"Newsletter",{"href":521,"dataGaName":522,"dataGaLocation":207},"/company/contact/#contact-forms","newsletter",{"text":524,"config":525},"Press",{"href":526,"dataGaName":527,"dataGaLocation":207},"/press/","press",{"text":529,"config":530,"menu":531},"Contact us",{"dataNavLevelOne":475},{"type":258,"columns":532},[533],{"items":534},[535,540,545],{"text":536,"config":537},"Talk to sales",{"href":538,"dataGaName":539,"dataGaLocation":207},"/sales/","talk to sales",{"text":541,"config":542},"Support portal",{"href":543,"dataGaName":544,"dataGaLocation":207},"https://support.gitlab.com/hc/en-us","support portal",{"text":546,"config":547},"Customer portal",{"href":548,"dataGaName":549,"dataGaLocation":207},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":551,"login":552,"suggestions":559},"Close",{"text":553,"link":554},"To search repositories and projects, login to",{"text":555,"config":556},"gitlab.com",{"href":221,"dataGaName":557,"dataGaLocation":558},"search login","search",{"text":560,"default":561},"Suggestions",[562,564,568,570,574,578],{"text":238,"config":563},{"href":243,"dataGaName":238,"dataGaLocation":558},{"text":565,"config":566},"Code Suggestions (AI)",{"href":567,"dataGaName":565,"dataGaLocation":558},"/solutions/code-suggestions/",{"text":274,"config":569},{"href":276,"dataGaName":274,"dataGaLocation":558},{"text":571,"config":572},"GitLab on AWS",{"href":573,"dataGaName":571,"dataGaLocation":558},"/partners/technology-partners/aws/",{"text":575,"config":576},"GitLab on Google Cloud",{"href":577,"dataGaName":575,"dataGaLocation":558},"/partners/technology-partners/google-cloud-platform/",{"text":579,"config":580},"Why GitLab?",{"href":251,"dataGaName":579,"dataGaLocation":558},{"freeTrial":582,"mobileIcon":587,"desktopIcon":592,"secondaryButton":595},{"text":583,"config":584},"Start free trial",{"href":585,"dataGaName":212,"dataGaLocation":586},"https://gitlab.com/-/trials/new/","nav",{"altText":588,"config":589},"Gitlab Icon",{"src":590,"dataGaName":591,"dataGaLocation":586},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":588,"config":593},{"src":594,"dataGaName":591,"dataGaLocation":586},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":596,"config":597},"Get Started",{"href":598,"dataGaName":599,"dataGaLocation":586},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":601,"mobileIcon":605,"desktopIcon":607},{"text":602,"config":603},"Learn more about GitLab Duo",{"href":243,"dataGaName":604,"dataGaLocation":586},"gitlab duo",{"altText":588,"config":606},{"src":590,"dataGaName":591,"dataGaLocation":586},{"altText":588,"config":608},{"src":594,"dataGaName":591,"dataGaLocation":586},{"button":610,"mobileIcon":615,"desktopIcon":617},{"text":611,"config":612},"/switch",{"href":613,"dataGaName":614,"dataGaLocation":586},"#contact","switch",{"altText":588,"config":616},{"src":590,"dataGaName":591,"dataGaLocation":586},{"altText":588,"config":618},{"src":619,"dataGaName":591,"dataGaLocation":586},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":621,"mobileIcon":626,"desktopIcon":628},{"text":622,"config":623},"Back to pricing",{"href":356,"dataGaName":624,"dataGaLocation":586,"icon":625},"back to pricing","GoBack",{"altText":588,"config":627},{"src":590,"dataGaName":591,"dataGaLocation":586},{"altText":588,"config":629},{"src":594,"dataGaName":591,"dataGaLocation":586},{"title":631,"titleMobile":632,"button":633,"config":638},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":249,"config":634},{"href":635,"dataGaName":636,"dataGaLocation":637},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":639,"disabled":183},"release",{"data":641},{"text":642,"source":643,"edit":649,"contribute":654,"config":659,"items":664,"minimal":873},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":644,"config":645},"View page source",{"href":646,"dataGaName":647,"dataGaLocation":648},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":650,"config":651},"Edit this page",{"href":652,"dataGaName":653,"dataGaLocation":648},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":655,"config":656},"Please contribute",{"href":657,"dataGaName":658,"dataGaLocation":648},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":660,"facebook":661,"youtube":662,"linkedin":663},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[665,712,765,809,841],{"title":354,"links":666,"subMenu":681},[667,671,676],{"text":668,"config":669},"View plans",{"href":356,"dataGaName":670,"dataGaLocation":648},"view plans",{"text":672,"config":673},"Why Premium?",{"href":674,"dataGaName":675,"dataGaLocation":648},"/pricing/premium/","why premium",{"text":677,"config":678},"Why Ultimate?",{"href":679,"dataGaName":680,"dataGaLocation":648},"/pricing/ultimate/","why ultimate",[682],{"title":683,"links":684},"Contact Us",[685,688,690,692,697,702,707],{"text":686,"config":687},"Contact sales",{"href":538,"dataGaName":217,"dataGaLocation":648},{"text":541,"config":689},{"href":543,"dataGaName":544,"dataGaLocation":648},{"text":546,"config":691},{"href":548,"dataGaName":549,"dataGaLocation":648},{"text":693,"config":694},"Status",{"href":695,"dataGaName":696,"dataGaLocation":648},"https://status.gitlab.com/","status",{"text":698,"config":699},"Terms of use",{"href":700,"dataGaName":701,"dataGaLocation":648},"/terms/","terms of use",{"text":703,"config":704},"Privacy statement",{"href":705,"dataGaName":706,"dataGaLocation":648},"/privacy/","privacy statement",{"text":708,"config":709},"Cookie preferences",{"dataGaName":710,"dataGaLocation":648,"id":711,"isOneTrustButton":186},"cookie preferences","ot-sdk-btn",{"title":254,"links":713,"subMenu":722},[714,718],{"text":715,"config":716},"DevSecOps platform",{"href":236,"dataGaName":717,"dataGaLocation":648},"devsecops platform",{"text":719,"config":720},"AI-Assisted Development",{"href":243,"dataGaName":721,"dataGaLocation":648},"ai-assisted development",[723],{"title":724,"links":725},"Topics",[726,731,736,740,745,750,755,760],{"text":727,"config":728},"CICD",{"href":729,"dataGaName":730,"dataGaLocation":648},"/topics/ci-cd/","cicd",{"text":732,"config":733},"GitOps",{"href":734,"dataGaName":735,"dataGaLocation":648},"/topics/gitops/","gitops",{"text":195,"config":737},{"href":738,"dataGaName":739,"dataGaLocation":648},"/topics/devops/","devops",{"text":741,"config":742},"Version Control",{"href":743,"dataGaName":744,"dataGaLocation":648},"/topics/version-control/","version control",{"text":746,"config":747},"DevSecOps",{"href":748,"dataGaName":749,"dataGaLocation":648},"/topics/devsecops/","devsecops",{"text":751,"config":752},"Cloud Native",{"href":753,"dataGaName":754,"dataGaLocation":648},"/topics/cloud-native/","cloud native",{"text":756,"config":757},"AI for Coding",{"href":758,"dataGaName":759,"dataGaLocation":648},"/topics/devops/ai-for-coding/","ai for coding",{"text":761,"config":762},"Agentic AI",{"href":763,"dataGaName":764,"dataGaLocation":648},"/topics/agentic-ai/","agentic ai",{"title":766,"links":767},"Solutions",[768,770,772,777,781,784,788,791,793,796,799,804],{"text":298,"config":769},{"href":293,"dataGaName":298,"dataGaLocation":648},{"text":287,"config":771},{"href":270,"dataGaName":271,"dataGaLocation":648},{"text":773,"config":774},"Agile development",{"href":775,"dataGaName":776,"dataGaLocation":648},"/solutions/agile-delivery/","agile delivery",{"text":778,"config":779},"SCM",{"href":283,"dataGaName":780,"dataGaLocation":648},"source code management",{"text":727,"config":782},{"href":276,"dataGaName":783,"dataGaLocation":648},"continuous integration & delivery",{"text":785,"config":786},"Value stream management",{"href":326,"dataGaName":787,"dataGaLocation":648},"value stream management",{"text":732,"config":789},{"href":790,"dataGaName":735,"dataGaLocation":648},"/solutions/gitops/",{"text":336,"config":792},{"href":339,"dataGaName":340,"dataGaLocation":648},{"text":794,"config":795},"Small business",{"href":345,"dataGaName":346,"dataGaLocation":648},{"text":797,"config":798},"Public sector",{"href":351,"dataGaName":352,"dataGaLocation":648},{"text":800,"config":801},"Education",{"href":802,"dataGaName":803,"dataGaLocation":648},"/solutions/education/","education",{"text":805,"config":806},"Financial services",{"href":807,"dataGaName":808,"dataGaLocation":648},"/solutions/finance/","financial services",{"title":359,"links":810},[811,813,815,817,820,822,825,827,829,831,833,835,837,839],{"text":372,"config":812},{"href":374,"dataGaName":375,"dataGaLocation":648},{"text":377,"config":814},{"href":379,"dataGaName":380,"dataGaLocation":648},{"text":382,"config":816},{"href":384,"dataGaName":385,"dataGaLocation":648},{"text":387,"config":818},{"href":389,"dataGaName":819,"dataGaLocation":648},"docs",{"text":410,"config":821},{"href":412,"dataGaName":413,"dataGaLocation":648},{"text":823,"config":824},"What's new",{"href":470,"dataGaName":471,"dataGaLocation":648},{"text":405,"config":826},{"href":407,"dataGaName":408,"dataGaLocation":648},{"text":424,"config":828},{"href":426,"dataGaName":427,"dataGaLocation":648},{"text":432,"config":830},{"href":434,"dataGaName":435,"dataGaLocation":648},{"text":437,"config":832},{"href":439,"dataGaName":440,"dataGaLocation":648},{"text":442,"config":834},{"href":444,"dataGaName":445,"dataGaLocation":648},{"text":447,"config":836},{"href":449,"dataGaName":450,"dataGaLocation":648},{"text":452,"config":838},{"href":454,"dataGaName":455,"dataGaLocation":648},{"text":457,"config":840},{"href":459,"dataGaName":460,"dataGaLocation":648},{"title":473,"links":842},[843,845,847,849,851,853,857,862,864,866,868],{"text":481,"config":844},{"href":483,"dataGaName":475,"dataGaLocation":648},{"text":486,"config":846},{"href":488,"dataGaName":489,"dataGaLocation":648},{"text":494,"config":848},{"href":496,"dataGaName":497,"dataGaLocation":648},{"text":499,"config":850},{"href":501,"dataGaName":502,"dataGaLocation":648},{"text":504,"config":852},{"href":506,"dataGaName":507,"dataGaLocation":648},{"text":854,"config":855},"Sustainability",{"href":856,"dataGaName":854,"dataGaLocation":648},"/sustainability/",{"text":858,"config":859},"Diversity, inclusion and belonging (DIB)",{"href":860,"dataGaName":861,"dataGaLocation":648},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":509,"config":863},{"href":511,"dataGaName":512,"dataGaLocation":648},{"text":519,"config":865},{"href":521,"dataGaName":522,"dataGaLocation":648},{"text":524,"config":867},{"href":526,"dataGaName":527,"dataGaLocation":648},{"text":869,"config":870},"Modern Slavery Transparency Statement",{"href":871,"dataGaName":872,"dataGaLocation":648},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":874},[875,878,881],{"text":876,"config":877},"Terms",{"href":700,"dataGaName":701,"dataGaLocation":648},{"text":879,"config":880},"Cookies",{"dataGaName":710,"dataGaLocation":648,"id":711,"isOneTrustButton":186},{"text":882,"config":883},"Privacy",{"href":705,"dataGaName":706,"dataGaLocation":648},[885],{"id":886,"title":7,"body":182,"config":887,"content":889,"description":182,"extension":893,"meta":894,"navigation":186,"path":895,"seo":896,"stem":897,"__hash__":898},"blogAuthors/en-us/blog/authors/sarah-waldner.yml",{"template":888},"BlogAuthor",{"name":7,"config":890},{"headshot":891,"ctfId":892},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667588/Blog/Author%20Headshots/sarahwaldner-headshot.png","sarahwaldner","yml",{},"/en-us/blog/authors/sarah-waldner",{},"en-us/blog/authors/sarah-waldner","JLCZXYm5xzIv_Lr_fI5fTt6rzuAq2nkfuSFCFaZCYi4",[900,909,917],{"title":901,"description":902,"heroImage":903,"category":178,"date":904,"authors":905,"slug":908,"externalUrl":182},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[906,907],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":910,"description":911,"heroImage":912,"category":178,"date":913,"authors":914,"slug":916,"externalUrl":182},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[915],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":918,"description":919,"heroImage":920,"category":178,"date":921,"authors":922,"slug":924,"externalUrl":182},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[923],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":926},[927,941,952,964],{"id":928,"categories":929,"header":931,"text":932,"button":933,"image":938},"ai-modernization",[930],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":934,"config":935},"Get your AI maturity score",{"href":936,"dataGaName":937,"dataGaLocation":413},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":939},{"src":940},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":942,"categories":943,"header":944,"text":932,"button":945,"image":949},"devops-modernization",[198,749],"Are you just managing tools or shipping innovation?",{"text":946,"config":947},"Get your DevOps maturity score",{"href":948,"dataGaName":937,"dataGaLocation":413},"/assessments/devops-modernization-assessment/",{"config":950},{"src":951},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":953,"categories":954,"header":956,"text":932,"button":957,"image":961},"security-modernization",[955],"security","Are you trading speed for security?",{"text":958,"config":959},"Get your security maturity score",{"href":960,"dataGaName":937,"dataGaLocation":413},"/assessments/security-modernization-assessment/",{"config":962},{"src":963},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":965,"paths":966,"header":969,"text":970,"button":971,"image":976},"github-azure-migration",[967,968],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":972,"config":973},"See how GitLab compares to GitHub",{"href":974,"dataGaName":975,"dataGaLocation":413},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":977},{"src":951},{"header":979,"blurb":980,"button":981,"secondaryButton":986},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":982,"config":983},"Get your free trial",{"href":984,"dataGaName":212,"dataGaLocation":985},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":686,"config":987},{"href":538,"dataGaName":217,"dataGaLocation":985},1786803774181]