[{"data":1,"prerenderedAt":1266},["ShallowReactive",2],{"/blog/setting-up-gitlab-pages-with-cloudflare-certificates":3,"navigation-en-us":478,"banner-en-us":906,"footer-en-us":916,"blog-post-authors-en-us-Marcia Ramos":1161,"blog-related-posts-en-us-setting-up-gitlab-pages-with-cloudflare-certificates":1176,"blog-promotions-en-us":1202,"next-steps-en-us":1256},{"id":4,"title":5,"authors":6,"body":8,"category":460,"date":461,"description":462,"extension":463,"externalUrl":464,"faq":464,"featured":465,"heroImage":466,"meta":467,"navigation":468,"path":469,"seo":470,"slug":474,"stem":475,"tags":464,"template":476,"updatedDate":464,"__hash__":477},"blogPosts/en-us/blog/setting-up-gitlab-pages-with-cloudflare-certificates.md","Setting up GitLab Pages with Cloudflare Certificates",[7],"Marcia Ramos",{"type":9,"value":10,"toc":447},"minimark",[11,31,34,39,50,59,62,120,129,133,146,157,162,195,215,222,236,249,252,256,296,300,313,319,322,328,332,347,350,360,371,377,381,398,409,415,419,422,429,432],[12,13,14,20,21,25,26,30],"p",{},[15,16,19],"a",{"href":17,"rel":18},"https://www.cloudflare.com/ssl/",[],"Cloudflare SSL/TLS certificates"," are free to use.\nIf you want your ",[22,23,24],"span",{},"GitLab Pages"," site to work with them,\nit's as simple as could be. There's just a ",[27,28,29],"strong",{},"trick","\nyou might not know about (yet)!",[12,32,33],{},"We assume you're familiar with SSL/TLS, DNS, GitLab Pages,\nand Cloudflare.",[35,36,38],"h2",{"id":37},"introduction","Introduction",[12,40,41,42,44,45,49],{},"With ",[22,43,24],{},", you can ",[15,46,48],{"href":47},"/blog/gitlab-pages-setup/","deploy a static website","\nwith custom domains/subdomains and SSL/TLS support.",[12,51,52,53,58],{},"This tutorial responds to the issue\n\"",[15,54,57],{"href":55,"rel":56},"https://gitlab.com/pages/pages.gitlab.io/issues/29",[],"Support Cloudflare CA please!","\",\nand other cases where GitLab users asked specifically how\nto add a Cloudflare certificate to GitLab Pages. 😉 Anything else\nis outside the scope of this post.",[12,60,61],{},"If you don't know how to set up your GitLab Pages site, or why you\nshould care about SSL/TLS:",[63,64,65,72,78,105,113],"ul",{},[66,67,68,69,71],"li",{},"Take a look at the ",[22,70,24],{}," overview",[66,73,74,75],{},"Read the step-by-step tutorial ",[15,76,77],{"href":47},"Hosting on GitLab.com with GitLab Pages",[66,79,80,81,84,85],{},"Read the series \"",[27,82,83],{},"Static Site Generators"," (SSGs)\":\n",[63,86,87,93,99],{},[66,88,89],{},[15,90,92],{"href":91},"/blog/ssg-overview-gitlab-pages-part-1-dynamic-x-static/","SSGs Part 1: Static vs Dynamic Websites",[66,94,95],{},[15,96,98],{"href":97},"/blog/ssg-overview-gitlab-pages-part-2/","SSGs Part 2: Modern Static Site Generators",[66,100,101],{},[15,102,104],{"href":103},"/blog/ssg-overview-gitlab-pages-part-3-examples-ci/","SSGs Part 3: Build any SSG site with GitLab Pages",[66,106,107,108],{},"Read the ",[15,109,112],{"href":110,"rel":111},"https://docs.gitlab.com/pages/README/#getting-started-with-gitlab-pages",[],"documentation on GitLab Pages",[66,114,115,116],{},"Read an ",[15,117,119],{"href":118},"/blog/secure-gitlab-pages-with-startssl/#https-a-quick-overview","overview on the importance of HTTPS",[12,121,122,123,128],{},"In case you don't know about it yet, we're bringing ",[15,124,127],{"href":125,"rel":126},"https://docs.gitlab.com/releases/",[],"GitLab Pages to GitLab Community Edition","! 🎉",[35,130,132],{"id":131},"step-by-step-quick-guide","Step-by-step quick guide",[12,134,135,136,140,141,145],{},"To create this step-by-step guide, I'll use my subdomain\n",[137,138,139],"code",{},"https://cloudflare.marcia.ml"," as an alias for the website\noriginally deployed to ",[15,142,143],{"href":143,"rel":144},"https://gitlab-tests.gitlab.io/jekyll",[],".",[12,147,148,149,152,153,145],{},"The codebase is a simple ",[22,150,151],{},"Jekyll"," site built with its default\ntheme, available at ",[15,154,155],{"href":155,"rel":156},"https://gitlab.com/gitlab-tests/jekyll",[],[158,159,161],"h3",{"id":160},"step-1-dns-record","STEP 1. DNS record",[12,163,164,165,168,169,176,177,184,185,187,188,190,191,145],{},"On Cloudflare, navigate to the tab ",[27,166,167],{},"DNS"," and create a new\nDNS record (",[15,170,173],{"href":171,"rel":172},"https://en.wikipedia.org/wiki/CNAME_record",[],[137,174,175],{},"CNAME"," or ",[15,178,181],{"href":179,"rel":180},"https://support.dnsimple.com/articles/a-record/",[],[137,182,183],{},"A",") pointing your\nsubdomain (",[137,186,175],{},") or root domain (",[137,189,183],{},")\n",[15,192,194],{"href":193},"/blog/gitlab-pages-setup/#custom-domains","to your GitLab Pages site",[12,196,197,198,200,201,203,204,206,207,210,211,214],{},"The image below shows both ",[137,199,175],{}," and ",[137,202,183],{}," records\n(for the purposes of this demo), but of course, you will only\nneed one of them. For this example, I used the ",[137,205,175],{}," record pointing ",[137,208,209],{},"gitlab-tests.gitlab.io"," to my subdomain ",[137,212,213],{},"cloudflare.marcia.ml",":",[12,216,217],{},[218,219],"img",{"alt":220,"src":221},"set up Cloudflare DNS","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399021/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/cloudflare-dns-settings.jpg",[12,223,224,225,227,228,232,233,145],{},"For projects on GitLab.com, the DNS ",[137,226,183],{}," record should point your custom\ndomain to ",[15,229,24],{"href":230,"rel":231},"https://docs.gitlab.com/user/gitlab_com/#gitlab-pages",[],"' server IP address ",[137,234,235],{},"35.185.44.232",[12,237,238,241,242,245,246,248],{},[27,239,240],{},"Note:"," This GitLab Pages IP address for GitLab.com changed from ",[137,243,244],{},"52.167.214.135"," to ",[137,247,235],{}," in August 2018.",[12,250,251],{},"If you'd already set this up, just jump to the second step.",[158,253,255],{"id":254},"step-2-generate-your-certificate","STEP 2. Generate your certificate",[257,258,259,265,275,287],"ol",{},[66,260,261,262,145],{},"Navigate to the tab ",[27,263,264],{},"Crypto",[66,266,267,268,271],{},"Generate your certificate:",[269,270],"br",{},[218,272],{"alt":273,"src":274},"generate certificate","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399021/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/generate-certificate.png",[66,276,277,278,214,281,283],{},"Choose the domain, subdomain, or wildcard to apply the cert to, then click ",[27,279,280],{},"Next",[269,282],{},[218,284],{"alt":285,"src":286},"choose-domain","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399020/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/certificate-setup.png",[66,288,289,290,292],{},"Your certificate and private key have been generated. Leave the tab and the modal window open:",[269,291],{},[218,293],{"alt":294,"src":295},"modal with certificate","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399024/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/modal-window.png",[158,297,299],{"id":298},"step-3-add-the-custom-subdomain-and-the-certificate-to-your-gitlab-pages-project","STEP 3. Add the custom (sub)domain and the certificate to your GitLab Pages project",[12,301,302,303,306,307,306,310,214],{},"From a new tab, go to GitLab, and navigate to your project's ",[27,304,305],{},"Settings"," > ",[27,308,309],{},"Pages",[27,311,312],{},"+ New Domain",[12,314,315],{},[218,316],{"alt":317,"src":318},"configure GitLab Pages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399021/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/configure-gitlab-pages.png",[12,320,321],{},"Copy the PEM certificate and the private key from the tab you've\nleft open on Cloudflare, and paste it into their respective fields in GitLab:",[12,323,324],{},[218,325],{"alt":326,"src":327},"Add PEM certificate to Pages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399020/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/add-certificate-to-pages.png",[158,329,331],{"id":330},"step-4-the-trick","STEP 4. The trick",[12,333,334,335,342,343,346],{},"Cloudflare doesn't combine both PEM and root certificates in one,\nso we need to copy the root certificate (aka \"intermediate\")\n",[27,336,337],{},[15,338,341],{"href":339,"rel":340},"https://support.cloudflare.com/hc/en-us/articles/218689638",[],"Cloudflare Origin CA — RSA Root"," from the code block\nbelow, and ",[27,344,345],{},"paste it below your certificate (PEM)"," just added to GitLab:",[12,348,349],{},"Copy Cloudflare's Origin CA — RSA Root:",[351,352,358],"pre",{"className":353,"code":355,"language":356,"meta":357},[354],"language-text","-----BEGIN CERTIFICATE-----\nMIIEADCCAuigAwIBAgIID+rOSdTGfGcwDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNV\nBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQwMgYDVQQLEytDbG91\nZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRYwFAYDVQQH\nEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMB4XDTE5MDgyMzIx\nMDgwMFoXDTI5MDgxNTE3MDAwMFowgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBD\nbG91ZEZsYXJlLCBJbmMuMTQwMgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wg\nQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMw\nEQYDVQQIEwpDYWxpZm9ybmlhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEAwEiVZ/UoQpHmFsHvk5isBxRehukP8DG9JhFev3WZtG76WoTthvLJFRKFCHXm\nV6Z5/66Z4S09mgsUuFwvJzMnE6Ej6yIsYNCb9r9QORa8BdhrkNn6kdTly3mdnykb\nOomnwbUfLlExVgNdlP0XoRoeMwbQ4598foiHblO2B/LKuNfJzAMfS7oZe34b+vLB\nyrP/1bgCSLdc1AxQc1AC0EsQQhgcyTJNgnG4va1c7ogPlwKyhbDyZ4e59N5lbYPJ\nSmXI/cAe3jXj1FBLJZkwnoDKe0v13xeF+nF32smSH0qB7aJX2tBMW4TWtFPmzs5I\nlwrFSySWAdwYdgxw180yKU0dvwIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYD\nVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUJOhTV118NECHqeuU27rhFnj8KaQw\nHwYDVR0jBBgwFoAUJOhTV118NECHqeuU27rhFnj8KaQwDQYJKoZIhvcNAQELBQAD\nggEBAHwOf9Ur1l0Ar5vFE6PNrZWrDfQIMyEfdgSKofCdTckbqXNTiXdgbHs+TWoQ\nwAB0pfJDAHJDXOTCWRyTeXOseeOi5Btj5CnEuw3P0oXqdqevM1/+uWp0CM35zgZ8\nVD4aITxity0djzE6Qnx3Syzz+ZkoBgTnNum7d9A66/V636x4vTeqbZFBr9erJzgz\nhhurjcoacvRNhnjtDRM0dPeiCJ50CP3wEYuvUzDHUaowOsnLCjQIkWbR7Ni6KEIk\nMOz2U0OBSif3FTkhCgZWQKOOLo1P42jHC3ssUZAtVNXrCk3fw9/E15k8NPkBazZ6\n0iykLhH1trywrKRMVw67F44IE8Y=\n-----END CERTIFICATE-----\n","text","",[137,359,355],{"__ignoreMap":357},[12,361,362,363,366,367,370],{},"Paste it below your PEM certificate (jump a line between the\nlast row of your cert ",[137,364,365],{},"-----END CERTIFICATE-----"," and the\nfirst row of the intermediate cert ",[137,368,369],{},"-----BEGIN CERTIFICATE-----","):",[12,372,373],{},[218,374],{"alt":375,"src":376},"Add intermediate certificate","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399019/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/add-intermediate-certificate.png",[158,378,380],{"id":379},"step-5-apply-the-changes","STEP 5. Apply the changes",[257,382,383,389],{},[66,384,385,386,145],{},"Click ",[27,387,388],{},"Create New Domain",[66,390,391,392,394],{},"Ta-da! 🎉",[269,393],{},[218,395],{"alt":396,"src":397},"Screen_Shot_2016-12-21_at_13.52.02","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399019/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/certificate-added.png",[12,399,400,401,176,405,408],{},"It works fine with the encryption set to ",[402,403,404],"em",{},"\"Full\"",[402,406,407],{},"\"Full (strict)\""," on Cloudflare:",[12,410,411],{},[218,412],{"alt":413,"src":414},"Set Cloudflare SSL to full strict","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399021/blog/Content%20Images/setting-up-gitlab-pages-with-cloudflare-certificates/cloudflare-settings-ssl-strict.png",[35,416,418],{"id":417},"wrap-up","Wrap up",[12,420,421],{},"That's it, now your site runs on HTTPS with a custom domain\nand a free Cloudflare certificate, valid up to 15 years!",[12,423,424,425,428],{},"Comments, questions, suggestions? Please comment below or tweet ",[22,426,427],{},"@GitLab","! 😀",[430,431],"hr",{},[12,433,434,437,438,441,442,145],{},[22,435,436],{},"Cover image"," by ",[22,439,440],{},"Rita Morais",", licensed under ",[15,443,446],{"href":444,"rel":445},"https://unsplash.com/license",[],"CC0 1.0",{"title":357,"searchDepth":448,"depth":448,"links":449},2,[450,451,459],{"id":37,"depth":448,"text":38},{"id":131,"depth":448,"text":132,"children":452},[453,455,456,457,458],{"id":160,"depth":454,"text":161},3,{"id":254,"depth":454,"text":255},{"id":298,"depth":454,"text":299},{"id":330,"depth":454,"text":331},{"id":379,"depth":454,"text":380},{"id":417,"depth":448,"text":418},"engineering","2017-02-07","How to set up GitLab Pages with a Cloudflare SSL/TLS Certificate for your (sub)domain","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671091/Blog/Hero%20Images/lock.jpg",{},true,"/en-us/blog/setting-up-gitlab-pages-with-cloudflare-certificates",{"title":5,"description":462,"ogTitle":5,"ogDescription":462,"noIndex":465,"ogImage":466,"ogUrl":471,"ogSiteName":472,"ogType":473,"canonicalUrls":471},"https://about.gitlab.com/blog/setting-up-gitlab-pages-with-cloudflare-certificates","https://about.gitlab.com","article","setting-up-gitlab-pages-with-cloudflare-certificates","en-us/blog/setting-up-gitlab-pages-with-cloudflare-certificates","BlogPost","PQBRsc8awXQ7t1K70ErWBTNWVqx3PXYh-eN1xRgcoUs",{"logo":479,"freeTrial":484,"sales":489,"login":494,"items":499,"search":826,"minimal":857,"duo":876,"switchNav":885,"pricingDeployment":896},{"config":480},{"href":481,"dataGaName":482,"dataGaLocation":483},"/","gitlab logo","header",{"text":485,"config":486},"Get free trial",{"href":487,"dataGaName":488,"dataGaLocation":483},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":490,"config":491},"Request a demo",{"href":492,"dataGaName":493,"dataGaLocation":483},"/sales/?contact-topic=request-demo","sales",{"text":495,"config":496},"Sign in",{"href":497,"dataGaName":498,"dataGaLocation":483},"https://gitlab.com/users/sign_in/","sign in",[500,529,629,634,748,804],{"text":501,"config":502,"menu":504},"Platform",{"dataNavLevelOne":503},"platform",{"type":505,"columns":506},"cards",[507,513,521],{"title":501,"description":508,"link":509},"The intelligent orchestration platform for DevSecOps",{"text":510,"config":511},"Explore our Platform",{"href":512,"dataGaName":503,"dataGaLocation":483},"/platform/",{"title":514,"description":515,"link":516},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":517,"config":518},"Meet GitLab Duo",{"href":519,"dataGaName":520,"dataGaLocation":483},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":522,"description":523,"link":524},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":525,"config":526},"Learn more",{"href":527,"dataGaName":528,"dataGaLocation":483},"/why-gitlab/","why gitlab",{"text":530,"left":468,"config":531,"menu":533},"Product",{"dataNavLevelOne":532},"solutions",{"type":534,"link":535,"columns":539,"feature":608},"lists",{"text":536,"config":537},"View all Solutions",{"href":538,"dataGaName":532,"dataGaLocation":483},"/solutions/",[540,564,587],{"title":541,"description":542,"link":543,"items":548},"Automation","CI/CD and automation to accelerate deployment",{"config":544},{"icon":545,"href":546,"dataGaName":547,"dataGaLocation":483},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[549,553,556,560],{"text":550,"config":551},"CI/CD",{"href":552,"dataGaLocation":483,"dataGaName":550},"/solutions/continuous-integration/",{"text":514,"config":554},{"href":519,"dataGaLocation":483,"dataGaName":555},"gitlab duo agent platform - product menu",{"text":557,"config":558},"Source Code Management",{"href":559,"dataGaLocation":483,"dataGaName":557},"/solutions/source-code-management/",{"text":561,"config":562},"Automated Software Delivery",{"href":546,"dataGaLocation":483,"dataGaName":563},"Automated software delivery",{"title":565,"description":566,"link":567,"items":572},"Security","Deliver code faster without compromising security",{"config":568},{"href":569,"dataGaName":570,"dataGaLocation":483,"icon":571},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[573,577,582],{"text":574,"config":575},"Application Security Testing",{"href":569,"dataGaName":576,"dataGaLocation":483},"Application security testing",{"text":578,"config":579},"Software Supply Chain Security",{"href":580,"dataGaLocation":483,"dataGaName":581},"/solutions/supply-chain/","Software supply chain security",{"text":583,"config":584},"Software Compliance",{"href":585,"dataGaName":586,"dataGaLocation":483},"/solutions/software-compliance/","software compliance",{"title":588,"link":589,"items":594},"Measurement",{"config":590},{"icon":591,"href":592,"dataGaName":593,"dataGaLocation":483},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[595,599,603],{"text":596,"config":597},"Visibility & Measurement",{"href":592,"dataGaLocation":483,"dataGaName":598},"Visibility and Measurement",{"text":600,"config":601},"Value Stream Management",{"href":602,"dataGaLocation":483,"dataGaName":600},"/solutions/value-stream-management/",{"text":604,"config":605},"Analytics & Insights",{"href":606,"dataGaLocation":483,"dataGaName":607},"/solutions/analytics-and-insights/","Analytics and insights",{"title":609,"type":534,"items":610},"GitLab for",[611,617,623],{"text":612,"config":613},"Enterprise",{"icon":614,"href":615,"dataGaLocation":483,"dataGaName":616},"Building","/enterprise/","enterprise",{"text":618,"config":619},"Small Business",{"icon":620,"href":621,"dataGaLocation":483,"dataGaName":622},"Work","/small-business/","small business",{"text":624,"config":625},"Public Sector",{"icon":626,"href":627,"dataGaLocation":483,"dataGaName":628},"Organization","/solutions/public-sector/","public sector",{"text":630,"config":631},"Pricing",{"href":632,"dataGaName":633,"dataGaLocation":483,"dataNavLevelOne":633},"/pricing/","pricing",{"text":635,"config":636,"menu":638},"Resources",{"dataNavLevelOne":637},"resources",{"type":534,"link":639,"columns":643,"feature":737},{"text":640,"config":641},"View all resources",{"href":642,"dataGaName":637,"dataGaLocation":483},"/resources/",[644,677,704],{"title":645,"items":646},"Getting started",[647,652,657,662,667,672],{"text":648,"config":649},"Install",{"href":650,"dataGaName":651,"dataGaLocation":483},"/install/","install",{"text":653,"config":654},"Quick start guides",{"href":655,"dataGaName":656,"dataGaLocation":483},"/get-started/","quick setup checklists",{"text":658,"config":659},"Learn",{"href":660,"dataGaLocation":483,"dataGaName":661},"https://university.gitlab.com/","learn",{"text":663,"config":664},"Product documentation",{"href":665,"dataGaName":666,"dataGaLocation":483},"https://docs.gitlab.com/","product documentation",{"text":668,"config":669},"Best practice videos",{"href":670,"dataGaName":671,"dataGaLocation":483},"/getting-started-videos/","best practice videos",{"text":673,"config":674},"Integrations",{"href":675,"dataGaName":676,"dataGaLocation":483},"/integrations/","integrations",{"title":678,"items":679},"Discover",[680,685,690,695,699],{"text":681,"config":682},"Customer success stories",{"href":683,"dataGaName":684,"dataGaLocation":483},"/customers/","customer success stories",{"text":686,"config":687},"Blog",{"href":688,"dataGaName":689,"dataGaLocation":483},"/blog/","blog",{"text":691,"config":692},"Demo Hub",{"href":693,"dataGaName":694,"dataGaLocation":483},"/demo-hub/","demo hub",{"text":696,"config":697},"The Source",{"href":698,"dataGaName":689,"dataGaLocation":483},"/the-source/",{"text":700,"config":701},"Remote",{"href":702,"dataGaName":703,"dataGaLocation":483},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":705,"items":706},"Connect",[707,712,717,722,727,732],{"text":708,"config":709},"GitLab Services",{"href":710,"dataGaName":711,"dataGaLocation":483},"/services/","services",{"text":713,"config":714},"Contribute",{"href":715,"dataGaName":716,"dataGaLocation":483},"https://contributors.gitlab.com","contribute",{"text":718,"config":719},"Community",{"href":720,"dataGaName":721,"dataGaLocation":483},"/community/","community",{"text":723,"config":724},"Forum",{"href":725,"dataGaName":726,"dataGaLocation":483},"https://forum.gitlab.com/","forum",{"text":728,"config":729},"Events",{"href":730,"dataGaName":731,"dataGaLocation":483},"/events/","events",{"text":733,"config":734},"Partners",{"href":735,"dataGaName":736,"dataGaLocation":483},"/partners/","partners",{"config":738,"title":741,"text":742,"link":743},{"background":739,"textColor":740},"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":744,"config":745},"Read the latest",{"href":746,"dataGaName":747,"dataGaLocation":483},"/whats-new/","whats new",{"text":749,"config":750,"menu":752},"Company",{"dataNavLevelOne":751},"company",{"type":534,"columns":753},[754],{"items":755},[756,761,767,769,774,779,784,789,794,799],{"text":757,"config":758},"About",{"href":759,"dataGaName":760,"dataGaLocation":483},"/company/","about",{"text":762,"config":763,"footerGa":766},"Jobs",{"href":764,"dataGaName":765,"dataGaLocation":483},"/jobs/","jobs",{"dataGaName":765},{"text":728,"config":768},{"href":730,"dataGaName":731,"dataGaLocation":483},{"text":770,"config":771},"Leadership",{"href":772,"dataGaName":773,"dataGaLocation":483},"/company/team/e-group/","leadership",{"text":775,"config":776},"Handbook",{"href":777,"dataGaName":778,"dataGaLocation":483},"https://handbook.gitlab.com/","handbook",{"text":780,"config":781},"Investor relations",{"href":782,"dataGaName":783,"dataGaLocation":483},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":785,"config":786},"Trust Center",{"href":787,"dataGaName":788,"dataGaLocation":483},"/security/","trust center",{"text":790,"config":791},"AI Transparency Center",{"href":792,"dataGaName":793,"dataGaLocation":483},"/ai-transparency-center/","ai transparency center",{"text":795,"config":796},"Newsletter",{"href":797,"dataGaName":798,"dataGaLocation":483},"/company/contact/#contact-forms","newsletter",{"text":800,"config":801},"Press",{"href":802,"dataGaName":803,"dataGaLocation":483},"/press/","press",{"text":805,"config":806,"menu":807},"Contact us",{"dataNavLevelOne":751},{"type":534,"columns":808},[809],{"items":810},[811,816,821],{"text":812,"config":813},"Talk to sales",{"href":814,"dataGaName":815,"dataGaLocation":483},"/sales/","talk to sales",{"text":817,"config":818},"Support portal",{"href":819,"dataGaName":820,"dataGaLocation":483},"https://support.gitlab.com/hc/en-us","support portal",{"text":822,"config":823},"Customer portal",{"href":824,"dataGaName":825,"dataGaLocation":483},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":827,"login":828,"suggestions":835},"Close",{"text":829,"link":830},"To search repositories and projects, login to",{"text":831,"config":832},"gitlab.com",{"href":497,"dataGaName":833,"dataGaLocation":834},"search login","search",{"text":836,"default":837},"Suggestions",[838,840,844,846,850,854],{"text":514,"config":839},{"href":519,"dataGaName":514,"dataGaLocation":834},{"text":841,"config":842},"Code Suggestions (AI)",{"href":843,"dataGaName":841,"dataGaLocation":834},"/solutions/code-suggestions/",{"text":550,"config":845},{"href":552,"dataGaName":550,"dataGaLocation":834},{"text":847,"config":848},"GitLab on AWS",{"href":849,"dataGaName":847,"dataGaLocation":834},"/partners/technology-partners/aws/",{"text":851,"config":852},"GitLab on Google Cloud",{"href":853,"dataGaName":851,"dataGaLocation":834},"/partners/technology-partners/google-cloud-platform/",{"text":855,"config":856},"Why GitLab?",{"href":527,"dataGaName":855,"dataGaLocation":834},{"freeTrial":858,"mobileIcon":863,"desktopIcon":868,"secondaryButton":871},{"text":859,"config":860},"Start free trial",{"href":861,"dataGaName":488,"dataGaLocation":862},"https://gitlab.com/-/trials/new/","nav",{"altText":864,"config":865},"Gitlab Icon",{"src":866,"dataGaName":867,"dataGaLocation":862},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":864,"config":869},{"src":870,"dataGaName":867,"dataGaLocation":862},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":872,"config":873},"Get Started",{"href":874,"dataGaName":875,"dataGaLocation":862},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":877,"mobileIcon":881,"desktopIcon":883},{"text":878,"config":879},"Learn more about GitLab Duo",{"href":519,"dataGaName":880,"dataGaLocation":862},"gitlab duo",{"altText":864,"config":882},{"src":866,"dataGaName":867,"dataGaLocation":862},{"altText":864,"config":884},{"src":870,"dataGaName":867,"dataGaLocation":862},{"button":886,"mobileIcon":891,"desktopIcon":893},{"text":887,"config":888},"/switch",{"href":889,"dataGaName":890,"dataGaLocation":862},"#contact","switch",{"altText":864,"config":892},{"src":866,"dataGaName":867,"dataGaLocation":862},{"altText":864,"config":894},{"src":895,"dataGaName":867,"dataGaLocation":862},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":897,"mobileIcon":902,"desktopIcon":904},{"text":898,"config":899},"Back to pricing",{"href":632,"dataGaName":900,"dataGaLocation":862,"icon":901},"back to pricing","GoBack",{"altText":864,"config":903},{"src":866,"dataGaName":867,"dataGaLocation":862},{"altText":864,"config":905},{"src":870,"dataGaName":867,"dataGaLocation":862},{"title":907,"titleMobile":908,"button":909,"config":914},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":525,"config":910},{"href":911,"dataGaName":912,"dataGaLocation":913},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":915,"disabled":465},"release",{"data":917},{"text":918,"source":919,"edit":925,"contribute":930,"config":935,"items":940,"minimal":1150},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":920,"config":921},"View page source",{"href":922,"dataGaName":923,"dataGaLocation":924},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":926,"config":927},"Edit this page",{"href":928,"dataGaName":929,"dataGaLocation":924},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":931,"config":932},"Please contribute",{"href":933,"dataGaName":934,"dataGaLocation":924},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":936,"facebook":937,"youtube":938,"linkedin":939},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[941,988,1042,1086,1118],{"title":630,"links":942,"subMenu":957},[943,947,952],{"text":944,"config":945},"View plans",{"href":632,"dataGaName":946,"dataGaLocation":924},"view plans",{"text":948,"config":949},"Why Premium?",{"href":950,"dataGaName":951,"dataGaLocation":924},"/pricing/premium/","why premium",{"text":953,"config":954},"Why Ultimate?",{"href":955,"dataGaName":956,"dataGaLocation":924},"/pricing/ultimate/","why ultimate",[958],{"title":959,"links":960},"Contact Us",[961,964,966,968,973,978,983],{"text":962,"config":963},"Contact sales",{"href":814,"dataGaName":493,"dataGaLocation":924},{"text":817,"config":965},{"href":819,"dataGaName":820,"dataGaLocation":924},{"text":822,"config":967},{"href":824,"dataGaName":825,"dataGaLocation":924},{"text":969,"config":970},"Status",{"href":971,"dataGaName":972,"dataGaLocation":924},"https://status.gitlab.com/","status",{"text":974,"config":975},"Terms of use",{"href":976,"dataGaName":977,"dataGaLocation":924},"/terms/","terms of use",{"text":979,"config":980},"Privacy statement",{"href":981,"dataGaName":982,"dataGaLocation":924},"/privacy/","privacy statement",{"text":984,"config":985},"Cookie preferences",{"dataGaName":986,"dataGaLocation":924,"id":987,"isOneTrustButton":468},"cookie preferences","ot-sdk-btn",{"title":530,"links":989,"subMenu":998},[990,994],{"text":991,"config":992},"DevSecOps platform",{"href":512,"dataGaName":993,"dataGaLocation":924},"devsecops platform",{"text":995,"config":996},"AI-Assisted Development",{"href":519,"dataGaName":997,"dataGaLocation":924},"ai-assisted development",[999],{"title":1000,"links":1001},"Topics",[1002,1007,1012,1017,1022,1027,1032,1037],{"text":1003,"config":1004},"CICD",{"href":1005,"dataGaName":1006,"dataGaLocation":924},"/topics/ci-cd/","cicd",{"text":1008,"config":1009},"GitOps",{"href":1010,"dataGaName":1011,"dataGaLocation":924},"/topics/gitops/","gitops",{"text":1013,"config":1014},"DevOps",{"href":1015,"dataGaName":1016,"dataGaLocation":924},"/topics/devops/","devops",{"text":1018,"config":1019},"Version Control",{"href":1020,"dataGaName":1021,"dataGaLocation":924},"/topics/version-control/","version control",{"text":1023,"config":1024},"DevSecOps",{"href":1025,"dataGaName":1026,"dataGaLocation":924},"/topics/devsecops/","devsecops",{"text":1028,"config":1029},"Cloud Native",{"href":1030,"dataGaName":1031,"dataGaLocation":924},"/topics/cloud-native/","cloud native",{"text":1033,"config":1034},"AI for Coding",{"href":1035,"dataGaName":1036,"dataGaLocation":924},"/topics/devops/ai-for-coding/","ai for coding",{"text":1038,"config":1039},"Agentic AI",{"href":1040,"dataGaName":1041,"dataGaLocation":924},"/topics/agentic-ai/","agentic ai",{"title":1043,"links":1044},"Solutions",[1045,1047,1049,1054,1058,1061,1065,1068,1070,1073,1076,1081],{"text":574,"config":1046},{"href":569,"dataGaName":574,"dataGaLocation":924},{"text":563,"config":1048},{"href":546,"dataGaName":547,"dataGaLocation":924},{"text":1050,"config":1051},"Agile development",{"href":1052,"dataGaName":1053,"dataGaLocation":924},"/solutions/agile-delivery/","agile delivery",{"text":1055,"config":1056},"SCM",{"href":559,"dataGaName":1057,"dataGaLocation":924},"source code management",{"text":1003,"config":1059},{"href":552,"dataGaName":1060,"dataGaLocation":924},"continuous integration & delivery",{"text":1062,"config":1063},"Value stream management",{"href":602,"dataGaName":1064,"dataGaLocation":924},"value stream management",{"text":1008,"config":1066},{"href":1067,"dataGaName":1011,"dataGaLocation":924},"/solutions/gitops/",{"text":612,"config":1069},{"href":615,"dataGaName":616,"dataGaLocation":924},{"text":1071,"config":1072},"Small business",{"href":621,"dataGaName":622,"dataGaLocation":924},{"text":1074,"config":1075},"Public sector",{"href":627,"dataGaName":628,"dataGaLocation":924},{"text":1077,"config":1078},"Education",{"href":1079,"dataGaName":1080,"dataGaLocation":924},"/solutions/education/","education",{"text":1082,"config":1083},"Financial services",{"href":1084,"dataGaName":1085,"dataGaLocation":924},"/solutions/finance/","financial services",{"title":635,"links":1087},[1088,1090,1092,1094,1097,1099,1102,1104,1106,1108,1110,1112,1114,1116],{"text":648,"config":1089},{"href":650,"dataGaName":651,"dataGaLocation":924},{"text":653,"config":1091},{"href":655,"dataGaName":656,"dataGaLocation":924},{"text":658,"config":1093},{"href":660,"dataGaName":661,"dataGaLocation":924},{"text":663,"config":1095},{"href":665,"dataGaName":1096,"dataGaLocation":924},"docs",{"text":686,"config":1098},{"href":688,"dataGaName":689,"dataGaLocation":924},{"text":1100,"config":1101},"What's new",{"href":746,"dataGaName":747,"dataGaLocation":924},{"text":681,"config":1103},{"href":683,"dataGaName":684,"dataGaLocation":924},{"text":700,"config":1105},{"href":702,"dataGaName":703,"dataGaLocation":924},{"text":708,"config":1107},{"href":710,"dataGaName":711,"dataGaLocation":924},{"text":713,"config":1109},{"href":715,"dataGaName":716,"dataGaLocation":924},{"text":718,"config":1111},{"href":720,"dataGaName":721,"dataGaLocation":924},{"text":723,"config":1113},{"href":725,"dataGaName":726,"dataGaLocation":924},{"text":728,"config":1115},{"href":730,"dataGaName":731,"dataGaLocation":924},{"text":733,"config":1117},{"href":735,"dataGaName":736,"dataGaLocation":924},{"title":749,"links":1119},[1120,1122,1124,1126,1128,1130,1134,1139,1141,1143,1145],{"text":757,"config":1121},{"href":759,"dataGaName":751,"dataGaLocation":924},{"text":762,"config":1123},{"href":764,"dataGaName":765,"dataGaLocation":924},{"text":770,"config":1125},{"href":772,"dataGaName":773,"dataGaLocation":924},{"text":775,"config":1127},{"href":777,"dataGaName":778,"dataGaLocation":924},{"text":780,"config":1129},{"href":782,"dataGaName":783,"dataGaLocation":924},{"text":1131,"config":1132},"Sustainability",{"href":1133,"dataGaName":1131,"dataGaLocation":924},"/sustainability/",{"text":1135,"config":1136},"Diversity, inclusion and belonging (DIB)",{"href":1137,"dataGaName":1138,"dataGaLocation":924},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":785,"config":1140},{"href":787,"dataGaName":788,"dataGaLocation":924},{"text":795,"config":1142},{"href":797,"dataGaName":798,"dataGaLocation":924},{"text":800,"config":1144},{"href":802,"dataGaName":803,"dataGaLocation":924},{"text":1146,"config":1147},"Modern Slavery Transparency Statement",{"href":1148,"dataGaName":1149,"dataGaLocation":924},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1151},[1152,1155,1158],{"text":1153,"config":1154},"Terms",{"href":976,"dataGaName":977,"dataGaLocation":924},{"text":1156,"config":1157},"Cookies",{"dataGaName":986,"dataGaLocation":924,"id":987,"isOneTrustButton":468},{"text":1159,"config":1160},"Privacy",{"href":981,"dataGaName":982,"dataGaLocation":924},[1162],{"id":1163,"title":7,"body":464,"config":1164,"content":1166,"description":464,"extension":1170,"meta":1171,"navigation":468,"path":1172,"seo":1173,"stem":1174,"__hash__":1175},"blogAuthors/en-us/blog/authors/marcia-ramos.yml",{"template":1165},"BlogAuthor",{"name":7,"config":1167},{"headshot":1168,"ctfId":1169},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Marcia-Ramos","yml",{},"/en-us/blog/authors/marcia-ramos",{},"en-us/blog/authors/marcia-ramos","UrFu-iLS1mEkxVCheaz27cAjfZXeLI9U1n5dGSOHXY4",[1177,1186,1194],{"title":1178,"description":1179,"heroImage":1180,"category":460,"date":1181,"authors":1182,"slug":1185,"externalUrl":464},"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",[1183,1184],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1187,"description":1188,"heroImage":1189,"category":460,"date":1190,"authors":1191,"slug":1193,"externalUrl":464},"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",[1192],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1195,"description":1196,"heroImage":1197,"category":460,"date":1198,"authors":1199,"slug":1201,"externalUrl":464},"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",[1200],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1203},[1204,1218,1230,1242],{"id":1205,"categories":1206,"header":1208,"text":1209,"button":1210,"image":1215},"ai-modernization",[1207],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1211,"config":1212},"Get your AI maturity score",{"href":1213,"dataGaName":1214,"dataGaLocation":689},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1216},{"src":1217},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1219,"categories":1220,"header":1222,"text":1209,"button":1223,"image":1227},"devops-modernization",[1221,1026],"product","Are you just managing tools or shipping innovation?",{"text":1224,"config":1225},"Get your DevOps maturity score",{"href":1226,"dataGaName":1214,"dataGaLocation":689},"/assessments/devops-modernization-assessment/",{"config":1228},{"src":1229},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1231,"categories":1232,"header":1234,"text":1209,"button":1235,"image":1239},"security-modernization",[1233],"security","Are you trading speed for security?",{"text":1236,"config":1237},"Get your security maturity score",{"href":1238,"dataGaName":1214,"dataGaLocation":689},"/assessments/security-modernization-assessment/",{"config":1240},{"src":1241},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1243,"paths":1244,"header":1247,"text":1248,"button":1249,"image":1254},"github-azure-migration",[1245,1246],"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":1250,"config":1251},"See how GitLab compares to GitHub",{"href":1252,"dataGaName":1253,"dataGaLocation":689},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1255},{"src":1229},{"header":1257,"blurb":1258,"button":1259,"secondaryButton":1264},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1260,"config":1261},"Get your free trial",{"href":1262,"dataGaName":488,"dataGaLocation":1263},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":962,"config":1265},{"href":814,"dataGaName":493,"dataGaLocation":1263},1786803765289]