[{"data":1,"prerenderedAt":1048},["ShallowReactive",2],{"/blog/feature-highlight-saml":3,"navigation-en-us":261,"banner-en-us":689,"footer-en-us":699,"blog-post-authors-en-us-Patricio Cano":944,"blog-related-posts-en-us-feature-highlight-saml":959,"blog-promotions-en-us":984,"next-steps-en-us":1038},{"id":4,"title":5,"authors":6,"body":8,"category":237,"date":238,"description":239,"extension":240,"externalUrl":241,"faq":241,"featured":242,"heroImage":243,"meta":244,"navigation":251,"path":252,"seo":253,"slug":257,"stem":258,"tags":241,"template":259,"updatedDate":241,"__hash__":260},"blogPosts/en-us/blog/feature-highlight-saml.md","Feature Highlight: SAML and its future within GitLab",[7],"Patricio Cano",{"type":9,"value":10,"toc":224},"minimark",[11,15,18,23,32,35,38,41,48,55,59,64,85,93,97,116,128,146,152,177,180,184,193,196,202,204],[12,13,14],"p",{},"As a Service Engineer I'm in constant contact with customers, listening to their\nneeds, and I've noticed a steadily-increasing interest in SAML from our\nEnterprise Customers. That inspired me to dive a little deeper into the topic in\nan effort to improve our integration with SAML and to add better documentation.\nI hope this helps our customers and our community to better understand this\nfeature.",[12,16,17],{},"In this blog post I'll give you an overview of what I've been working on, how it\naffects GitLab, and what we plan to do with SAML in the future. Our plan is to\nbring SAML up to par with the features that LDAP offers within GitLab.",[19,20,22],"h2",{"id":21},"what-is-saml","What is SAML?",[12,24,25,26],{},"SAML stands for Security Assertion Markup Language. It is an XML standard that\nallows secure web domains to exchange user authentication and authorization data.\nUsing SAML, an online service provider can contact a separate online identity\nprovider to authenticate users who are trying to access secure content.\n",[27,28,31],"a",{"href":29,"rel":30},"https://developers.google.com/google-apps/sso/saml_reference_implementation",[],"[1]",[12,33,34],{},"This gives you the ability to add users to your service without having to know\nanything about them beforehand. You just need to trust the identity provider.",[12,36,37],{},"It also provides you with the ability to enable Single Sign On (SSO) for your\nGitLab instance, allowing your users to access your GitLab instance without\nhaving to create a new account and set a password.",[12,39,40],{},"Here is an example on how the SAML request and response work. In this example\nGitLab would be the \"Service Provider\":",[12,42,43],{},[44,45],"img",{"alt":46,"src":47},"SAML Workflow Example","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782404907/site/Content%20Images/saml_workflow_vertical.gif",[12,49,50],{},[27,51,54],{"href":52,"rel":53},"https://en.wikipedia.org/wiki/SAML_2.0#/media/File:Saml2-browser-sso-post.gif",[],"Public domain image from Wikipedia",[19,56,58],{"id":57},"saml-gitlab","SAML & GitLab",[60,61,63],"h3",{"id":62},"the-beginnings","The beginnings",[12,65,66,67,72,73,78,79,84],{},"GitLab first introduced SAML support in version ",[27,68,71],{"href":69,"rel":70},"https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/722/diffs",[],"7.12","\nvia a contribution from our amazing community. The feature was contributed by\n",[27,74,77],{"href":75,"rel":76},"http://home.cern/",[],"CERN"," almost 10 months ago. Since the original contribution,\nnot much changed around the SAML support offered by GitLab. But interest from\nour users and our customers increased. You can check all SAML related merge\nrequests\n",[27,80,83],{"href":81,"rel":82},"https://gitlab.com/gitlab-org/gitlab-ce/merge_requests?utf8=%E2%9C%93&issue_search=saml&state=merged&scope=all&assignee_id=&author_id=&milestone_id=&label_id=",[],"here",".",[12,86,87,88,92],{},"Due to the increased interest, I decided to dive into all the parts required to\nget GitLab to speak SAML. Here I encountered ",[89,90,91],"code",{},"omniauth-saml",", a project with thousands\nof downloads that has been dormant for the past 6 months.",[60,94,96],{"id":95},"reviving-omniauth-saml","Reviving omniauth-saml",[12,98,99,100,102,103,108,109,112,113,115],{},"The ",[89,101,91],{}," gem was originally developed and maintained by\n",[27,104,107],{"href":105,"rel":106},"http://www.wespire.com/",[],"Practically Green",", but in the last couple of months\nit lost momentum from its maintainers.\nThe gem on which this one is based, ",[89,110,111],{},"ruby-saml",", started to add new features\nrecently and merge requests were made on the ",[89,114,91],{}," repo to add these\nnew features as well, but they went without review from the maintainers\nfor quite some time.",[12,117,118,119,121,122,127],{},"Luckily the maintainers realized that there was still a lot of interest in the\n",[89,120,91],{}," gem and ",[27,123,126],{"href":124,"rel":125},"https://github.com/omniauth/omniauth-saml/issues/67",[],"decided","\nto give control of the gem to the community. Since I was one of the people\ninvolved in the latest merge requests, I was included in the list of people\ngiven owner access. This allowed a small group of passionate people to continue\nthe amazing work that the developers at Practically Green started almost 5\nyears ago.",[12,129,130,131,133,134,139,140,145],{},"Once this process was completed we immediately got to work reviewing pending pull\nrequests, asking community members to update their code to resolve conflicts,\nsolving old issues, updating dependencies, and adding a continuous integration\nservice. All this work culminated a few weeks ago when we released ",[89,132,91],{},"\nversion ",[27,135,138],{"href":136,"rel":137},"https://github.com/omniauth/omniauth-saml/blob/master/CHANGELOG.md#150-2016-02-25",[],"1.5.0","\nwith support for ",[27,141,144],{"href":142,"rel":143},"https://docs.gitlab.com/ce/integration/saml/#attribute_statements",[],"Custom Attributes",",\nbetter error handling, and a couple of bug fixes.",[12,147,148,149,151],{},"The inclusion of these features, especially the Custom Attributes, are of great\nuse to GitLab users. You no longer need to change your Identity Provider (IdP)\nserver to match the parameters that GitLab is expecting, you can now tell\n",[89,150,91],{},", and therefore GitLab, where to look for them.",[12,153,154,155,161,162,167,168,170,171,176],{},"GitLab relies on ",[27,156,159],{"href":157,"rel":158},"https://github.com/omniauth/omniauth-saml",[],[89,160,91],{}," to\nprovide the integration with a SAML IdP. It also uses\n",[27,163,166],{"href":164,"rel":165},"https://github.com/heartcombo/devise",[],"Devise"," as an authentication platform.\nDevise allows you to extend its authentication mechanism using Omniauth.\n",[89,169,91],{}," is a strategy that allows Omniauth to retrieve user information\nfrom a SAML IdP and relay this information to GitLab to either create a new user,\nor bind this new authentication mechanism to an existing user (if GitLab is\n",[27,172,175],{"href":173,"rel":174},"https://docs.gitlab.com/ce/integration/saml/",[],"configured"," to do so).",[12,178,179],{},"Along with the inclusion of better SAML documentation, these changes will help\nusers and admins better integrate their GitLab installation with their SAML provider,\nand more easily detect and troubleshoot any errors.",[19,181,183],{"id":182},"the-future","The future",[12,185,186,187,192],{},"We recently started ",[27,188,191],{"href":189,"rel":190},"https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2882/",[],"separating SAML","\nfrom the rest of the regular Omniauth providers to give us some room to improve\nthe integration between SAML and GitLab.",[12,194,195],{},"At the moment SAML only functions as an authentication provider, but with SAML 2.0\n(the only version of SAML supported by GitLab) you can also retrieve Group Membership\ninformation from the Identity Provider, if the IdP server supports this feature\nand is configured to respond with this information. For this to work, the\nmembership information needs to be added to the SAML response as a SAML\nAttribute in the generated SAML 2.0 Assertion.",[12,197,198,199,201],{},"If we leverage this feature, we would be able to manage GitLab Group Memberships\nvia SAML, as we do now for LDAP within Enterprise Edition. This would allow\nadmins to offload the management of user groups to a different service, offer\ntheir users an SSO system, and not have to worry about setting up LDAP as well\nas SAML to accomplish both. For this we will need to use ",[89,200,111],{}," directly.",[60,203,111],{"id":111},[12,205,206,212,213,215,216,218,219,84],{},[27,207,210],{"href":208,"rel":209},"https://github.com/onelogin/ruby-saml",[],[89,211,111],{}," is a Ruby library for\nimplementing client-side SAML authorization. ",[89,214,91],{}," relies on this library\nfor initialization and validation of a SAML request/response protocol. ",[89,217,111],{},"\nis maintained by the amazing people at ",[27,220,223],{"href":221,"rel":222},"https://www.onelogin.com/",[],"OneLogin",{"title":225,"searchDepth":226,"depth":226,"links":227},"",2,[228,229,234],{"id":21,"depth":226,"text":22},{"id":57,"depth":226,"text":58,"children":230},[231,233],{"id":62,"depth":232,"text":63},3,{"id":95,"depth":232,"text":96},{"id":182,"depth":226,"text":183,"children":235},[236],{"id":111,"depth":232,"text":111},"insights","2016-03-30","In this blog post I'll give you an overview of what I've been working on, how it affects GitLab, and what we plan to do with SAML in the future.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684764/Blog/Hero%20Images/galaxy-small.jpg",{"excerpt":245},{"type":9,"value":246},[247,249],[12,248,14],{},[12,250,17],{},true,"/en-us/blog/feature-highlight-saml",{"title":5,"description":239,"ogTitle":5,"ogDescription":239,"noIndex":242,"ogImage":243,"ogUrl":254,"ogSiteName":255,"ogType":256,"canonicalUrls":254},"https://about.gitlab.com/blog/feature-highlight-saml","https://about.gitlab.com","article","feature-highlight-saml","en-us/blog/feature-highlight-saml","BlogPost","LxnBR_6DJ8pPZ5QAea67V1s_nomyAx_2R47oSrKBHVY",{"logo":262,"freeTrial":267,"sales":272,"login":277,"items":282,"search":609,"minimal":640,"duo":659,"switchNav":668,"pricingDeployment":679},{"config":263},{"href":264,"dataGaName":265,"dataGaLocation":266},"/","gitlab logo","header",{"text":268,"config":269},"Get free trial",{"href":270,"dataGaName":271,"dataGaLocation":266},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":273,"config":274},"Request a demo",{"href":275,"dataGaName":276,"dataGaLocation":266},"/sales/?contact-topic=request-demo","sales",{"text":278,"config":279},"Sign in",{"href":280,"dataGaName":281,"dataGaLocation":266},"https://gitlab.com/users/sign_in/","sign in",[283,312,412,417,531,587],{"text":284,"config":285,"menu":287},"Platform",{"dataNavLevelOne":286},"platform",{"type":288,"columns":289},"cards",[290,296,304],{"title":284,"description":291,"link":292},"The intelligent orchestration platform for DevSecOps",{"text":293,"config":294},"Explore our Platform",{"href":295,"dataGaName":286,"dataGaLocation":266},"/platform/",{"title":297,"description":298,"link":299},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":300,"config":301},"Meet GitLab Duo",{"href":302,"dataGaName":303,"dataGaLocation":266},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":305,"description":306,"link":307},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":308,"config":309},"Learn more",{"href":310,"dataGaName":311,"dataGaLocation":266},"/why-gitlab/","why gitlab",{"text":313,"left":251,"config":314,"menu":316},"Product",{"dataNavLevelOne":315},"solutions",{"type":317,"link":318,"columns":322,"feature":391},"lists",{"text":319,"config":320},"View all Solutions",{"href":321,"dataGaName":315,"dataGaLocation":266},"/solutions/",[323,347,370],{"title":324,"description":325,"link":326,"items":331},"Automation","CI/CD and automation to accelerate deployment",{"config":327},{"icon":328,"href":329,"dataGaName":330,"dataGaLocation":266},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[332,336,339,343],{"text":333,"config":334},"CI/CD",{"href":335,"dataGaLocation":266,"dataGaName":333},"/solutions/continuous-integration/",{"text":297,"config":337},{"href":302,"dataGaLocation":266,"dataGaName":338},"gitlab duo agent platform - product menu",{"text":340,"config":341},"Source Code Management",{"href":342,"dataGaLocation":266,"dataGaName":340},"/solutions/source-code-management/",{"text":344,"config":345},"Automated Software Delivery",{"href":329,"dataGaLocation":266,"dataGaName":346},"Automated software delivery",{"title":348,"description":349,"link":350,"items":355},"Security","Deliver code faster without compromising security",{"config":351},{"href":352,"dataGaName":353,"dataGaLocation":266,"icon":354},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[356,360,365],{"text":357,"config":358},"Application Security Testing",{"href":352,"dataGaName":359,"dataGaLocation":266},"Application security testing",{"text":361,"config":362},"Software Supply Chain Security",{"href":363,"dataGaLocation":266,"dataGaName":364},"/solutions/supply-chain/","Software supply chain security",{"text":366,"config":367},"Software Compliance",{"href":368,"dataGaName":369,"dataGaLocation":266},"/solutions/software-compliance/","software compliance",{"title":371,"link":372,"items":377},"Measurement",{"config":373},{"icon":374,"href":375,"dataGaName":376,"dataGaLocation":266},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[378,382,386],{"text":379,"config":380},"Visibility & Measurement",{"href":375,"dataGaLocation":266,"dataGaName":381},"Visibility and Measurement",{"text":383,"config":384},"Value Stream Management",{"href":385,"dataGaLocation":266,"dataGaName":383},"/solutions/value-stream-management/",{"text":387,"config":388},"Analytics & Insights",{"href":389,"dataGaLocation":266,"dataGaName":390},"/solutions/analytics-and-insights/","Analytics and insights",{"title":392,"type":317,"items":393},"GitLab for",[394,400,406],{"text":395,"config":396},"Enterprise",{"icon":397,"href":398,"dataGaLocation":266,"dataGaName":399},"Building","/enterprise/","enterprise",{"text":401,"config":402},"Small Business",{"icon":403,"href":404,"dataGaLocation":266,"dataGaName":405},"Work","/small-business/","small business",{"text":407,"config":408},"Public Sector",{"icon":409,"href":410,"dataGaLocation":266,"dataGaName":411},"Organization","/solutions/public-sector/","public sector",{"text":413,"config":414},"Pricing",{"href":415,"dataGaName":416,"dataGaLocation":266,"dataNavLevelOne":416},"/pricing/","pricing",{"text":418,"config":419,"menu":421},"Resources",{"dataNavLevelOne":420},"resources",{"type":317,"link":422,"columns":426,"feature":520},{"text":423,"config":424},"View all resources",{"href":425,"dataGaName":420,"dataGaLocation":266},"/resources/",[427,460,487],{"title":428,"items":429},"Getting started",[430,435,440,445,450,455],{"text":431,"config":432},"Install",{"href":433,"dataGaName":434,"dataGaLocation":266},"/install/","install",{"text":436,"config":437},"Quick start guides",{"href":438,"dataGaName":439,"dataGaLocation":266},"/get-started/","quick setup checklists",{"text":441,"config":442},"Learn",{"href":443,"dataGaLocation":266,"dataGaName":444},"https://university.gitlab.com/","learn",{"text":446,"config":447},"Product documentation",{"href":448,"dataGaName":449,"dataGaLocation":266},"https://docs.gitlab.com/","product documentation",{"text":451,"config":452},"Best practice videos",{"href":453,"dataGaName":454,"dataGaLocation":266},"/getting-started-videos/","best practice videos",{"text":456,"config":457},"Integrations",{"href":458,"dataGaName":459,"dataGaLocation":266},"/integrations/","integrations",{"title":461,"items":462},"Discover",[463,468,473,478,482],{"text":464,"config":465},"Customer success stories",{"href":466,"dataGaName":467,"dataGaLocation":266},"/customers/","customer success stories",{"text":469,"config":470},"Blog",{"href":471,"dataGaName":472,"dataGaLocation":266},"/blog/","blog",{"text":474,"config":475},"Demo Hub",{"href":476,"dataGaName":477,"dataGaLocation":266},"/demo-hub/","demo hub",{"text":479,"config":480},"The Source",{"href":481,"dataGaName":472,"dataGaLocation":266},"/the-source/",{"text":483,"config":484},"Remote",{"href":485,"dataGaName":486,"dataGaLocation":266},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":488,"items":489},"Connect",[490,495,500,505,510,515],{"text":491,"config":492},"GitLab Services",{"href":493,"dataGaName":494,"dataGaLocation":266},"/services/","services",{"text":496,"config":497},"Contribute",{"href":498,"dataGaName":499,"dataGaLocation":266},"https://contributors.gitlab.com","contribute",{"text":501,"config":502},"Community",{"href":503,"dataGaName":504,"dataGaLocation":266},"/community/","community",{"text":506,"config":507},"Forum",{"href":508,"dataGaName":509,"dataGaLocation":266},"https://forum.gitlab.com/","forum",{"text":511,"config":512},"Events",{"href":513,"dataGaName":514,"dataGaLocation":266},"/events/","events",{"text":516,"config":517},"Partners",{"href":518,"dataGaName":519,"dataGaLocation":266},"/partners/","partners",{"config":521,"title":524,"text":525,"link":526},{"background":522,"textColor":523},"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":527,"config":528},"Read the latest",{"href":529,"dataGaName":530,"dataGaLocation":266},"/whats-new/","whats new",{"text":532,"config":533,"menu":535},"Company",{"dataNavLevelOne":534},"company",{"type":317,"columns":536},[537],{"items":538},[539,544,550,552,557,562,567,572,577,582],{"text":540,"config":541},"About",{"href":542,"dataGaName":543,"dataGaLocation":266},"/company/","about",{"text":545,"config":546,"footerGa":549},"Jobs",{"href":547,"dataGaName":548,"dataGaLocation":266},"/jobs/","jobs",{"dataGaName":548},{"text":511,"config":551},{"href":513,"dataGaName":514,"dataGaLocation":266},{"text":553,"config":554},"Leadership",{"href":555,"dataGaName":556,"dataGaLocation":266},"/company/team/e-group/","leadership",{"text":558,"config":559},"Handbook",{"href":560,"dataGaName":561,"dataGaLocation":266},"https://handbook.gitlab.com/","handbook",{"text":563,"config":564},"Investor relations",{"href":565,"dataGaName":566,"dataGaLocation":266},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":568,"config":569},"Trust Center",{"href":570,"dataGaName":571,"dataGaLocation":266},"/security/","trust center",{"text":573,"config":574},"AI Transparency Center",{"href":575,"dataGaName":576,"dataGaLocation":266},"/ai-transparency-center/","ai transparency center",{"text":578,"config":579},"Newsletter",{"href":580,"dataGaName":581,"dataGaLocation":266},"/company/contact/#contact-forms","newsletter",{"text":583,"config":584},"Press",{"href":585,"dataGaName":586,"dataGaLocation":266},"/press/","press",{"text":588,"config":589,"menu":590},"Contact us",{"dataNavLevelOne":534},{"type":317,"columns":591},[592],{"items":593},[594,599,604],{"text":595,"config":596},"Talk to sales",{"href":597,"dataGaName":598,"dataGaLocation":266},"/sales/","talk to sales",{"text":600,"config":601},"Support portal",{"href":602,"dataGaName":603,"dataGaLocation":266},"https://support.gitlab.com/hc/en-us","support portal",{"text":605,"config":606},"Customer portal",{"href":607,"dataGaName":608,"dataGaLocation":266},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":610,"login":611,"suggestions":618},"Close",{"text":612,"link":613},"To search repositories and projects, login to",{"text":614,"config":615},"gitlab.com",{"href":280,"dataGaName":616,"dataGaLocation":617},"search login","search",{"text":619,"default":620},"Suggestions",[621,623,627,629,633,637],{"text":297,"config":622},{"href":302,"dataGaName":297,"dataGaLocation":617},{"text":624,"config":625},"Code Suggestions (AI)",{"href":626,"dataGaName":624,"dataGaLocation":617},"/solutions/code-suggestions/",{"text":333,"config":628},{"href":335,"dataGaName":333,"dataGaLocation":617},{"text":630,"config":631},"GitLab on AWS",{"href":632,"dataGaName":630,"dataGaLocation":617},"/partners/technology-partners/aws/",{"text":634,"config":635},"GitLab on Google Cloud",{"href":636,"dataGaName":634,"dataGaLocation":617},"/partners/technology-partners/google-cloud-platform/",{"text":638,"config":639},"Why GitLab?",{"href":310,"dataGaName":638,"dataGaLocation":617},{"freeTrial":641,"mobileIcon":646,"desktopIcon":651,"secondaryButton":654},{"text":642,"config":643},"Start free trial",{"href":644,"dataGaName":271,"dataGaLocation":645},"https://gitlab.com/-/trials/new/","nav",{"altText":647,"config":648},"Gitlab Icon",{"src":649,"dataGaName":650,"dataGaLocation":645},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":647,"config":652},{"src":653,"dataGaName":650,"dataGaLocation":645},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":655,"config":656},"Get Started",{"href":657,"dataGaName":658,"dataGaLocation":645},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":660,"mobileIcon":664,"desktopIcon":666},{"text":661,"config":662},"Learn more about GitLab Duo",{"href":302,"dataGaName":663,"dataGaLocation":645},"gitlab duo",{"altText":647,"config":665},{"src":649,"dataGaName":650,"dataGaLocation":645},{"altText":647,"config":667},{"src":653,"dataGaName":650,"dataGaLocation":645},{"button":669,"mobileIcon":674,"desktopIcon":676},{"text":670,"config":671},"/switch",{"href":672,"dataGaName":673,"dataGaLocation":645},"#contact","switch",{"altText":647,"config":675},{"src":649,"dataGaName":650,"dataGaLocation":645},{"altText":647,"config":677},{"src":678,"dataGaName":650,"dataGaLocation":645},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":680,"mobileIcon":685,"desktopIcon":687},{"text":681,"config":682},"Back to pricing",{"href":415,"dataGaName":683,"dataGaLocation":645,"icon":684},"back to pricing","GoBack",{"altText":647,"config":686},{"src":649,"dataGaName":650,"dataGaLocation":645},{"altText":647,"config":688},{"src":653,"dataGaName":650,"dataGaLocation":645},{"title":690,"titleMobile":691,"button":692,"config":697},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":308,"config":693},{"href":694,"dataGaName":695,"dataGaLocation":696},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":698,"disabled":242},"release",{"data":700},{"text":701,"source":702,"edit":708,"contribute":713,"config":718,"items":723,"minimal":933},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":703,"config":704},"View page source",{"href":705,"dataGaName":706,"dataGaLocation":707},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":709,"config":710},"Edit this page",{"href":711,"dataGaName":712,"dataGaLocation":707},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":714,"config":715},"Please contribute",{"href":716,"dataGaName":717,"dataGaLocation":707},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":719,"facebook":720,"youtube":721,"linkedin":722},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[724,771,825,869,901],{"title":413,"links":725,"subMenu":740},[726,730,735],{"text":727,"config":728},"View plans",{"href":415,"dataGaName":729,"dataGaLocation":707},"view plans",{"text":731,"config":732},"Why Premium?",{"href":733,"dataGaName":734,"dataGaLocation":707},"/pricing/premium/","why premium",{"text":736,"config":737},"Why Ultimate?",{"href":738,"dataGaName":739,"dataGaLocation":707},"/pricing/ultimate/","why ultimate",[741],{"title":742,"links":743},"Contact Us",[744,747,749,751,756,761,766],{"text":745,"config":746},"Contact sales",{"href":597,"dataGaName":276,"dataGaLocation":707},{"text":600,"config":748},{"href":602,"dataGaName":603,"dataGaLocation":707},{"text":605,"config":750},{"href":607,"dataGaName":608,"dataGaLocation":707},{"text":752,"config":753},"Status",{"href":754,"dataGaName":755,"dataGaLocation":707},"https://status.gitlab.com/","status",{"text":757,"config":758},"Terms of use",{"href":759,"dataGaName":760,"dataGaLocation":707},"/terms/","terms of use",{"text":762,"config":763},"Privacy statement",{"href":764,"dataGaName":765,"dataGaLocation":707},"/privacy/","privacy statement",{"text":767,"config":768},"Cookie preferences",{"dataGaName":769,"dataGaLocation":707,"id":770,"isOneTrustButton":251},"cookie preferences","ot-sdk-btn",{"title":313,"links":772,"subMenu":781},[773,777],{"text":774,"config":775},"DevSecOps platform",{"href":295,"dataGaName":776,"dataGaLocation":707},"devsecops platform",{"text":778,"config":779},"AI-Assisted Development",{"href":302,"dataGaName":780,"dataGaLocation":707},"ai-assisted development",[782],{"title":783,"links":784},"Topics",[785,790,795,800,805,810,815,820],{"text":786,"config":787},"CICD",{"href":788,"dataGaName":789,"dataGaLocation":707},"/topics/ci-cd/","cicd",{"text":791,"config":792},"GitOps",{"href":793,"dataGaName":794,"dataGaLocation":707},"/topics/gitops/","gitops",{"text":796,"config":797},"DevOps",{"href":798,"dataGaName":799,"dataGaLocation":707},"/topics/devops/","devops",{"text":801,"config":802},"Version Control",{"href":803,"dataGaName":804,"dataGaLocation":707},"/topics/version-control/","version control",{"text":806,"config":807},"DevSecOps",{"href":808,"dataGaName":809,"dataGaLocation":707},"/topics/devsecops/","devsecops",{"text":811,"config":812},"Cloud Native",{"href":813,"dataGaName":814,"dataGaLocation":707},"/topics/cloud-native/","cloud native",{"text":816,"config":817},"AI for Coding",{"href":818,"dataGaName":819,"dataGaLocation":707},"/topics/devops/ai-for-coding/","ai for coding",{"text":821,"config":822},"Agentic AI",{"href":823,"dataGaName":824,"dataGaLocation":707},"/topics/agentic-ai/","agentic ai",{"title":826,"links":827},"Solutions",[828,830,832,837,841,844,848,851,853,856,859,864],{"text":357,"config":829},{"href":352,"dataGaName":357,"dataGaLocation":707},{"text":346,"config":831},{"href":329,"dataGaName":330,"dataGaLocation":707},{"text":833,"config":834},"Agile development",{"href":835,"dataGaName":836,"dataGaLocation":707},"/solutions/agile-delivery/","agile delivery",{"text":838,"config":839},"SCM",{"href":342,"dataGaName":840,"dataGaLocation":707},"source code management",{"text":786,"config":842},{"href":335,"dataGaName":843,"dataGaLocation":707},"continuous integration & delivery",{"text":845,"config":846},"Value stream management",{"href":385,"dataGaName":847,"dataGaLocation":707},"value stream management",{"text":791,"config":849},{"href":850,"dataGaName":794,"dataGaLocation":707},"/solutions/gitops/",{"text":395,"config":852},{"href":398,"dataGaName":399,"dataGaLocation":707},{"text":854,"config":855},"Small business",{"href":404,"dataGaName":405,"dataGaLocation":707},{"text":857,"config":858},"Public sector",{"href":410,"dataGaName":411,"dataGaLocation":707},{"text":860,"config":861},"Education",{"href":862,"dataGaName":863,"dataGaLocation":707},"/solutions/education/","education",{"text":865,"config":866},"Financial services",{"href":867,"dataGaName":868,"dataGaLocation":707},"/solutions/finance/","financial services",{"title":418,"links":870},[871,873,875,877,880,882,885,887,889,891,893,895,897,899],{"text":431,"config":872},{"href":433,"dataGaName":434,"dataGaLocation":707},{"text":436,"config":874},{"href":438,"dataGaName":439,"dataGaLocation":707},{"text":441,"config":876},{"href":443,"dataGaName":444,"dataGaLocation":707},{"text":446,"config":878},{"href":448,"dataGaName":879,"dataGaLocation":707},"docs",{"text":469,"config":881},{"href":471,"dataGaName":472,"dataGaLocation":707},{"text":883,"config":884},"What's new",{"href":529,"dataGaName":530,"dataGaLocation":707},{"text":464,"config":886},{"href":466,"dataGaName":467,"dataGaLocation":707},{"text":483,"config":888},{"href":485,"dataGaName":486,"dataGaLocation":707},{"text":491,"config":890},{"href":493,"dataGaName":494,"dataGaLocation":707},{"text":496,"config":892},{"href":498,"dataGaName":499,"dataGaLocation":707},{"text":501,"config":894},{"href":503,"dataGaName":504,"dataGaLocation":707},{"text":506,"config":896},{"href":508,"dataGaName":509,"dataGaLocation":707},{"text":511,"config":898},{"href":513,"dataGaName":514,"dataGaLocation":707},{"text":516,"config":900},{"href":518,"dataGaName":519,"dataGaLocation":707},{"title":532,"links":902},[903,905,907,909,911,913,917,922,924,926,928],{"text":540,"config":904},{"href":542,"dataGaName":534,"dataGaLocation":707},{"text":545,"config":906},{"href":547,"dataGaName":548,"dataGaLocation":707},{"text":553,"config":908},{"href":555,"dataGaName":556,"dataGaLocation":707},{"text":558,"config":910},{"href":560,"dataGaName":561,"dataGaLocation":707},{"text":563,"config":912},{"href":565,"dataGaName":566,"dataGaLocation":707},{"text":914,"config":915},"Sustainability",{"href":916,"dataGaName":914,"dataGaLocation":707},"/sustainability/",{"text":918,"config":919},"Diversity, inclusion and belonging (DIB)",{"href":920,"dataGaName":921,"dataGaLocation":707},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":568,"config":923},{"href":570,"dataGaName":571,"dataGaLocation":707},{"text":578,"config":925},{"href":580,"dataGaName":581,"dataGaLocation":707},{"text":583,"config":927},{"href":585,"dataGaName":586,"dataGaLocation":707},{"text":929,"config":930},"Modern Slavery Transparency Statement",{"href":931,"dataGaName":932,"dataGaLocation":707},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":934},[935,938,941],{"text":936,"config":937},"Terms",{"href":759,"dataGaName":760,"dataGaLocation":707},{"text":939,"config":940},"Cookies",{"dataGaName":769,"dataGaLocation":707,"id":770,"isOneTrustButton":251},{"text":942,"config":943},"Privacy",{"href":764,"dataGaName":765,"dataGaLocation":707},[945],{"id":946,"title":7,"body":241,"config":947,"content":949,"description":241,"extension":953,"meta":954,"navigation":251,"path":955,"seo":956,"stem":957,"__hash__":958},"blogAuthors/en-us/blog/authors/patricio-cano.yml",{"template":948},"BlogAuthor",{"name":7,"config":950},{"headshot":951,"ctfId":952},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Patricio-Cano","yml",{},"/en-us/blog/authors/patricio-cano",{},"en-us/blog/authors/patricio-cano","3k0FCs9t2raaVW0sgKWMKzR8X3zSyg3WuB9CU3ZQ694",[960,968,976],{"title":961,"description":962,"heroImage":963,"category":237,"date":964,"authors":965,"slug":967,"externalUrl":241},"How we overhauled GitLab navigation","Users weren't getting what they needed from our navigation. Here are the steps we took to turn that experience around.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682884/Blog/Hero%20Images/navigation.jpg","2023-08-15",[966],"Ashley Knobloch","navigation-research-blog-post",{"title":969,"description":970,"heroImage":971,"category":237,"date":972,"authors":973,"slug":975,"externalUrl":241},"Beautifying our UI: Giving GitLab build features a fresh look","Get an inside look at how we are improving the usability of GitLab build features with multiple visual design improvements.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682807/Blog/Hero%20Images/beautify.jpg","2023-07-05",[974],"Veethika Mishra","beautifying-of-our-ui",{"title":977,"description":978,"heroImage":979,"category":237,"date":980,"authors":981,"slug":983,"externalUrl":241},"4 best practices leading orgs to release software faster","GitLab's 2023 Global DevSecOps Survey illuminates the strategies that organizations deploying more frequently have in common.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663908/Blog/Hero%20Images/2023-devsecops-report-blog-banner2.png","2023-06-08",[982],"Kristina Weis","best-practices-leading-orgs-to-release-software-faster",{"promotions":985},[986,1000,1012,1024],{"id":987,"categories":988,"header":990,"text":991,"button":992,"image":997},"ai-modernization",[989],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":993,"config":994},"Get your AI maturity score",{"href":995,"dataGaName":996,"dataGaLocation":472},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":998},{"src":999},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1001,"categories":1002,"header":1004,"text":991,"button":1005,"image":1009},"devops-modernization",[1003,809],"product","Are you just managing tools or shipping innovation?",{"text":1006,"config":1007},"Get your DevOps maturity score",{"href":1008,"dataGaName":996,"dataGaLocation":472},"/assessments/devops-modernization-assessment/",{"config":1010},{"src":1011},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1013,"categories":1014,"header":1016,"text":991,"button":1017,"image":1021},"security-modernization",[1015],"security","Are you trading speed for security?",{"text":1018,"config":1019},"Get your security maturity score",{"href":1020,"dataGaName":996,"dataGaLocation":472},"/assessments/security-modernization-assessment/",{"config":1022},{"src":1023},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1025,"paths":1026,"header":1029,"text":1030,"button":1031,"image":1036},"github-azure-migration",[1027,1028],"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":1032,"config":1033},"See how GitLab compares to GitHub",{"href":1034,"dataGaName":1035,"dataGaLocation":472},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1037},{"src":1011},{"header":1039,"blurb":1040,"button":1041,"secondaryButton":1046},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1042,"config":1043},"Get your free trial",{"href":1044,"dataGaName":271,"dataGaLocation":1045},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":745,"config":1047},{"href":597,"dataGaName":276,"dataGaLocation":1045},1786803747071]