[{"data":1,"prerenderedAt":1031},["ShallowReactive",2],{"/blog/gitlabs-next-generation-container-registry-is-now-available":3,"navigation-en-us":248,"banner-en-us":676,"footer-en-us":686,"blog-post-authors-en-us-Tim Rizzi":931,"blog-related-posts-en-us-gitlabs-next-generation-container-registry-is-now-available":946,"blog-promotions-en-us":968,"next-steps-en-us":1021},{"id":4,"title":5,"authors":6,"body":8,"category":226,"date":227,"description":228,"extension":229,"externalUrl":230,"faq":230,"featured":231,"heroImage":232,"meta":233,"navigation":231,"path":234,"seo":235,"slug":240,"stem":241,"tags":242,"template":246,"updatedDate":230,"__hash__":247},"blogPosts/en-us/blog/gitlabs-next-generation-container-registry-is-now-available.md","GitLab's next-generation container registry is now available",[7],"Tim Rizzi",{"type":9,"value":10,"toc":217},"minimark",[11,25,34,53,62,71,76,79,87,91,106,109,120,124,127,130,134,137,188,199,203,211],[12,13,14],"p",{},[15,16,17,18,24],"strong",{},"TLDR; Upgrade to the new container registry (Beta) to unlock online garbage collection. This ",[19,20,23],"a",{"href":21,"rel":22},"https://gitlab.com/gitlab-org/gitlab/-/issues/423459",[],"issue"," has all the information you need to get started.",[12,26,27,28,33],{},"When I joined the GitLab Package stage, the ",[19,29,32],{"href":30,"rel":31},"https://docs.gitlab.com/user/packages/container_registry/",[],"container registry"," already existed and was a critical feature for GitLab and GitLab's customers. But some fundamental problems needed to be addressed.",[35,36,37,41,44,47,50],"ul",{},[38,39,40],"li",{},"The user interface was unusable due to missing functionality like sorting, filtering, and deleting container images.",[38,42,43],{},"Operations that required listing the tags associated with an image were not performant at scale.",[38,45,46],{},"There was no good way to delete container images programmatically.",[38,48,49],{},"We had very little insight into user adoption.",[38,51,52],{},"The storage costs for GitLab.com were tremendously high.",[12,54,55,56,61],{},"Of course, all of the above issues were related. The container registry was using a fork of the ",[19,57,60],{"href":58,"rel":59},"https://github.com/distribution/distribution",[],"Distribution"," project, which had a lot of performance and usability issues when operating at the GitLab.com scale.",[12,63,64,65,70],{},"As a team, we decided that the first problem to tackle was the ever-growing cost of storage for GitLab.com. The legacy registry did not support online garbage collection. After calculating that it would take an absurd amount of downtime to run garbage collection in offline mode, we moved on to our next idea: optimize the existing ",[19,66,69],{"href":67,"rel":68},"https://gitlab.com/groups/gitlab-org/-/epics/2552",[],"offline garbage collector",".",[72,73,75],"h2",{"id":74},"optimizing-the-container-registry-code","Optimizing the container registry code",[12,77,78],{},"We optimized the code for Google Cloud Storage (GCS) and Amazon S3, and saw a 90% reduction in the time it takes to run garbage collection. This benefited many GitLab customers with container registries smaller than 100 TB. Even with the performance improvements, we estimated a staggering 64 days to run garbage collection for GitLab.com.",[12,80,81,82,86],{},"In the end, we took the Distribution project as far as we could. We needed a container registry that supported more advanced use cases than push and pull. And we needed to drastically reduce the operating costs to make the feature sustainable for Free tier users. We decided to ",[19,83,85],{"href":67,"rel":84},[],"fork the Distribution project"," and build the next-generation container registry.",[72,88,90],{"id":89},"solving-the-online-garbage-collection-problem","Solving the online garbage collection problem",[12,92,93,94,99,100,105],{},"Next, we dove head first into solving the ",[19,95,98],{"href":96,"rel":97},"https://gitlab.com/groups/gitlab-org/-/epics/2313",[],"online garbage collection"," problem for GitLab.com. Faced with petabytes of scale and the requirement to maintain our error budgets, we designed and implemented an ",[19,101,104],{"href":102,"rel":103},"https://gitlab.com/groups/gitlab-org/-/epics/5523",[],"online migration of GitLab.com"," with zero degradation in service.",[12,107,108],{},"We completed the migration 12 months ago. The results?",[35,110,111,114,117],{},[38,112,113],{},"Garbage collection deletes terabytes of data from GitLab.com each day.",[38,115,116],{},"Improved performance and reliability.",[38,118,119],{},"We removed a lot of data from object storage and saved a lot of money.",[72,121,123],{"id":122},"migrating-to-the-next-generation-container-registry","Migrating to the next-generation container registry",[12,125,126],{},"Now we want to help GitLab self-managed customers migrate to the next-generation container registry. By upgrading, you will unlock support for online garbage collection, which can save you costly downtime or escalating storage costs. You can also expect to see performance and reliability improvements for the container registry API and UI.",[12,128,129],{},"Another benefit is that you get to give early feedback to the team on what's working well or not so well for you. This feedback is valuable for GitLab and your organization because we will ensure that the next set of features being developed meets your needs.",[72,131,133],{"id":132},"the-road-ahead","The road ahead",[12,135,136],{},"New features are coming. Now that the registry leverages a metadata database for efficient queries, we can deliver significant UI and UX improvements that were impossible before. In 2024, we plan to add support for the below features.",[35,138,139,146,153,160,167,174],{},[38,140,141],{},[19,142,145],{"href":143,"rel":144},"https://gitlab.com/groups/gitlab-org/-/epics/5521",[],"Making the container registry GA for self-managed customers",[38,147,148],{},[19,149,152],{"href":150,"rel":151},"https://gitlab.com/groups/gitlab-org/-/epics/8507",[],"Improved sorting and filtering with the container registry",[38,154,155],{},[19,156,159],{"href":157,"rel":158},"https://gitlab.com/groups/gitlab-org/-/epics/11952",[],"Improved UI for manifest/multi-arch container images",[38,161,162],{},[19,163,166],{"href":164,"rel":165},"https://gitlab.com/groups/gitlab-org/-/epics/7856",[],"Improved UI for container image attestation and signing",[38,168,169],{},[19,170,173],{"href":171,"rel":172},"https://gitlab.com/gitlab-org/gitlab/-/issues/38047",[],"Improved UI for storing Helm charts in the registry",[38,175,176,177,182,183],{},"Add support for ",[19,178,181],{"href":179,"rel":180},"https://gitlab.com/groups/gitlab-org/-/epics/9825",[],"protected repositories"," and ",[19,184,187],{"href":185,"rel":186},"https://gitlab.com/gitlab-org/container-registry/-/issues/82",[],"immutable tags",[12,189,190,193,194,198],{},[15,191,192],{},"Note:"," While the registry is in ",[195,196,197],"code",{},"Beta"," for self-managed, we will be adding new features to GitLab.com that will not be immediately available to self-managed until the registry is generally available. This is to ensure that we focus on migrating as many customers as possible as efficiently as possible.",[72,200,202],{"id":201},"get-started-today","Get started today",[12,204,205,206,210],{},"We want to enable those features for self-managed customers, but we need your help. Please consider migrating to the next-generation container registry today. The best place to start is the ",[19,207,209],{"href":21,"rel":208},[],"feedback issue",", which has links to documentation, helpful tips, and the attention of the Package team here at GitLab.",[12,212,213],{},[214,215,216],"em",{},"Disclaimer: This blog contains information related to upcoming products, features, and functionality. It is important to note that the information in this blog post is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. As with all projects, the items mentioned in this blog and linked pages are subject to change or delay. The development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab.",{"title":218,"searchDepth":219,"depth":219,"links":220},"",2,[221,222,223,224,225],{"id":74,"depth":219,"text":75},{"id":89,"depth":219,"text":90},{"id":122,"depth":219,"text":123},{"id":132,"depth":219,"text":133},{"id":201,"depth":219,"text":202},"news","2023-12-04","Self-managed customers can upgrade to the container registry (Beta) and unlock online garbage collection, which can reduce costly downtime and storage.","md",null,true,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683098/Blog/Hero%20Images/container-cloud__1_.png",{},"/en-us/blog/gitlabs-next-generation-container-registry-is-now-available",{"title":5,"description":228,"ogTitle":5,"ogDescription":228,"noIndex":236,"ogImage":232,"ogUrl":237,"ogSiteName":238,"ogType":239,"canonicalUrls":237},false,"https://about.gitlab.com/blog/gitlabs-next-generation-container-registry-is-now-available","https://about.gitlab.com","article","gitlabs-next-generation-container-registry-is-now-available","en-us/blog/gitlabs-next-generation-container-registry-is-now-available",[243,244,245],"careers","performance","product","BlogPost","ijBgMdIucF-A36_BvsI3P4WSfdaKVyT5HAxCPGjvxs8",{"logo":249,"freeTrial":254,"sales":259,"login":264,"items":269,"search":596,"minimal":627,"duo":646,"switchNav":655,"pricingDeployment":666},{"config":250},{"href":251,"dataGaName":252,"dataGaLocation":253},"/","gitlab logo","header",{"text":255,"config":256},"Get free trial",{"href":257,"dataGaName":258,"dataGaLocation":253},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":260,"config":261},"Request a demo",{"href":262,"dataGaName":263,"dataGaLocation":253},"/sales/?contact-topic=request-demo","sales",{"text":265,"config":266},"Sign in",{"href":267,"dataGaName":268,"dataGaLocation":253},"https://gitlab.com/users/sign_in/","sign in",[270,299,399,404,518,574],{"text":271,"config":272,"menu":274},"Platform",{"dataNavLevelOne":273},"platform",{"type":275,"columns":276},"cards",[277,283,291],{"title":271,"description":278,"link":279},"The intelligent orchestration platform for DevSecOps",{"text":280,"config":281},"Explore our Platform",{"href":282,"dataGaName":273,"dataGaLocation":253},"/platform/",{"title":284,"description":285,"link":286},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":287,"config":288},"Meet GitLab Duo",{"href":289,"dataGaName":290,"dataGaLocation":253},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":292,"description":293,"link":294},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":295,"config":296},"Learn more",{"href":297,"dataGaName":298,"dataGaLocation":253},"/why-gitlab/","why gitlab",{"text":300,"left":231,"config":301,"menu":303},"Product",{"dataNavLevelOne":302},"solutions",{"type":304,"link":305,"columns":309,"feature":378},"lists",{"text":306,"config":307},"View all Solutions",{"href":308,"dataGaName":302,"dataGaLocation":253},"/solutions/",[310,334,357],{"title":311,"description":312,"link":313,"items":318},"Automation","CI/CD and automation to accelerate deployment",{"config":314},{"icon":315,"href":316,"dataGaName":317,"dataGaLocation":253},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[319,323,326,330],{"text":320,"config":321},"CI/CD",{"href":322,"dataGaLocation":253,"dataGaName":320},"/solutions/continuous-integration/",{"text":284,"config":324},{"href":289,"dataGaLocation":253,"dataGaName":325},"gitlab duo agent platform - product menu",{"text":327,"config":328},"Source Code Management",{"href":329,"dataGaLocation":253,"dataGaName":327},"/solutions/source-code-management/",{"text":331,"config":332},"Automated Software Delivery",{"href":316,"dataGaLocation":253,"dataGaName":333},"Automated software delivery",{"title":335,"description":336,"link":337,"items":342},"Security","Deliver code faster without compromising security",{"config":338},{"href":339,"dataGaName":340,"dataGaLocation":253,"icon":341},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[343,347,352],{"text":344,"config":345},"Application Security Testing",{"href":339,"dataGaName":346,"dataGaLocation":253},"Application security testing",{"text":348,"config":349},"Software Supply Chain Security",{"href":350,"dataGaLocation":253,"dataGaName":351},"/solutions/supply-chain/","Software supply chain security",{"text":353,"config":354},"Software Compliance",{"href":355,"dataGaName":356,"dataGaLocation":253},"/solutions/software-compliance/","software compliance",{"title":358,"link":359,"items":364},"Measurement",{"config":360},{"icon":361,"href":362,"dataGaName":363,"dataGaLocation":253},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[365,369,373],{"text":366,"config":367},"Visibility & Measurement",{"href":362,"dataGaLocation":253,"dataGaName":368},"Visibility and Measurement",{"text":370,"config":371},"Value Stream Management",{"href":372,"dataGaLocation":253,"dataGaName":370},"/solutions/value-stream-management/",{"text":374,"config":375},"Analytics & Insights",{"href":376,"dataGaLocation":253,"dataGaName":377},"/solutions/analytics-and-insights/","Analytics and insights",{"title":379,"type":304,"items":380},"GitLab for",[381,387,393],{"text":382,"config":383},"Enterprise",{"icon":384,"href":385,"dataGaLocation":253,"dataGaName":386},"Building","/enterprise/","enterprise",{"text":388,"config":389},"Small Business",{"icon":390,"href":391,"dataGaLocation":253,"dataGaName":392},"Work","/small-business/","small business",{"text":394,"config":395},"Public Sector",{"icon":396,"href":397,"dataGaLocation":253,"dataGaName":398},"Organization","/solutions/public-sector/","public sector",{"text":400,"config":401},"Pricing",{"href":402,"dataGaName":403,"dataGaLocation":253,"dataNavLevelOne":403},"/pricing/","pricing",{"text":405,"config":406,"menu":408},"Resources",{"dataNavLevelOne":407},"resources",{"type":304,"link":409,"columns":413,"feature":507},{"text":410,"config":411},"View all resources",{"href":412,"dataGaName":407,"dataGaLocation":253},"/resources/",[414,447,474],{"title":415,"items":416},"Getting started",[417,422,427,432,437,442],{"text":418,"config":419},"Install",{"href":420,"dataGaName":421,"dataGaLocation":253},"/install/","install",{"text":423,"config":424},"Quick start guides",{"href":425,"dataGaName":426,"dataGaLocation":253},"/get-started/","quick setup checklists",{"text":428,"config":429},"Learn",{"href":430,"dataGaLocation":253,"dataGaName":431},"https://university.gitlab.com/","learn",{"text":433,"config":434},"Product documentation",{"href":435,"dataGaName":436,"dataGaLocation":253},"https://docs.gitlab.com/","product documentation",{"text":438,"config":439},"Best practice videos",{"href":440,"dataGaName":441,"dataGaLocation":253},"/getting-started-videos/","best practice videos",{"text":443,"config":444},"Integrations",{"href":445,"dataGaName":446,"dataGaLocation":253},"/integrations/","integrations",{"title":448,"items":449},"Discover",[450,455,460,465,469],{"text":451,"config":452},"Customer success stories",{"href":453,"dataGaName":454,"dataGaLocation":253},"/customers/","customer success stories",{"text":456,"config":457},"Blog",{"href":458,"dataGaName":459,"dataGaLocation":253},"/blog/","blog",{"text":461,"config":462},"Demo Hub",{"href":463,"dataGaName":464,"dataGaLocation":253},"/demo-hub/","demo hub",{"text":466,"config":467},"The Source",{"href":468,"dataGaName":459,"dataGaLocation":253},"/the-source/",{"text":470,"config":471},"Remote",{"href":472,"dataGaName":473,"dataGaLocation":253},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":475,"items":476},"Connect",[477,482,487,492,497,502],{"text":478,"config":479},"GitLab Services",{"href":480,"dataGaName":481,"dataGaLocation":253},"/services/","services",{"text":483,"config":484},"Contribute",{"href":485,"dataGaName":486,"dataGaLocation":253},"https://contributors.gitlab.com","contribute",{"text":488,"config":489},"Community",{"href":490,"dataGaName":491,"dataGaLocation":253},"/community/","community",{"text":493,"config":494},"Forum",{"href":495,"dataGaName":496,"dataGaLocation":253},"https://forum.gitlab.com/","forum",{"text":498,"config":499},"Events",{"href":500,"dataGaName":501,"dataGaLocation":253},"/events/","events",{"text":503,"config":504},"Partners",{"href":505,"dataGaName":506,"dataGaLocation":253},"/partners/","partners",{"config":508,"title":511,"text":512,"link":513},{"background":509,"textColor":510},"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":514,"config":515},"Read the latest",{"href":516,"dataGaName":517,"dataGaLocation":253},"/whats-new/","whats new",{"text":519,"config":520,"menu":522},"Company",{"dataNavLevelOne":521},"company",{"type":304,"columns":523},[524],{"items":525},[526,531,537,539,544,549,554,559,564,569],{"text":527,"config":528},"About",{"href":529,"dataGaName":530,"dataGaLocation":253},"/company/","about",{"text":532,"config":533,"footerGa":536},"Jobs",{"href":534,"dataGaName":535,"dataGaLocation":253},"/jobs/","jobs",{"dataGaName":535},{"text":498,"config":538},{"href":500,"dataGaName":501,"dataGaLocation":253},{"text":540,"config":541},"Leadership",{"href":542,"dataGaName":543,"dataGaLocation":253},"/company/team/e-group/","leadership",{"text":545,"config":546},"Handbook",{"href":547,"dataGaName":548,"dataGaLocation":253},"https://handbook.gitlab.com/","handbook",{"text":550,"config":551},"Investor relations",{"href":552,"dataGaName":553,"dataGaLocation":253},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":555,"config":556},"Trust Center",{"href":557,"dataGaName":558,"dataGaLocation":253},"/security/","trust center",{"text":560,"config":561},"AI Transparency Center",{"href":562,"dataGaName":563,"dataGaLocation":253},"/ai-transparency-center/","ai transparency center",{"text":565,"config":566},"Newsletter",{"href":567,"dataGaName":568,"dataGaLocation":253},"/company/contact/#contact-forms","newsletter",{"text":570,"config":571},"Press",{"href":572,"dataGaName":573,"dataGaLocation":253},"/press/","press",{"text":575,"config":576,"menu":577},"Contact us",{"dataNavLevelOne":521},{"type":304,"columns":578},[579],{"items":580},[581,586,591],{"text":582,"config":583},"Talk to sales",{"href":584,"dataGaName":585,"dataGaLocation":253},"/sales/","talk to sales",{"text":587,"config":588},"Support portal",{"href":589,"dataGaName":590,"dataGaLocation":253},"https://support.gitlab.com/hc/en-us","support portal",{"text":592,"config":593},"Customer portal",{"href":594,"dataGaName":595,"dataGaLocation":253},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":597,"login":598,"suggestions":605},"Close",{"text":599,"link":600},"To search repositories and projects, login to",{"text":601,"config":602},"gitlab.com",{"href":267,"dataGaName":603,"dataGaLocation":604},"search login","search",{"text":606,"default":607},"Suggestions",[608,610,614,616,620,624],{"text":284,"config":609},{"href":289,"dataGaName":284,"dataGaLocation":604},{"text":611,"config":612},"Code Suggestions (AI)",{"href":613,"dataGaName":611,"dataGaLocation":604},"/solutions/code-suggestions/",{"text":320,"config":615},{"href":322,"dataGaName":320,"dataGaLocation":604},{"text":617,"config":618},"GitLab on AWS",{"href":619,"dataGaName":617,"dataGaLocation":604},"/partners/technology-partners/aws/",{"text":621,"config":622},"GitLab on Google Cloud",{"href":623,"dataGaName":621,"dataGaLocation":604},"/partners/technology-partners/google-cloud-platform/",{"text":625,"config":626},"Why GitLab?",{"href":297,"dataGaName":625,"dataGaLocation":604},{"freeTrial":628,"mobileIcon":633,"desktopIcon":638,"secondaryButton":641},{"text":629,"config":630},"Start free trial",{"href":631,"dataGaName":258,"dataGaLocation":632},"https://gitlab.com/-/trials/new/","nav",{"altText":634,"config":635},"Gitlab Icon",{"src":636,"dataGaName":637,"dataGaLocation":632},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":634,"config":639},{"src":640,"dataGaName":637,"dataGaLocation":632},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":642,"config":643},"Get Started",{"href":644,"dataGaName":645,"dataGaLocation":632},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":647,"mobileIcon":651,"desktopIcon":653},{"text":648,"config":649},"Learn more about GitLab Duo",{"href":289,"dataGaName":650,"dataGaLocation":632},"gitlab duo",{"altText":634,"config":652},{"src":636,"dataGaName":637,"dataGaLocation":632},{"altText":634,"config":654},{"src":640,"dataGaName":637,"dataGaLocation":632},{"button":656,"mobileIcon":661,"desktopIcon":663},{"text":657,"config":658},"/switch",{"href":659,"dataGaName":660,"dataGaLocation":632},"#contact","switch",{"altText":634,"config":662},{"src":636,"dataGaName":637,"dataGaLocation":632},{"altText":634,"config":664},{"src":665,"dataGaName":637,"dataGaLocation":632},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":667,"mobileIcon":672,"desktopIcon":674},{"text":668,"config":669},"Back to pricing",{"href":402,"dataGaName":670,"dataGaLocation":632,"icon":671},"back to pricing","GoBack",{"altText":634,"config":673},{"src":636,"dataGaName":637,"dataGaLocation":632},{"altText":634,"config":675},{"src":640,"dataGaName":637,"dataGaLocation":632},{"title":677,"titleMobile":678,"button":679,"config":684},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":295,"config":680},{"href":681,"dataGaName":682,"dataGaLocation":683},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":685,"disabled":236},"release",{"data":687},{"text":688,"source":689,"edit":695,"contribute":700,"config":705,"items":710,"minimal":920},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":690,"config":691},"View page source",{"href":692,"dataGaName":693,"dataGaLocation":694},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":696,"config":697},"Edit this page",{"href":698,"dataGaName":699,"dataGaLocation":694},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":701,"config":702},"Please contribute",{"href":703,"dataGaName":704,"dataGaLocation":694},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":706,"facebook":707,"youtube":708,"linkedin":709},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[711,758,812,856,888],{"title":400,"links":712,"subMenu":727},[713,717,722],{"text":714,"config":715},"View plans",{"href":402,"dataGaName":716,"dataGaLocation":694},"view plans",{"text":718,"config":719},"Why Premium?",{"href":720,"dataGaName":721,"dataGaLocation":694},"/pricing/premium/","why premium",{"text":723,"config":724},"Why Ultimate?",{"href":725,"dataGaName":726,"dataGaLocation":694},"/pricing/ultimate/","why ultimate",[728],{"title":729,"links":730},"Contact Us",[731,734,736,738,743,748,753],{"text":732,"config":733},"Contact sales",{"href":584,"dataGaName":263,"dataGaLocation":694},{"text":587,"config":735},{"href":589,"dataGaName":590,"dataGaLocation":694},{"text":592,"config":737},{"href":594,"dataGaName":595,"dataGaLocation":694},{"text":739,"config":740},"Status",{"href":741,"dataGaName":742,"dataGaLocation":694},"https://status.gitlab.com/","status",{"text":744,"config":745},"Terms of use",{"href":746,"dataGaName":747,"dataGaLocation":694},"/terms/","terms of use",{"text":749,"config":750},"Privacy statement",{"href":751,"dataGaName":752,"dataGaLocation":694},"/privacy/","privacy statement",{"text":754,"config":755},"Cookie preferences",{"dataGaName":756,"dataGaLocation":694,"id":757,"isOneTrustButton":231},"cookie preferences","ot-sdk-btn",{"title":300,"links":759,"subMenu":768},[760,764],{"text":761,"config":762},"DevSecOps platform",{"href":282,"dataGaName":763,"dataGaLocation":694},"devsecops platform",{"text":765,"config":766},"AI-Assisted Development",{"href":289,"dataGaName":767,"dataGaLocation":694},"ai-assisted development",[769],{"title":770,"links":771},"Topics",[772,777,782,787,792,797,802,807],{"text":773,"config":774},"CICD",{"href":775,"dataGaName":776,"dataGaLocation":694},"/topics/ci-cd/","cicd",{"text":778,"config":779},"GitOps",{"href":780,"dataGaName":781,"dataGaLocation":694},"/topics/gitops/","gitops",{"text":783,"config":784},"DevOps",{"href":785,"dataGaName":786,"dataGaLocation":694},"/topics/devops/","devops",{"text":788,"config":789},"Version Control",{"href":790,"dataGaName":791,"dataGaLocation":694},"/topics/version-control/","version control",{"text":793,"config":794},"DevSecOps",{"href":795,"dataGaName":796,"dataGaLocation":694},"/topics/devsecops/","devsecops",{"text":798,"config":799},"Cloud Native",{"href":800,"dataGaName":801,"dataGaLocation":694},"/topics/cloud-native/","cloud native",{"text":803,"config":804},"AI for Coding",{"href":805,"dataGaName":806,"dataGaLocation":694},"/topics/devops/ai-for-coding/","ai for coding",{"text":808,"config":809},"Agentic AI",{"href":810,"dataGaName":811,"dataGaLocation":694},"/topics/agentic-ai/","agentic ai",{"title":813,"links":814},"Solutions",[815,817,819,824,828,831,835,838,840,843,846,851],{"text":344,"config":816},{"href":339,"dataGaName":344,"dataGaLocation":694},{"text":333,"config":818},{"href":316,"dataGaName":317,"dataGaLocation":694},{"text":820,"config":821},"Agile development",{"href":822,"dataGaName":823,"dataGaLocation":694},"/solutions/agile-delivery/","agile delivery",{"text":825,"config":826},"SCM",{"href":329,"dataGaName":827,"dataGaLocation":694},"source code management",{"text":773,"config":829},{"href":322,"dataGaName":830,"dataGaLocation":694},"continuous integration & delivery",{"text":832,"config":833},"Value stream management",{"href":372,"dataGaName":834,"dataGaLocation":694},"value stream management",{"text":778,"config":836},{"href":837,"dataGaName":781,"dataGaLocation":694},"/solutions/gitops/",{"text":382,"config":839},{"href":385,"dataGaName":386,"dataGaLocation":694},{"text":841,"config":842},"Small business",{"href":391,"dataGaName":392,"dataGaLocation":694},{"text":844,"config":845},"Public sector",{"href":397,"dataGaName":398,"dataGaLocation":694},{"text":847,"config":848},"Education",{"href":849,"dataGaName":850,"dataGaLocation":694},"/solutions/education/","education",{"text":852,"config":853},"Financial services",{"href":854,"dataGaName":855,"dataGaLocation":694},"/solutions/finance/","financial services",{"title":405,"links":857},[858,860,862,864,867,869,872,874,876,878,880,882,884,886],{"text":418,"config":859},{"href":420,"dataGaName":421,"dataGaLocation":694},{"text":423,"config":861},{"href":425,"dataGaName":426,"dataGaLocation":694},{"text":428,"config":863},{"href":430,"dataGaName":431,"dataGaLocation":694},{"text":433,"config":865},{"href":435,"dataGaName":866,"dataGaLocation":694},"docs",{"text":456,"config":868},{"href":458,"dataGaName":459,"dataGaLocation":694},{"text":870,"config":871},"What's new",{"href":516,"dataGaName":517,"dataGaLocation":694},{"text":451,"config":873},{"href":453,"dataGaName":454,"dataGaLocation":694},{"text":470,"config":875},{"href":472,"dataGaName":473,"dataGaLocation":694},{"text":478,"config":877},{"href":480,"dataGaName":481,"dataGaLocation":694},{"text":483,"config":879},{"href":485,"dataGaName":486,"dataGaLocation":694},{"text":488,"config":881},{"href":490,"dataGaName":491,"dataGaLocation":694},{"text":493,"config":883},{"href":495,"dataGaName":496,"dataGaLocation":694},{"text":498,"config":885},{"href":500,"dataGaName":501,"dataGaLocation":694},{"text":503,"config":887},{"href":505,"dataGaName":506,"dataGaLocation":694},{"title":519,"links":889},[890,892,894,896,898,900,904,909,911,913,915],{"text":527,"config":891},{"href":529,"dataGaName":521,"dataGaLocation":694},{"text":532,"config":893},{"href":534,"dataGaName":535,"dataGaLocation":694},{"text":540,"config":895},{"href":542,"dataGaName":543,"dataGaLocation":694},{"text":545,"config":897},{"href":547,"dataGaName":548,"dataGaLocation":694},{"text":550,"config":899},{"href":552,"dataGaName":553,"dataGaLocation":694},{"text":901,"config":902},"Sustainability",{"href":903,"dataGaName":901,"dataGaLocation":694},"/sustainability/",{"text":905,"config":906},"Diversity, inclusion and belonging (DIB)",{"href":907,"dataGaName":908,"dataGaLocation":694},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":555,"config":910},{"href":557,"dataGaName":558,"dataGaLocation":694},{"text":565,"config":912},{"href":567,"dataGaName":568,"dataGaLocation":694},{"text":570,"config":914},{"href":572,"dataGaName":573,"dataGaLocation":694},{"text":916,"config":917},"Modern Slavery Transparency Statement",{"href":918,"dataGaName":919,"dataGaLocation":694},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":921},[922,925,928],{"text":923,"config":924},"Terms",{"href":746,"dataGaName":747,"dataGaLocation":694},{"text":926,"config":927},"Cookies",{"dataGaName":756,"dataGaLocation":694,"id":757,"isOneTrustButton":231},{"text":929,"config":930},"Privacy",{"href":751,"dataGaName":752,"dataGaLocation":694},[932],{"id":933,"title":7,"body":230,"config":934,"content":936,"description":230,"extension":940,"meta":941,"navigation":231,"path":942,"seo":943,"stem":944,"__hash__":945},"blogAuthors/en-us/blog/authors/tim-rizzi.yml",{"template":935},"BlogAuthor",{"name":7,"config":937},{"headshot":938,"ctfId":939},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661866/Blog/Author%20Headshots/trizzi-headshot.jpg","trizzi","yml",{},"/en-us/blog/authors/tim-rizzi",{},"en-us/blog/authors/tim-rizzi","ADPqrpcnKveFJS0m_zFV0VLtb_h_txu59QVgz_YwKMc",[947,955,962],{"title":948,"description":949,"heroImage":950,"category":226,"date":951,"authors":952,"slug":954,"externalUrl":230},"GitLab named a Leader in the 2026 Gartner® Magic Quadrant™ for DevSecOps Platforms","Agents made coding fast. GitLab is the Intelligent Orchestration Platform for DevSecOps that brings speed with control for the rest of the software lifecycle.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-06-17",[953],"Manav Khurana","gitlab-leader-2026-gartner-mq-devsecops-platforms",{"title":956,"description":957,"heroImage":958,"category":226,"date":951,"authors":959,"slug":961,"externalUrl":230},"GitLab and Capgemini accelerate DevSecOps transformation","The global alliance helps organizations modernize software delivery, secure their supply chain, and bring AI into development workflows.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781279411/n3pkmddd2eswa8qbu06z.png",[960],"Alex Picker","gitlab-and-capgemini-global-alliance-partnership",{"title":963,"description":964,"heroImage":965,"category":226,"date":951,"authors":966,"slug":967,"externalUrl":230},"Introducing the 2026 EMEA GitLab Partner Award winners","Learn about the EMEA partners who made an outstanding impact over the past year.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781608381/biycl2ib2kpsbspjlac7.png",[960],"2026-emea-gitlab-partner-awards",{"promotions":969},[970,984,995,1007],{"id":971,"categories":972,"header":974,"text":975,"button":976,"image":981},"ai-modernization",[973],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":977,"config":978},"Get your AI maturity score",{"href":979,"dataGaName":980,"dataGaLocation":459},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":982},{"src":983},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":985,"categories":986,"header":987,"text":975,"button":988,"image":992},"devops-modernization",[245,796],"Are you just managing tools or shipping innovation?",{"text":989,"config":990},"Get your DevOps maturity score",{"href":991,"dataGaName":980,"dataGaLocation":459},"/assessments/devops-modernization-assessment/",{"config":993},{"src":994},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":996,"categories":997,"header":999,"text":975,"button":1000,"image":1004},"security-modernization",[998],"security","Are you trading speed for security?",{"text":1001,"config":1002},"Get your security maturity score",{"href":1003,"dataGaName":980,"dataGaLocation":459},"/assessments/security-modernization-assessment/",{"config":1005},{"src":1006},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1008,"paths":1009,"header":1012,"text":1013,"button":1014,"image":1019},"github-azure-migration",[1010,1011],"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":1015,"config":1016},"See how GitLab compares to GitHub",{"href":1017,"dataGaName":1018,"dataGaLocation":459},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1020},{"src":994},{"header":1022,"blurb":1023,"button":1024,"secondaryButton":1029},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1025,"config":1026},"Get your free trial",{"href":1027,"dataGaName":258,"dataGaLocation":1028},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":732,"config":1030},{"href":584,"dataGaName":263,"dataGaLocation":1028},1786803749022]