[{"data":1,"prerenderedAt":1033},["ShallowReactive",2],{"/blog/feature-flags-continuous-delivery":3,"navigation-en-us":251,"banner-en-us":677,"footer-en-us":687,"blog-post-authors-en-us-Chrissie Buchanan":928,"blog-related-posts-en-us-feature-flags-continuous-delivery":943,"blog-promotions-en-us":969,"next-steps-en-us":1023},{"id":4,"title":5,"authors":6,"body":8,"category":230,"date":231,"description":232,"extension":233,"externalUrl":234,"faq":234,"featured":235,"heroImage":236,"meta":237,"navigation":238,"path":239,"seo":240,"slug":244,"stem":245,"tags":246,"template":249,"updatedDate":234,"__hash__":250},"blogPosts/en-us/blog/feature-flags-continuous-delivery.md","Learn more about Feature Flags: The next step in Progressive Delivery",[7],"Chrissie Buchanan",{"type":9,"value":10,"toc":223},"minimark",[11,25,33,41,46,54,57,65,94,107,111,114,117,132,148,152,165,168,181,184,203,209],[12,13,14,19,20,24],"p",{},[15,16,18],"a",{"href":17},"/topics/devops/","DevOps"," is always evolving. Continuous delivery made a major impact on the way software is deployed, but we don’t think the innovation stops there. As we move into more of a ",[15,21,23],{"href":22},"/topics/multicloud/","multi-cloud",", hybrid development world, continuous delivery has continued to change into something more “progressive.”",[12,26,27,32],{},[15,28,31],{"href":29,"rel":30},"https://redmonk.com/jgovernor/2018/08/06/towards-progressive-delivery/",[],"Progressive Delivery"," isn’t exactly the new idea that continuous delivery was; it’s simply a continuation of it. What Progressive Delivery does is give more precision to the delivery process through new ideas and best practices, reducing the risks of one big, risky deployment. At GitLab, we think Progressive Delivery is the next logical evolution of DevOps beyond CI/CD and will become the default way to release software in the future.",[12,34,35,36,40],{},"We previously discussed ",[15,37,39],{"href":38},"/blog/progressive-delivery-using-review-apps/","how Review Apps can enable Progressive Delivery",", and today we’ll discuss the targeted rollout process of Feature Flags.",[42,43,45],"h2",{"id":44},"what-are-feature-flags","What are Feature Flags?",[12,47,48,53],{},[15,49,52],{"href":50,"rel":51},"https://docs.gitlab.com/operations/feature_flags/",[],"Feature Flags"," (also known as feature toggles, feature flippers, or feature switches) give developers the ability to roll out features selectively without changing the source code. Incomplete features can be merged into the production code but flagged on or off, which allows many small, incremental versions of software to be delivered without the cost of constant branching and merging.",[12,55,56],{},"Feature Flags are designed to minimize the blast radius of releasing new features. By utilizing Feature Flags, developers can release to a subset of users and roll back easily through toggling, leaving the live code intact. A feature can also be tested before it’s completed and ready for release. This technique allows developers to release a version of a product that has unfinished features which are hidden (toggled) so they do not appear in the user interface.",[12,58,59,64],{},[15,60,63],{"href":61,"rel":62},"https://martinfowler.com/articles/feature-toggles.html",[],"Martin Fowler organizes Feature Flags into four different categories"," based on how long they’re typically in place and how dynamic they should be:",[66,67,68,76,82,88],"ul",{},[69,70,71,75],"li",{},[72,73,74],"strong",{},"Release toggles",": A temporary flag which allows incomplete, latent code to be shipped to production and turned on or off, or perhaps never enabled at all.",[69,77,78,81],{},[72,79,80],{},"Experiment toggles",": A short-lived toggle usually used for multivariate A/B testing, kept in place only long enough to gather results.",[69,83,84,87],{},[72,85,86],{},"Ops toggles",": For releases that have unclear performance implications, this toggle allows system administrators to roll back quickly, but it’s not unheard of for long-term toggles to remain in place as a kill switch.",[69,89,90,93],{},[72,91,92],{},"Permission toggles",": Manages features for specific users, such as “premium” features, alpha or beta features, or even internal features. These toggles can be very long-lived.",[12,95,96,97,101,102,106],{},"Feature Flags can be a quick way to do ",[15,98,100],{"href":99},"/topics/version-control/","version control"," so that ",[15,103,105],{"href":104},"/topics/continuous-delivery/","continuous delivery"," remains continuous. Their ability to turn off or on with simple commands makes Feature Flags a low-risk option for introducing new features. While they’re easy to use, they can have some drawbacks if not implemented properly.",[42,108,110],{"id":109},"working-with-feature-flags","Working with Feature Flags",[12,112,113],{},"Some worry about the added complexity with Feature Flags, since code may need to be tested with toggles on and off, essentially doubling the load. While it’s not necessary to test every toggle configuration, a best practice is for developers to test code that has the greatest likelihood of going live in production. According to Martin Fowler, a good convention is to enable existing or legacy behavior when a Feature Flag is Off, and new or future behavior when it's On.",[12,115,116],{},"Another risk of using Feature Flags is stale flags, a situation when flags are left in the code and forgotten about. As teams add more and more flags into their code, it can become harder to keep track of and verify the flags.",[12,118,119,120,125,126,131],{},"Today, organizations rely on feature management systems such as ",[15,121,124],{"href":122,"rel":123},"https://launchdarkly.com/",[],"Launch Darkly"," or ",[15,127,130],{"href":128,"rel":129},"https://blog.optimizely.com/2017/10/18/feature-management/",[],"Optimizely"," in order to use Feature Flags. As with any link in a toolchain, this adds an additional level of oversight that can be hard to manage and maintain. Analysts recognize that feature-toggling capabilities are becoming more of what's fundamentally needed for a continuous delivery platform. While we are still in the early stages of Feature Flags, we do have some alpha Feature Flag capabilities already built into GitLab you can try out today, and we will be launching additional functionality in 12.2:",[66,133,134,141],{},[69,135,136],{},[15,137,140],{"href":138,"rel":139},"https://gitlab.com/gitlab-org/gitlab-ee/issues/11459",[],"Feature Flags enabled for specific users",[69,142,143],{},[15,144,147],{"href":145,"rel":146},"https://gitlab.com/gitlab-org/gitlab-ee/issues/8240",[],"Percent rollout per environment",[42,149,151],{"id":150},"gitlab-and-progressive-delivery","GitLab and Progressive Delivery",[12,153,154,155,159,160,164],{},"As we continue to iterate on our product vision for CI/CD, we’re adopting a Progressive Delivery mindset for how we implement new features into GitLab. As a complete ",[15,156,158],{"href":157},"/solutions/devops-platform/","DevOps platform",", delivered as a ",[15,161,163],{"href":162},"/topics/single-application/","single application",", it’s important for us to offer a comprehensive solution that offers the latest best practices. Review Apps, Canary Deployments, and Feature Flags are just some of the ways we’re bringing Progressive Delivery to the GitLab community.",[12,166,167],{},"To learn more about how we’re using Feature Flags and Feature flag best practicies in GitLab, watch this deep dive with our Director of Product Management, Jason Yavorska.",[169,170,173,174],"figure",{"className":171},[172],"video_container","\n  ",[175,176,180],"iframe",{"src":177,"frameBorder":178,"allowFullScreen":179},"https://www.youtube.com/embed/TSSqNUhbbmQ","0","true"," ",[12,182,183],{},"Feature Flags can be a useful way to validate and measure performance before rolling out a feature to a broader audience. High visibility makes DevOps more efficient, and integrating Feature Flags into the same application where your code repositories, CI/CD, project planning, and monitoring occurs can overcome many of the challenges associated with Feature Flags.",[12,185,186,187,192,193,196,197,202],{},"Learn how GitLab’s built-in CI/CD helps teams implement Progressive Delivery tools such as ",[15,188,191],{"href":189,"rel":190},"https://docs.gitlab.com/ci/review_apps/",[],"Review Apps",", ",[15,194,52],{"href":50,"rel":195},[],", and ",[15,198,201],{"href":199,"rel":200},"https://docs.gitlab.com/user/project/canary_deployments/",[],"Canary Deployments",", without the complicated integrations and plugin maintenance.",[12,204,205],{},[15,206,208],{"href":207},"/solutions/continuous-integration/","Explore GitLab CI/CD",[12,210,211,212,217,218],{},"Cover image by ",[15,213,216],{"href":214,"rel":215},"https://unsplash.com/@chrislawton?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Chris Lawton"," on ",[15,219,222],{"href":220,"rel":221},"https://unsplash.com/search/photos/flags?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":224,"searchDepth":225,"depth":225,"links":226},"",2,[227,228,229],{"id":44,"depth":225,"text":45},{"id":109,"depth":225,"text":110},{"id":150,"depth":225,"text":151},"engineering","2019-08-06","How Feature Flags are continuing the next evolution of continuous delivery.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670020/Blog/Hero%20Images/feature-flags.jpg",{},true,"/en-us/blog/feature-flags-continuous-delivery",{"title":5,"description":232,"ogTitle":5,"ogDescription":232,"noIndex":235,"ogImage":236,"ogUrl":241,"ogSiteName":242,"ogType":243,"canonicalUrls":241},"https://about.gitlab.com/blog/feature-flags-continuous-delivery","https://about.gitlab.com","article","feature-flags-continuous-delivery","en-us/blog/feature-flags-continuous-delivery",[247,248],"CI/CD","features","BlogPost","Ej3Fq1uK06D7tjLc2DxycXneS6r2E2-aJa_ctZhESaY",{"logo":252,"freeTrial":257,"sales":262,"login":267,"items":272,"search":597,"minimal":628,"duo":647,"switchNav":656,"pricingDeployment":667},{"config":253},{"href":254,"dataGaName":255,"dataGaLocation":256},"/","gitlab logo","header",{"text":258,"config":259},"Get free trial",{"href":260,"dataGaName":261,"dataGaLocation":256},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":263,"config":264},"Request a demo",{"href":265,"dataGaName":266,"dataGaLocation":256},"/sales/?contact-topic=request-demo","sales",{"text":268,"config":269},"Sign in",{"href":270,"dataGaName":271,"dataGaLocation":256},"https://gitlab.com/users/sign_in/","sign in",[273,302,400,405,519,575],{"text":274,"config":275,"menu":277},"Platform",{"dataNavLevelOne":276},"platform",{"type":278,"columns":279},"cards",[280,286,294],{"title":274,"description":281,"link":282},"The intelligent orchestration platform for DevSecOps",{"text":283,"config":284},"Explore our Platform",{"href":285,"dataGaName":276,"dataGaLocation":256},"/platform/",{"title":287,"description":288,"link":289},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":290,"config":291},"Meet GitLab Duo",{"href":292,"dataGaName":293,"dataGaLocation":256},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":295,"description":296,"link":297},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":298,"config":299},"Learn more",{"href":300,"dataGaName":301,"dataGaLocation":256},"/why-gitlab/","why gitlab",{"text":303,"left":238,"config":304,"menu":306},"Product",{"dataNavLevelOne":305},"solutions",{"type":307,"link":308,"columns":312,"feature":379},"lists",{"text":309,"config":310},"View all Solutions",{"href":311,"dataGaName":305,"dataGaLocation":256},"/solutions/",[313,335,358],{"title":314,"description":315,"link":316,"items":321},"Automation","CI/CD and automation to accelerate deployment",{"config":317},{"icon":318,"href":319,"dataGaName":320,"dataGaLocation":256},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[322,324,327,331],{"text":247,"config":323},{"href":207,"dataGaLocation":256,"dataGaName":247},{"text":287,"config":325},{"href":292,"dataGaLocation":256,"dataGaName":326},"gitlab duo agent platform - product menu",{"text":328,"config":329},"Source Code Management",{"href":330,"dataGaLocation":256,"dataGaName":328},"/solutions/source-code-management/",{"text":332,"config":333},"Automated Software Delivery",{"href":319,"dataGaLocation":256,"dataGaName":334},"Automated software delivery",{"title":336,"description":337,"link":338,"items":343},"Security","Deliver code faster without compromising security",{"config":339},{"href":340,"dataGaName":341,"dataGaLocation":256,"icon":342},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[344,348,353],{"text":345,"config":346},"Application Security Testing",{"href":340,"dataGaName":347,"dataGaLocation":256},"Application security testing",{"text":349,"config":350},"Software Supply Chain Security",{"href":351,"dataGaLocation":256,"dataGaName":352},"/solutions/supply-chain/","Software supply chain security",{"text":354,"config":355},"Software Compliance",{"href":356,"dataGaName":357,"dataGaLocation":256},"/solutions/software-compliance/","software compliance",{"title":359,"link":360,"items":365},"Measurement",{"config":361},{"icon":362,"href":363,"dataGaName":364,"dataGaLocation":256},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[366,370,374],{"text":367,"config":368},"Visibility & Measurement",{"href":363,"dataGaLocation":256,"dataGaName":369},"Visibility and Measurement",{"text":371,"config":372},"Value Stream Management",{"href":373,"dataGaLocation":256,"dataGaName":371},"/solutions/value-stream-management/",{"text":375,"config":376},"Analytics & Insights",{"href":377,"dataGaLocation":256,"dataGaName":378},"/solutions/analytics-and-insights/","Analytics and insights",{"title":380,"type":307,"items":381},"GitLab for",[382,388,394],{"text":383,"config":384},"Enterprise",{"icon":385,"href":386,"dataGaLocation":256,"dataGaName":387},"Building","/enterprise/","enterprise",{"text":389,"config":390},"Small Business",{"icon":391,"href":392,"dataGaLocation":256,"dataGaName":393},"Work","/small-business/","small business",{"text":395,"config":396},"Public Sector",{"icon":397,"href":398,"dataGaLocation":256,"dataGaName":399},"Organization","/solutions/public-sector/","public sector",{"text":401,"config":402},"Pricing",{"href":403,"dataGaName":404,"dataGaLocation":256,"dataNavLevelOne":404},"/pricing/","pricing",{"text":406,"config":407,"menu":409},"Resources",{"dataNavLevelOne":408},"resources",{"type":307,"link":410,"columns":414,"feature":508},{"text":411,"config":412},"View all resources",{"href":413,"dataGaName":408,"dataGaLocation":256},"/resources/",[415,448,475],{"title":416,"items":417},"Getting started",[418,423,428,433,438,443],{"text":419,"config":420},"Install",{"href":421,"dataGaName":422,"dataGaLocation":256},"/install/","install",{"text":424,"config":425},"Quick start guides",{"href":426,"dataGaName":427,"dataGaLocation":256},"/get-started/","quick setup checklists",{"text":429,"config":430},"Learn",{"href":431,"dataGaLocation":256,"dataGaName":432},"https://university.gitlab.com/","learn",{"text":434,"config":435},"Product documentation",{"href":436,"dataGaName":437,"dataGaLocation":256},"https://docs.gitlab.com/","product documentation",{"text":439,"config":440},"Best practice videos",{"href":441,"dataGaName":442,"dataGaLocation":256},"/getting-started-videos/","best practice videos",{"text":444,"config":445},"Integrations",{"href":446,"dataGaName":447,"dataGaLocation":256},"/integrations/","integrations",{"title":449,"items":450},"Discover",[451,456,461,466,470],{"text":452,"config":453},"Customer success stories",{"href":454,"dataGaName":455,"dataGaLocation":256},"/customers/","customer success stories",{"text":457,"config":458},"Blog",{"href":459,"dataGaName":460,"dataGaLocation":256},"/blog/","blog",{"text":462,"config":463},"Demo Hub",{"href":464,"dataGaName":465,"dataGaLocation":256},"/demo-hub/","demo hub",{"text":467,"config":468},"The Source",{"href":469,"dataGaName":460,"dataGaLocation":256},"/the-source/",{"text":471,"config":472},"Remote",{"href":473,"dataGaName":474,"dataGaLocation":256},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":476,"items":477},"Connect",[478,483,488,493,498,503],{"text":479,"config":480},"GitLab Services",{"href":481,"dataGaName":482,"dataGaLocation":256},"/services/","services",{"text":484,"config":485},"Contribute",{"href":486,"dataGaName":487,"dataGaLocation":256},"https://contributors.gitlab.com","contribute",{"text":489,"config":490},"Community",{"href":491,"dataGaName":492,"dataGaLocation":256},"/community/","community",{"text":494,"config":495},"Forum",{"href":496,"dataGaName":497,"dataGaLocation":256},"https://forum.gitlab.com/","forum",{"text":499,"config":500},"Events",{"href":501,"dataGaName":502,"dataGaLocation":256},"/events/","events",{"text":504,"config":505},"Partners",{"href":506,"dataGaName":507,"dataGaLocation":256},"/partners/","partners",{"config":509,"title":512,"text":513,"link":514},{"background":510,"textColor":511},"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":515,"config":516},"Read the latest",{"href":517,"dataGaName":518,"dataGaLocation":256},"/whats-new/","whats new",{"text":520,"config":521,"menu":523},"Company",{"dataNavLevelOne":522},"company",{"type":307,"columns":524},[525],{"items":526},[527,532,538,540,545,550,555,560,565,570],{"text":528,"config":529},"About",{"href":530,"dataGaName":531,"dataGaLocation":256},"/company/","about",{"text":533,"config":534,"footerGa":537},"Jobs",{"href":535,"dataGaName":536,"dataGaLocation":256},"/jobs/","jobs",{"dataGaName":536},{"text":499,"config":539},{"href":501,"dataGaName":502,"dataGaLocation":256},{"text":541,"config":542},"Leadership",{"href":543,"dataGaName":544,"dataGaLocation":256},"/company/team/e-group/","leadership",{"text":546,"config":547},"Handbook",{"href":548,"dataGaName":549,"dataGaLocation":256},"https://handbook.gitlab.com/","handbook",{"text":551,"config":552},"Investor relations",{"href":553,"dataGaName":554,"dataGaLocation":256},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":556,"config":557},"Trust Center",{"href":558,"dataGaName":559,"dataGaLocation":256},"/security/","trust center",{"text":561,"config":562},"AI Transparency Center",{"href":563,"dataGaName":564,"dataGaLocation":256},"/ai-transparency-center/","ai transparency center",{"text":566,"config":567},"Newsletter",{"href":568,"dataGaName":569,"dataGaLocation":256},"/company/contact/#contact-forms","newsletter",{"text":571,"config":572},"Press",{"href":573,"dataGaName":574,"dataGaLocation":256},"/press/","press",{"text":576,"config":577,"menu":578},"Contact us",{"dataNavLevelOne":522},{"type":307,"columns":579},[580],{"items":581},[582,587,592],{"text":583,"config":584},"Talk to sales",{"href":585,"dataGaName":586,"dataGaLocation":256},"/sales/","talk to sales",{"text":588,"config":589},"Support portal",{"href":590,"dataGaName":591,"dataGaLocation":256},"https://support.gitlab.com/hc/en-us","support portal",{"text":593,"config":594},"Customer portal",{"href":595,"dataGaName":596,"dataGaLocation":256},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":598,"login":599,"suggestions":606},"Close",{"text":600,"link":601},"To search repositories and projects, login to",{"text":602,"config":603},"gitlab.com",{"href":270,"dataGaName":604,"dataGaLocation":605},"search login","search",{"text":607,"default":608},"Suggestions",[609,611,615,617,621,625],{"text":287,"config":610},{"href":292,"dataGaName":287,"dataGaLocation":605},{"text":612,"config":613},"Code Suggestions (AI)",{"href":614,"dataGaName":612,"dataGaLocation":605},"/solutions/code-suggestions/",{"text":247,"config":616},{"href":207,"dataGaName":247,"dataGaLocation":605},{"text":618,"config":619},"GitLab on AWS",{"href":620,"dataGaName":618,"dataGaLocation":605},"/partners/technology-partners/aws/",{"text":622,"config":623},"GitLab on Google Cloud",{"href":624,"dataGaName":622,"dataGaLocation":605},"/partners/technology-partners/google-cloud-platform/",{"text":626,"config":627},"Why GitLab?",{"href":300,"dataGaName":626,"dataGaLocation":605},{"freeTrial":629,"mobileIcon":634,"desktopIcon":639,"secondaryButton":642},{"text":630,"config":631},"Start free trial",{"href":632,"dataGaName":261,"dataGaLocation":633},"https://gitlab.com/-/trials/new/","nav",{"altText":635,"config":636},"Gitlab Icon",{"src":637,"dataGaName":638,"dataGaLocation":633},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":635,"config":640},{"src":641,"dataGaName":638,"dataGaLocation":633},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":643,"config":644},"Get Started",{"href":645,"dataGaName":646,"dataGaLocation":633},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":648,"mobileIcon":652,"desktopIcon":654},{"text":649,"config":650},"Learn more about GitLab Duo",{"href":292,"dataGaName":651,"dataGaLocation":633},"gitlab duo",{"altText":635,"config":653},{"src":637,"dataGaName":638,"dataGaLocation":633},{"altText":635,"config":655},{"src":641,"dataGaName":638,"dataGaLocation":633},{"button":657,"mobileIcon":662,"desktopIcon":664},{"text":658,"config":659},"/switch",{"href":660,"dataGaName":661,"dataGaLocation":633},"#contact","switch",{"altText":635,"config":663},{"src":637,"dataGaName":638,"dataGaLocation":633},{"altText":635,"config":665},{"src":666,"dataGaName":638,"dataGaLocation":633},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":668,"mobileIcon":673,"desktopIcon":675},{"text":669,"config":670},"Back to pricing",{"href":403,"dataGaName":671,"dataGaLocation":633,"icon":672},"back to pricing","GoBack",{"altText":635,"config":674},{"src":637,"dataGaName":638,"dataGaLocation":633},{"altText":635,"config":676},{"src":641,"dataGaName":638,"dataGaLocation":633},{"title":678,"titleMobile":679,"button":680,"config":685},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":298,"config":681},{"href":682,"dataGaName":683,"dataGaLocation":684},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":686,"disabled":235},"release",{"data":688},{"text":689,"source":690,"edit":696,"contribute":701,"config":706,"items":711,"minimal":917},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":691,"config":692},"View page source",{"href":693,"dataGaName":694,"dataGaLocation":695},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":697,"config":698},"Edit this page",{"href":699,"dataGaName":700,"dataGaLocation":695},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":702,"config":703},"Please contribute",{"href":704,"dataGaName":705,"dataGaLocation":695},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":707,"facebook":708,"youtube":709,"linkedin":710},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[712,759,809,853,885],{"title":401,"links":713,"subMenu":728},[714,718,723],{"text":715,"config":716},"View plans",{"href":403,"dataGaName":717,"dataGaLocation":695},"view plans",{"text":719,"config":720},"Why Premium?",{"href":721,"dataGaName":722,"dataGaLocation":695},"/pricing/premium/","why premium",{"text":724,"config":725},"Why Ultimate?",{"href":726,"dataGaName":727,"dataGaLocation":695},"/pricing/ultimate/","why ultimate",[729],{"title":730,"links":731},"Contact Us",[732,735,737,739,744,749,754],{"text":733,"config":734},"Contact sales",{"href":585,"dataGaName":266,"dataGaLocation":695},{"text":588,"config":736},{"href":590,"dataGaName":591,"dataGaLocation":695},{"text":593,"config":738},{"href":595,"dataGaName":596,"dataGaLocation":695},{"text":740,"config":741},"Status",{"href":742,"dataGaName":743,"dataGaLocation":695},"https://status.gitlab.com/","status",{"text":745,"config":746},"Terms of use",{"href":747,"dataGaName":748,"dataGaLocation":695},"/terms/","terms of use",{"text":750,"config":751},"Privacy statement",{"href":752,"dataGaName":753,"dataGaLocation":695},"/privacy/","privacy statement",{"text":755,"config":756},"Cookie preferences",{"dataGaName":757,"dataGaLocation":695,"id":758,"isOneTrustButton":238},"cookie preferences","ot-sdk-btn",{"title":303,"links":760,"subMenu":769},[761,765],{"text":762,"config":763},"DevSecOps platform",{"href":285,"dataGaName":764,"dataGaLocation":695},"devsecops platform",{"text":766,"config":767},"AI-Assisted Development",{"href":292,"dataGaName":768,"dataGaLocation":695},"ai-assisted development",[770],{"title":771,"links":772},"Topics",[773,778,783,786,789,794,799,804],{"text":774,"config":775},"CICD",{"href":776,"dataGaName":777,"dataGaLocation":695},"/topics/ci-cd/","cicd",{"text":779,"config":780},"GitOps",{"href":781,"dataGaName":782,"dataGaLocation":695},"/topics/gitops/","gitops",{"text":18,"config":784},{"href":17,"dataGaName":785,"dataGaLocation":695},"devops",{"text":787,"config":788},"Version Control",{"href":99,"dataGaName":100,"dataGaLocation":695},{"text":790,"config":791},"DevSecOps",{"href":792,"dataGaName":793,"dataGaLocation":695},"/topics/devsecops/","devsecops",{"text":795,"config":796},"Cloud Native",{"href":797,"dataGaName":798,"dataGaLocation":695},"/topics/cloud-native/","cloud native",{"text":800,"config":801},"AI for Coding",{"href":802,"dataGaName":803,"dataGaLocation":695},"/topics/devops/ai-for-coding/","ai for coding",{"text":805,"config":806},"Agentic AI",{"href":807,"dataGaName":808,"dataGaLocation":695},"/topics/agentic-ai/","agentic ai",{"title":810,"links":811},"Solutions",[812,814,816,821,825,828,832,835,837,840,843,848],{"text":345,"config":813},{"href":340,"dataGaName":345,"dataGaLocation":695},{"text":334,"config":815},{"href":319,"dataGaName":320,"dataGaLocation":695},{"text":817,"config":818},"Agile development",{"href":819,"dataGaName":820,"dataGaLocation":695},"/solutions/agile-delivery/","agile delivery",{"text":822,"config":823},"SCM",{"href":330,"dataGaName":824,"dataGaLocation":695},"source code management",{"text":774,"config":826},{"href":207,"dataGaName":827,"dataGaLocation":695},"continuous integration & delivery",{"text":829,"config":830},"Value stream management",{"href":373,"dataGaName":831,"dataGaLocation":695},"value stream management",{"text":779,"config":833},{"href":834,"dataGaName":782,"dataGaLocation":695},"/solutions/gitops/",{"text":383,"config":836},{"href":386,"dataGaName":387,"dataGaLocation":695},{"text":838,"config":839},"Small business",{"href":392,"dataGaName":393,"dataGaLocation":695},{"text":841,"config":842},"Public sector",{"href":398,"dataGaName":399,"dataGaLocation":695},{"text":844,"config":845},"Education",{"href":846,"dataGaName":847,"dataGaLocation":695},"/solutions/education/","education",{"text":849,"config":850},"Financial services",{"href":851,"dataGaName":852,"dataGaLocation":695},"/solutions/finance/","financial services",{"title":406,"links":854},[855,857,859,861,864,866,869,871,873,875,877,879,881,883],{"text":419,"config":856},{"href":421,"dataGaName":422,"dataGaLocation":695},{"text":424,"config":858},{"href":426,"dataGaName":427,"dataGaLocation":695},{"text":429,"config":860},{"href":431,"dataGaName":432,"dataGaLocation":695},{"text":434,"config":862},{"href":436,"dataGaName":863,"dataGaLocation":695},"docs",{"text":457,"config":865},{"href":459,"dataGaName":460,"dataGaLocation":695},{"text":867,"config":868},"What's new",{"href":517,"dataGaName":518,"dataGaLocation":695},{"text":452,"config":870},{"href":454,"dataGaName":455,"dataGaLocation":695},{"text":471,"config":872},{"href":473,"dataGaName":474,"dataGaLocation":695},{"text":479,"config":874},{"href":481,"dataGaName":482,"dataGaLocation":695},{"text":484,"config":876},{"href":486,"dataGaName":487,"dataGaLocation":695},{"text":489,"config":878},{"href":491,"dataGaName":492,"dataGaLocation":695},{"text":494,"config":880},{"href":496,"dataGaName":497,"dataGaLocation":695},{"text":499,"config":882},{"href":501,"dataGaName":502,"dataGaLocation":695},{"text":504,"config":884},{"href":506,"dataGaName":507,"dataGaLocation":695},{"title":520,"links":886},[887,889,891,893,895,897,901,906,908,910,912],{"text":528,"config":888},{"href":530,"dataGaName":522,"dataGaLocation":695},{"text":533,"config":890},{"href":535,"dataGaName":536,"dataGaLocation":695},{"text":541,"config":892},{"href":543,"dataGaName":544,"dataGaLocation":695},{"text":546,"config":894},{"href":548,"dataGaName":549,"dataGaLocation":695},{"text":551,"config":896},{"href":553,"dataGaName":554,"dataGaLocation":695},{"text":898,"config":899},"Sustainability",{"href":900,"dataGaName":898,"dataGaLocation":695},"/sustainability/",{"text":902,"config":903},"Diversity, inclusion and belonging (DIB)",{"href":904,"dataGaName":905,"dataGaLocation":695},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":556,"config":907},{"href":558,"dataGaName":559,"dataGaLocation":695},{"text":566,"config":909},{"href":568,"dataGaName":569,"dataGaLocation":695},{"text":571,"config":911},{"href":573,"dataGaName":574,"dataGaLocation":695},{"text":913,"config":914},"Modern Slavery Transparency Statement",{"href":915,"dataGaName":916,"dataGaLocation":695},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":918},[919,922,925],{"text":920,"config":921},"Terms",{"href":747,"dataGaName":748,"dataGaLocation":695},{"text":923,"config":924},"Cookies",{"dataGaName":757,"dataGaLocation":695,"id":758,"isOneTrustButton":238},{"text":926,"config":927},"Privacy",{"href":752,"dataGaName":753,"dataGaLocation":695},[929],{"id":930,"title":7,"body":234,"config":931,"content":933,"description":234,"extension":937,"meta":938,"navigation":238,"path":939,"seo":940,"stem":941,"__hash__":942},"blogAuthors/en-us/blog/authors/chrissie-buchanan.yml",{"template":932},"BlogAuthor",{"name":7,"config":934},{"headshot":935,"ctfId":936},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","cbuchanan","yml",{},"/en-us/blog/authors/chrissie-buchanan",{},"en-us/blog/authors/chrissie-buchanan","VUaqNs-WRatnVN614U2QKvMKVSh6PynpH3T0SHM4ayU",[944,953,961],{"title":945,"description":946,"heroImage":947,"category":230,"date":948,"authors":949,"slug":952,"externalUrl":234},"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",[950,951],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":954,"description":955,"heroImage":956,"category":230,"date":957,"authors":958,"slug":960,"externalUrl":234},"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",[959],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":962,"description":963,"heroImage":964,"category":230,"date":965,"authors":966,"slug":968,"externalUrl":234},"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",[967],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":970},[971,985,997,1009],{"id":972,"categories":973,"header":975,"text":976,"button":977,"image":982},"ai-modernization",[974],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":978,"config":979},"Get your AI maturity score",{"href":980,"dataGaName":981,"dataGaLocation":460},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":983},{"src":984},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":986,"categories":987,"header":989,"text":976,"button":990,"image":994},"devops-modernization",[988,793],"product","Are you just managing tools or shipping innovation?",{"text":991,"config":992},"Get your DevOps maturity score",{"href":993,"dataGaName":981,"dataGaLocation":460},"/assessments/devops-modernization-assessment/",{"config":995},{"src":996},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":998,"categories":999,"header":1001,"text":976,"button":1002,"image":1006},"security-modernization",[1000],"security","Are you trading speed for security?",{"text":1003,"config":1004},"Get your security maturity score",{"href":1005,"dataGaName":981,"dataGaLocation":460},"/assessments/security-modernization-assessment/",{"config":1007},{"src":1008},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1010,"paths":1011,"header":1014,"text":1015,"button":1016,"image":1021},"github-azure-migration",[1012,1013],"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":1017,"config":1018},"See how GitLab compares to GitHub",{"href":1019,"dataGaName":1020,"dataGaLocation":460},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1022},{"src":996},{"header":1024,"blurb":1025,"button":1026,"secondaryButton":1031},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1027,"config":1028},"Get your free trial",{"href":1029,"dataGaName":261,"dataGaLocation":1030},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":733,"config":1032},{"href":585,"dataGaName":266,"dataGaLocation":1030},1786803766787]