[{"data":1,"prerenderedAt":1398},["ShallowReactive",2],{"/blog/installing-gitlab-on-raspberry-pi-64-bit-os":3,"navigation-en-us":612,"banner-en-us":1038,"footer-en-us":1048,"blog-post-authors-en-us-Brendan O'Leary":1293,"blog-related-posts-en-us-installing-gitlab-on-raspberry-pi-64-bit-os":1308,"blog-promotions-en-us":1334,"next-steps-en-us":1388},{"id":4,"title":5,"authors":6,"body":8,"category":591,"date":592,"description":593,"extension":594,"externalUrl":595,"faq":595,"featured":596,"heroImage":597,"meta":598,"navigation":147,"path":599,"seo":600,"slug":604,"stem":605,"tags":606,"template":610,"updatedDate":595,"__hash__":611},"blogPosts/en-us/blog/installing-gitlab-on-raspberry-pi-64-bit-os.md","Installing GitLab on Raspberry Pi 64-bit OS",[7],"Brendan O'Leary",{"type":9,"value":10,"toc":585},"minimark",[11,18,28,41,56,61,73,76,115,118,315,318,322,325,422,432,439,447,451,454,484,488,491,563,566,569,581],[12,13,14],"p",{},[15,16,17],"em",{},"This blog post and linked pages contain information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes.\nAs with all projects, the items mentioned in this blog post and linked pages are subject to change or delay. The development and release, and timing of any products, features or functionality remain at the sole discretion of GitLab Inc.",[12,19,20,21,27],{},"Recently the 64-bit version of ",[22,23,26],"a",{"href":24,"rel":25},"https://www.raspberrypi.com/software/",[],"Raspberry Pi OS"," came out of a long-awaited beta, and as a Raspberry Pi enthusiast, I was eager to get my hands on it. While the 64-bit version isn't compatible with all Pi hardware, it's exciting to see the expansion of the ecosystem to allow for better access to RAM and software compatibility as 32-bit support becomes less common.",[12,29,30,31,34,35,40],{},"But speaking of software support - what about running GitLab on the new 64-bit OS? Did you know that GitLab already has support for ",[22,32,26],{"href":33},"/install/#raspberry-pi-os","? We even have documentation on ",[22,36,39],{"href":37,"rel":38},"https://docs.gitlab.com/omnibus/settings/rpi/",[],"optomizing GitLab on a Raspberry Pi"," for folks who want to run their self-hosted DevOps platform on simple hardware like the Pi?",[12,42,43,44,49,50,55],{},"Now, the distribution team would want me to point out that official support for ARM64 is still ",[22,45,48],{"href":46,"rel":47},"https://gitlab.com/groups/gitlab-org/-/epics/2370",[],"in the works",", but that didn't stop me from at least wanting to try to install GitLab on this exciting new platform. Remember that your mileage may vary - and don't use this in production as it isn't yet officially supported.\nBut that's never stopped me before, so I grabbed my Raspberry Pi 4, a new Micro SD card, and the updated ",[22,51,54],{"href":52,"rel":53},"https://downloads.raspberrypi.org/imager/imager_latest.dmg",[],"Raspberry Pi Imager"," and got started.",[57,58,60],"h2",{"id":59},"getting-started","Getting Started",[12,62,63,64,67,68,72],{},"The typical ",[22,65,66],{"href":33},"install for GitLab on the Raspberry Pi"," assumes you have the standard 32-bit version of ",[69,70,71],"code",{},"raspbian/buster"," that has been standard for some time. So following those steps, I ran into an error with the install script.",[12,74,75],{},"When running",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-bash shiki shiki-themes github-light","sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh | sudo bash\n","bash","",[69,84,85],{"__ignoreMap":82},[86,87,90,94,98,102,105,109,112],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"s7eDp","sudo",[86,95,97],{"class":96},"sYBdl"," curl",[86,99,101],{"class":100},"sYu0t"," -sS",[86,103,104],{"class":96}," https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh",[86,106,108],{"class":107},"sD7c4"," |",[86,110,111],{"class":92}," sudo",[86,113,114],{"class":96}," bash\n",[12,116,117],{},"It appeared to work, but if I tried to install GitLab I'd get this error",[77,119,121],{"className":79,"code":120,"language":81,"meta":82,"style":82},"$ sudo EXTERNAL_URL=\"https://gitpi.boleary.dev\" apt-get install gitlab-ce\n\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nPackage gitlab-ce is not available, but is referred to by another package.\nThis may mean that the package is missing, has been obsoleted, or\nis only available from another source\n\\\nE: Package 'gitlab-ce' has no installation candidate\n",[69,122,123,142,149,164,178,191,229,266,286,292],{"__ignoreMap":82},[86,124,125,128,130,133,136,139],{"class":88,"line":89},[86,126,127],{"class":92},"$",[86,129,111],{"class":96},[86,131,132],{"class":96}," EXTERNAL_URL=\"https://gitpi.boleary.dev\"",[86,134,135],{"class":96}," apt-get",[86,137,138],{"class":96}," install",[86,140,141],{"class":96}," gitlab-ce\n",[86,143,145],{"class":88,"line":144},2,[86,146,148],{"emptyLinePlaceholder":147},true,"\n",[86,150,152,155,158,161],{"class":88,"line":151},3,[86,153,154],{"class":92},"Reading",[86,156,157],{"class":96}," package",[86,159,160],{"class":96}," lists...",[86,162,163],{"class":96}," Done\n",[86,165,167,170,173,176],{"class":88,"line":166},4,[86,168,169],{"class":92},"Building",[86,171,172],{"class":96}," dependency",[86,174,175],{"class":96}," tree...",[86,177,163],{"class":96},[86,179,181,183,186,189],{"class":88,"line":180},5,[86,182,154],{"class":92},[86,184,185],{"class":96}," state",[86,187,188],{"class":96}," information...",[86,190,163],{"class":96},[86,192,194,197,200,203,206,209,212,214,217,220,223,226],{"class":88,"line":193},6,[86,195,196],{"class":92},"Package",[86,198,199],{"class":96}," gitlab-ce",[86,201,202],{"class":96}," is",[86,204,205],{"class":96}," not",[86,207,208],{"class":96}," available,",[86,210,211],{"class":96}," but",[86,213,202],{"class":96},[86,215,216],{"class":96}," referred",[86,218,219],{"class":96}," to",[86,221,222],{"class":96}," by",[86,224,225],{"class":96}," another",[86,227,228],{"class":96}," package.\n",[86,230,232,235,238,241,244,247,249,251,254,257,260,263],{"class":88,"line":231},7,[86,233,234],{"class":92},"This",[86,236,237],{"class":96}," may",[86,239,240],{"class":96}," mean",[86,242,243],{"class":96}," that",[86,245,246],{"class":96}," the",[86,248,157],{"class":96},[86,250,202],{"class":96},[86,252,253],{"class":96}," missing,",[86,255,256],{"class":96}," has",[86,258,259],{"class":96}," been",[86,261,262],{"class":96}," obsoleted,",[86,264,265],{"class":96}," or\n",[86,267,269,272,275,278,281,283],{"class":88,"line":268},8,[86,270,271],{"class":92},"is",[86,273,274],{"class":96}," only",[86,276,277],{"class":96}," available",[86,279,280],{"class":96}," from",[86,282,225],{"class":96},[86,284,285],{"class":96}," source\n",[86,287,289],{"class":88,"line":288},9,[86,290,291],{"class":100},"\\\n",[86,293,295,298,301,304,306,309,312],{"class":88,"line":294},10,[86,296,297],{"class":92},"E:",[86,299,300],{"class":96}," Package",[86,302,303],{"class":96}," 'gitlab-ce'",[86,305,256],{"class":96},[86,307,308],{"class":96}," no",[86,310,311],{"class":96}," installation",[86,313,314],{"class":96}," candidate\n",[12,316,317],{},"That's related to the fact that specifically this version of Raspberry Pi OS isn't supported yet - but since it is a fork of Debian Linux, I was able to work around that.",[57,319,321],{"id":320},"manual-installation","Manual Installation",[12,323,324],{},"To get started with a slightly modified installation path, I first got the package details and appropriate prerequisite libraries installed:",[77,326,328],{"className":79,"code":327,"language":81,"meta":82,"style":82},"curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash\n\nsudo apt-get update\n\nsudo apt-get install debian-archive-keyring\n\nsudo apt-get install curl gnupg apt-transport-https\n\ncurl -L https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey | sudo apt-key add -\n",[69,329,330,347,351,360,364,375,379,395,399],{"__ignoreMap":82},[86,331,332,335,338,341,343,345],{"class":88,"line":89},[86,333,334],{"class":92},"curl",[86,336,337],{"class":100}," -s",[86,339,340],{"class":96}," https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh",[86,342,108],{"class":107},[86,344,111],{"class":92},[86,346,114],{"class":96},[86,348,349],{"class":88,"line":144},[86,350,148],{"emptyLinePlaceholder":147},[86,352,353,355,357],{"class":88,"line":151},[86,354,93],{"class":92},[86,356,135],{"class":96},[86,358,359],{"class":96}," update\n",[86,361,362],{"class":88,"line":166},[86,363,148],{"emptyLinePlaceholder":147},[86,365,366,368,370,372],{"class":88,"line":180},[86,367,93],{"class":92},[86,369,135],{"class":96},[86,371,138],{"class":96},[86,373,374],{"class":96}," debian-archive-keyring\n",[86,376,377],{"class":88,"line":193},[86,378,148],{"emptyLinePlaceholder":147},[86,380,381,383,385,387,389,392],{"class":88,"line":231},[86,382,93],{"class":92},[86,384,135],{"class":96},[86,386,138],{"class":96},[86,388,97],{"class":96},[86,390,391],{"class":96}," gnupg",[86,393,394],{"class":96}," apt-transport-https\n",[86,396,397],{"class":88,"line":268},[86,398,148],{"emptyLinePlaceholder":147},[86,400,401,403,406,409,411,413,416,419],{"class":88,"line":288},[86,402,334],{"class":92},[86,404,405],{"class":100}," -L",[86,407,408],{"class":96}," https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey",[86,410,108],{"class":107},[86,412,111],{"class":92},[86,414,415],{"class":96}," apt-key",[86,417,418],{"class":96}," add",[86,420,421],{"class":96}," -\n",[12,423,424,425,428,429],{},"Then I created a new sources list to point ",[69,426,427],{},"apt"," to for the installation with ",[69,430,431],{},"sudo touch /etc/apt/sources.list.d/gitlab_gitlab-ce.list",[12,433,434,435,438],{},"Next, I manually added the Debian Buster repositories to that sources list I just created by modifying  ",[69,436,437],{},"/etc/apt/sources.list.d/gitlab_gitlab-ce.list"," to add:",[77,440,445],{"className":441,"code":443,"language":444,"meta":82},[442],"language-text","deb https://packages.gitlab.com/gitlab/gitlab-ce/debian/ buster main\ndeb-src https://packages.gitlab.com/gitlab/gitlab-ce/debian/ buster main\n","text",[69,446,443],{"__ignoreMap":82},[57,448,450],{"id":449},"finishing-up","Finishing Up",[12,452,453],{},"From there, it was easy to install the 'standard' way, with apt-get handling the rest for me.",[77,455,457],{"className":79,"code":456,"language":81,"meta":82,"style":82},"sudo apt-get update\n\nsudo EXTERNAL_URL=\"http://gitpi.boleary.dev\" apt-get install gitlab-ce\n",[69,458,459,467,471],{"__ignoreMap":82},[86,460,461,463,465],{"class":88,"line":89},[86,462,93],{"class":92},[86,464,135],{"class":96},[86,466,359],{"class":96},[86,468,469],{"class":88,"line":144},[86,470,148],{"emptyLinePlaceholder":147},[86,472,473,475,478,480,482],{"class":88,"line":151},[86,474,93],{"class":92},[86,476,477],{"class":96}," EXTERNAL_URL=\"http://gitpi.boleary.dev\"",[86,479,135],{"class":96},[86,481,138],{"class":96},[86,483,141],{"class":96},[57,485,487],{"id":486},"next-steps","Next Steps",[12,489,490],{},"Now, those who love DNS will notice that I was pointing to a fully qualified domain name, but it points to a private address if you look up that address.",[77,492,494],{"className":79,"code":493,"language":81,"meta":82,"style":82},"dig gitpi.boleary.dev\n; \u003C\u003C>> DiG 9.10.6 \u003C\u003C>> gitpi.boleary.dev\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 512\n;; QUESTION SECTION:\n;gitpi.boleary.dev.     IN  A\n\n;; ANSWER SECTION:\ngitpi.boleary.dev.  300 IN  A   100.64.205.40\n",[69,495,496,504,529,534,539,544,549,553,558],{"__ignoreMap":82},[86,497,498,501],{"class":88,"line":89},[86,499,500],{"class":92},"dig",[86,502,503],{"class":96}," gitpi.boleary.dev\n",[86,505,506,510,513,516,519,522,525,527],{"class":88,"line":144},[86,507,509],{"class":508},"sgsFI","; ",[86,511,512],{"class":107},"\u003C\u003C",[86,514,515],{"class":96},">>",[86,517,518],{"class":92}," DiG",[86,520,521],{"class":100}," 9.10.6",[86,523,524],{"class":107}," \u003C\u003C",[86,526,515],{"class":96},[86,528,503],{"class":92},[86,530,531],{"class":88,"line":151},[86,532,533],{"class":96},";; OPT PSEUDOSECTION:\n",[86,535,536],{"class":88,"line":166},[86,537,538],{"class":96},"; EDNS: version: 0, flags:; udp: 512\n",[86,540,541],{"class":88,"line":180},[86,542,543],{"class":96},";; QUESTION SECTION:\n",[86,545,546],{"class":88,"line":193},[86,547,548],{"class":96},";gitpi.boleary.dev.     IN  A\n",[86,550,551],{"class":88,"line":231},[86,552,148],{"emptyLinePlaceholder":147},[86,554,555],{"class":88,"line":268},[86,556,557],{"class":96},";; ANSWER SECTION:\n",[86,559,560],{"class":88,"line":288},[86,561,562],{"class":96},"gitpi.boleary.dev.  300 IN  A   100.64.205.40\n",[12,564,565],{},"Isn't that interesting?  What does it mean - can I access it from outside my house's network?  And how will I get it to work with HTTPs on that private address?",[12,567,568],{},"For those answers, you'll have to stay tuned to my next article about running GitLab on the Raspberry Pi: Hosting a private GitLab server with Tailscale and LetsEncrypt.",[12,570,571,572,576,577],{},"Photo by ",[22,573,575],{"href":574},"https://unsplash.com/@antomeneghini?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText","Anto Meneghini"," on ",[22,578,580],{"href":579},"https://unsplash.com/s/photos/raspberries?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText","Unsplash",[582,583,584],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}",{"title":82,"searchDepth":144,"depth":144,"links":586},[587,588,589,590],{"id":59,"depth":144,"text":60},{"id":320,"depth":144,"text":321},{"id":449,"depth":144,"text":450},{"id":486,"depth":144,"text":487},"engineering","2022-03-14","A Raspberry Pi enthusiast tries to run GitLab on the new 64-bit OS...and here's what happened.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679433/Blog/Hero%20Images/anto-meneghini-gqytxsrctvw-unsplash.jpg",{},"/en-us/blog/installing-gitlab-on-raspberry-pi-64-bit-os",{"title":5,"description":593,"ogTitle":5,"ogDescription":593,"noIndex":596,"ogImage":597,"ogUrl":601,"ogSiteName":602,"ogType":603,"canonicalUrls":601},"https://about.gitlab.com/blog/installing-gitlab-on-raspberry-pi-64-bit-os","https://about.gitlab.com","article","installing-gitlab-on-raspberry-pi-64-bit-os","en-us/blog/installing-gitlab-on-raspberry-pi-64-bit-os",[607,608,609],"demo","integrations","performance","BlogPost","A9_8ZT18n0nBimwA50HQHwxiUuA5FGAldhPEF_kFwtM",{"logo":613,"freeTrial":618,"sales":623,"login":628,"items":633,"search":958,"minimal":989,"duo":1008,"switchNav":1017,"pricingDeployment":1028},{"config":614},{"href":615,"dataGaName":616,"dataGaLocation":617},"/","gitlab logo","header",{"text":619,"config":620},"Get free trial",{"href":621,"dataGaName":622,"dataGaLocation":617},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":624,"config":625},"Request a demo",{"href":626,"dataGaName":627,"dataGaLocation":617},"/sales/?contact-topic=request-demo","sales",{"text":629,"config":630},"Sign in",{"href":631,"dataGaName":632,"dataGaLocation":617},"https://gitlab.com/users/sign_in/","sign in",[634,663,762,767,880,936],{"text":635,"config":636,"menu":638},"Platform",{"dataNavLevelOne":637},"platform",{"type":639,"columns":640},"cards",[641,647,655],{"title":635,"description":642,"link":643},"The intelligent orchestration platform for DevSecOps",{"text":644,"config":645},"Explore our Platform",{"href":646,"dataGaName":637,"dataGaLocation":617},"/platform/",{"title":648,"description":649,"link":650},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":651,"config":652},"Meet GitLab Duo",{"href":653,"dataGaName":654,"dataGaLocation":617},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":656,"description":657,"link":658},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":659,"config":660},"Learn more",{"href":661,"dataGaName":662,"dataGaLocation":617},"/why-gitlab/","why gitlab",{"text":664,"left":147,"config":665,"menu":667},"Product",{"dataNavLevelOne":666},"solutions",{"type":668,"link":669,"columns":673,"feature":742},"lists",{"text":670,"config":671},"View all Solutions",{"href":672,"dataGaName":666,"dataGaLocation":617},"/solutions/",[674,698,721],{"title":675,"description":676,"link":677,"items":682},"Automation","CI/CD and automation to accelerate deployment",{"config":678},{"icon":679,"href":680,"dataGaName":681,"dataGaLocation":617},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[683,687,690,694],{"text":684,"config":685},"CI/CD",{"href":686,"dataGaLocation":617,"dataGaName":684},"/solutions/continuous-integration/",{"text":648,"config":688},{"href":653,"dataGaLocation":617,"dataGaName":689},"gitlab duo agent platform - product menu",{"text":691,"config":692},"Source Code Management",{"href":693,"dataGaLocation":617,"dataGaName":691},"/solutions/source-code-management/",{"text":695,"config":696},"Automated Software Delivery",{"href":680,"dataGaLocation":617,"dataGaName":697},"Automated software delivery",{"title":699,"description":700,"link":701,"items":706},"Security","Deliver code faster without compromising security",{"config":702},{"href":703,"dataGaName":704,"dataGaLocation":617,"icon":705},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[707,711,716],{"text":708,"config":709},"Application Security Testing",{"href":703,"dataGaName":710,"dataGaLocation":617},"Application security testing",{"text":712,"config":713},"Software Supply Chain Security",{"href":714,"dataGaLocation":617,"dataGaName":715},"/solutions/supply-chain/","Software supply chain security",{"text":717,"config":718},"Software Compliance",{"href":719,"dataGaName":720,"dataGaLocation":617},"/solutions/software-compliance/","software compliance",{"title":722,"link":723,"items":728},"Measurement",{"config":724},{"icon":725,"href":726,"dataGaName":727,"dataGaLocation":617},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[729,733,737],{"text":730,"config":731},"Visibility & Measurement",{"href":726,"dataGaLocation":617,"dataGaName":732},"Visibility and Measurement",{"text":734,"config":735},"Value Stream Management",{"href":736,"dataGaLocation":617,"dataGaName":734},"/solutions/value-stream-management/",{"text":738,"config":739},"Analytics & Insights",{"href":740,"dataGaLocation":617,"dataGaName":741},"/solutions/analytics-and-insights/","Analytics and insights",{"title":743,"type":668,"items":744},"GitLab for",[745,750,756],{"text":746,"config":747},"Enterprise",{"icon":169,"href":748,"dataGaLocation":617,"dataGaName":749},"/enterprise/","enterprise",{"text":751,"config":752},"Small Business",{"icon":753,"href":754,"dataGaLocation":617,"dataGaName":755},"Work","/small-business/","small business",{"text":757,"config":758},"Public Sector",{"icon":759,"href":760,"dataGaLocation":617,"dataGaName":761},"Organization","/solutions/public-sector/","public sector",{"text":763,"config":764},"Pricing",{"href":765,"dataGaName":766,"dataGaLocation":617,"dataNavLevelOne":766},"/pricing/","pricing",{"text":768,"config":769,"menu":771},"Resources",{"dataNavLevelOne":770},"resources",{"type":668,"link":772,"columns":776,"feature":869},{"text":773,"config":774},"View all resources",{"href":775,"dataGaName":770,"dataGaLocation":617},"/resources/",[777,809,836],{"title":778,"items":779},"Getting started",[780,785,790,795,800,805],{"text":781,"config":782},"Install",{"href":783,"dataGaName":784,"dataGaLocation":617},"/install/","install",{"text":786,"config":787},"Quick start guides",{"href":788,"dataGaName":789,"dataGaLocation":617},"/get-started/","quick setup checklists",{"text":791,"config":792},"Learn",{"href":793,"dataGaLocation":617,"dataGaName":794},"https://university.gitlab.com/","learn",{"text":796,"config":797},"Product documentation",{"href":798,"dataGaName":799,"dataGaLocation":617},"https://docs.gitlab.com/","product documentation",{"text":801,"config":802},"Best practice videos",{"href":803,"dataGaName":804,"dataGaLocation":617},"/getting-started-videos/","best practice videos",{"text":806,"config":807},"Integrations",{"href":808,"dataGaName":608,"dataGaLocation":617},"/integrations/",{"title":810,"items":811},"Discover",[812,817,822,827,831],{"text":813,"config":814},"Customer success stories",{"href":815,"dataGaName":816,"dataGaLocation":617},"/customers/","customer success stories",{"text":818,"config":819},"Blog",{"href":820,"dataGaName":821,"dataGaLocation":617},"/blog/","blog",{"text":823,"config":824},"Demo Hub",{"href":825,"dataGaName":826,"dataGaLocation":617},"/demo-hub/","demo hub",{"text":828,"config":829},"The Source",{"href":830,"dataGaName":821,"dataGaLocation":617},"/the-source/",{"text":832,"config":833},"Remote",{"href":834,"dataGaName":835,"dataGaLocation":617},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":837,"items":838},"Connect",[839,844,849,854,859,864],{"text":840,"config":841},"GitLab Services",{"href":842,"dataGaName":843,"dataGaLocation":617},"/services/","services",{"text":845,"config":846},"Contribute",{"href":847,"dataGaName":848,"dataGaLocation":617},"https://contributors.gitlab.com","contribute",{"text":850,"config":851},"Community",{"href":852,"dataGaName":853,"dataGaLocation":617},"/community/","community",{"text":855,"config":856},"Forum",{"href":857,"dataGaName":858,"dataGaLocation":617},"https://forum.gitlab.com/","forum",{"text":860,"config":861},"Events",{"href":862,"dataGaName":863,"dataGaLocation":617},"/events/","events",{"text":865,"config":866},"Partners",{"href":867,"dataGaName":868,"dataGaLocation":617},"/partners/","partners",{"config":870,"title":873,"text":874,"link":875},{"background":871,"textColor":872},"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":876,"config":877},"Read the latest",{"href":878,"dataGaName":879,"dataGaLocation":617},"/whats-new/","whats new",{"text":881,"config":882,"menu":884},"Company",{"dataNavLevelOne":883},"company",{"type":668,"columns":885},[886],{"items":887},[888,893,899,901,906,911,916,921,926,931],{"text":889,"config":890},"About",{"href":891,"dataGaName":892,"dataGaLocation":617},"/company/","about",{"text":894,"config":895,"footerGa":898},"Jobs",{"href":896,"dataGaName":897,"dataGaLocation":617},"/jobs/","jobs",{"dataGaName":897},{"text":860,"config":900},{"href":862,"dataGaName":863,"dataGaLocation":617},{"text":902,"config":903},"Leadership",{"href":904,"dataGaName":905,"dataGaLocation":617},"/company/team/e-group/","leadership",{"text":907,"config":908},"Handbook",{"href":909,"dataGaName":910,"dataGaLocation":617},"https://handbook.gitlab.com/","handbook",{"text":912,"config":913},"Investor relations",{"href":914,"dataGaName":915,"dataGaLocation":617},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":917,"config":918},"Trust Center",{"href":919,"dataGaName":920,"dataGaLocation":617},"/security/","trust center",{"text":922,"config":923},"AI Transparency Center",{"href":924,"dataGaName":925,"dataGaLocation":617},"/ai-transparency-center/","ai transparency center",{"text":927,"config":928},"Newsletter",{"href":929,"dataGaName":930,"dataGaLocation":617},"/company/contact/#contact-forms","newsletter",{"text":932,"config":933},"Press",{"href":934,"dataGaName":935,"dataGaLocation":617},"/press/","press",{"text":937,"config":938,"menu":939},"Contact us",{"dataNavLevelOne":883},{"type":668,"columns":940},[941],{"items":942},[943,948,953],{"text":944,"config":945},"Talk to sales",{"href":946,"dataGaName":947,"dataGaLocation":617},"/sales/","talk to sales",{"text":949,"config":950},"Support portal",{"href":951,"dataGaName":952,"dataGaLocation":617},"https://support.gitlab.com/hc/en-us","support portal",{"text":954,"config":955},"Customer portal",{"href":956,"dataGaName":957,"dataGaLocation":617},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":959,"login":960,"suggestions":967},"Close",{"text":961,"link":962},"To search repositories and projects, login to",{"text":963,"config":964},"gitlab.com",{"href":631,"dataGaName":965,"dataGaLocation":966},"search login","search",{"text":968,"default":969},"Suggestions",[970,972,976,978,982,986],{"text":648,"config":971},{"href":653,"dataGaName":648,"dataGaLocation":966},{"text":973,"config":974},"Code Suggestions (AI)",{"href":975,"dataGaName":973,"dataGaLocation":966},"/solutions/code-suggestions/",{"text":684,"config":977},{"href":686,"dataGaName":684,"dataGaLocation":966},{"text":979,"config":980},"GitLab on AWS",{"href":981,"dataGaName":979,"dataGaLocation":966},"/partners/technology-partners/aws/",{"text":983,"config":984},"GitLab on Google Cloud",{"href":985,"dataGaName":983,"dataGaLocation":966},"/partners/technology-partners/google-cloud-platform/",{"text":987,"config":988},"Why GitLab?",{"href":661,"dataGaName":987,"dataGaLocation":966},{"freeTrial":990,"mobileIcon":995,"desktopIcon":1000,"secondaryButton":1003},{"text":991,"config":992},"Start free trial",{"href":993,"dataGaName":622,"dataGaLocation":994},"https://gitlab.com/-/trials/new/","nav",{"altText":996,"config":997},"Gitlab Icon",{"src":998,"dataGaName":999,"dataGaLocation":994},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":996,"config":1001},{"src":1002,"dataGaName":999,"dataGaLocation":994},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1004,"config":1005},"Get Started",{"href":1006,"dataGaName":1007,"dataGaLocation":994},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1009,"mobileIcon":1013,"desktopIcon":1015},{"text":1010,"config":1011},"Learn more about GitLab Duo",{"href":653,"dataGaName":1012,"dataGaLocation":994},"gitlab duo",{"altText":996,"config":1014},{"src":998,"dataGaName":999,"dataGaLocation":994},{"altText":996,"config":1016},{"src":1002,"dataGaName":999,"dataGaLocation":994},{"button":1018,"mobileIcon":1023,"desktopIcon":1025},{"text":1019,"config":1020},"/switch",{"href":1021,"dataGaName":1022,"dataGaLocation":994},"#contact","switch",{"altText":996,"config":1024},{"src":998,"dataGaName":999,"dataGaLocation":994},{"altText":996,"config":1026},{"src":1027,"dataGaName":999,"dataGaLocation":994},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1029,"mobileIcon":1034,"desktopIcon":1036},{"text":1030,"config":1031},"Back to pricing",{"href":765,"dataGaName":1032,"dataGaLocation":994,"icon":1033},"back to pricing","GoBack",{"altText":996,"config":1035},{"src":998,"dataGaName":999,"dataGaLocation":994},{"altText":996,"config":1037},{"src":1002,"dataGaName":999,"dataGaLocation":994},{"title":1039,"titleMobile":1040,"button":1041,"config":1046},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":659,"config":1042},{"href":1043,"dataGaName":1044,"dataGaLocation":1045},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1047,"disabled":596},"release",{"data":1049},{"text":1050,"source":1051,"edit":1057,"contribute":1062,"config":1067,"items":1072,"minimal":1282},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1052,"config":1053},"View page source",{"href":1054,"dataGaName":1055,"dataGaLocation":1056},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1058,"config":1059},"Edit this page",{"href":1060,"dataGaName":1061,"dataGaLocation":1056},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1063,"config":1064},"Please contribute",{"href":1065,"dataGaName":1066,"dataGaLocation":1056},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1068,"facebook":1069,"youtube":1070,"linkedin":1071},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1073,1120,1174,1218,1250],{"title":763,"links":1074,"subMenu":1089},[1075,1079,1084],{"text":1076,"config":1077},"View plans",{"href":765,"dataGaName":1078,"dataGaLocation":1056},"view plans",{"text":1080,"config":1081},"Why Premium?",{"href":1082,"dataGaName":1083,"dataGaLocation":1056},"/pricing/premium/","why premium",{"text":1085,"config":1086},"Why Ultimate?",{"href":1087,"dataGaName":1088,"dataGaLocation":1056},"/pricing/ultimate/","why ultimate",[1090],{"title":1091,"links":1092},"Contact Us",[1093,1096,1098,1100,1105,1110,1115],{"text":1094,"config":1095},"Contact sales",{"href":946,"dataGaName":627,"dataGaLocation":1056},{"text":949,"config":1097},{"href":951,"dataGaName":952,"dataGaLocation":1056},{"text":954,"config":1099},{"href":956,"dataGaName":957,"dataGaLocation":1056},{"text":1101,"config":1102},"Status",{"href":1103,"dataGaName":1104,"dataGaLocation":1056},"https://status.gitlab.com/","status",{"text":1106,"config":1107},"Terms of use",{"href":1108,"dataGaName":1109,"dataGaLocation":1056},"/terms/","terms of use",{"text":1111,"config":1112},"Privacy statement",{"href":1113,"dataGaName":1114,"dataGaLocation":1056},"/privacy/","privacy statement",{"text":1116,"config":1117},"Cookie preferences",{"dataGaName":1118,"dataGaLocation":1056,"id":1119,"isOneTrustButton":147},"cookie preferences","ot-sdk-btn",{"title":664,"links":1121,"subMenu":1130},[1122,1126],{"text":1123,"config":1124},"DevSecOps platform",{"href":646,"dataGaName":1125,"dataGaLocation":1056},"devsecops platform",{"text":1127,"config":1128},"AI-Assisted Development",{"href":653,"dataGaName":1129,"dataGaLocation":1056},"ai-assisted development",[1131],{"title":1132,"links":1133},"Topics",[1134,1139,1144,1149,1154,1159,1164,1169],{"text":1135,"config":1136},"CICD",{"href":1137,"dataGaName":1138,"dataGaLocation":1056},"/topics/ci-cd/","cicd",{"text":1140,"config":1141},"GitOps",{"href":1142,"dataGaName":1143,"dataGaLocation":1056},"/topics/gitops/","gitops",{"text":1145,"config":1146},"DevOps",{"href":1147,"dataGaName":1148,"dataGaLocation":1056},"/topics/devops/","devops",{"text":1150,"config":1151},"Version Control",{"href":1152,"dataGaName":1153,"dataGaLocation":1056},"/topics/version-control/","version control",{"text":1155,"config":1156},"DevSecOps",{"href":1157,"dataGaName":1158,"dataGaLocation":1056},"/topics/devsecops/","devsecops",{"text":1160,"config":1161},"Cloud Native",{"href":1162,"dataGaName":1163,"dataGaLocation":1056},"/topics/cloud-native/","cloud native",{"text":1165,"config":1166},"AI for Coding",{"href":1167,"dataGaName":1168,"dataGaLocation":1056},"/topics/devops/ai-for-coding/","ai for coding",{"text":1170,"config":1171},"Agentic AI",{"href":1172,"dataGaName":1173,"dataGaLocation":1056},"/topics/agentic-ai/","agentic ai",{"title":1175,"links":1176},"Solutions",[1177,1179,1181,1186,1190,1193,1197,1200,1202,1205,1208,1213],{"text":708,"config":1178},{"href":703,"dataGaName":708,"dataGaLocation":1056},{"text":697,"config":1180},{"href":680,"dataGaName":681,"dataGaLocation":1056},{"text":1182,"config":1183},"Agile development",{"href":1184,"dataGaName":1185,"dataGaLocation":1056},"/solutions/agile-delivery/","agile delivery",{"text":1187,"config":1188},"SCM",{"href":693,"dataGaName":1189,"dataGaLocation":1056},"source code management",{"text":1135,"config":1191},{"href":686,"dataGaName":1192,"dataGaLocation":1056},"continuous integration & delivery",{"text":1194,"config":1195},"Value stream management",{"href":736,"dataGaName":1196,"dataGaLocation":1056},"value stream management",{"text":1140,"config":1198},{"href":1199,"dataGaName":1143,"dataGaLocation":1056},"/solutions/gitops/",{"text":746,"config":1201},{"href":748,"dataGaName":749,"dataGaLocation":1056},{"text":1203,"config":1204},"Small business",{"href":754,"dataGaName":755,"dataGaLocation":1056},{"text":1206,"config":1207},"Public sector",{"href":760,"dataGaName":761,"dataGaLocation":1056},{"text":1209,"config":1210},"Education",{"href":1211,"dataGaName":1212,"dataGaLocation":1056},"/solutions/education/","education",{"text":1214,"config":1215},"Financial services",{"href":1216,"dataGaName":1217,"dataGaLocation":1056},"/solutions/finance/","financial services",{"title":768,"links":1219},[1220,1222,1224,1226,1229,1231,1234,1236,1238,1240,1242,1244,1246,1248],{"text":781,"config":1221},{"href":783,"dataGaName":784,"dataGaLocation":1056},{"text":786,"config":1223},{"href":788,"dataGaName":789,"dataGaLocation":1056},{"text":791,"config":1225},{"href":793,"dataGaName":794,"dataGaLocation":1056},{"text":796,"config":1227},{"href":798,"dataGaName":1228,"dataGaLocation":1056},"docs",{"text":818,"config":1230},{"href":820,"dataGaName":821,"dataGaLocation":1056},{"text":1232,"config":1233},"What's new",{"href":878,"dataGaName":879,"dataGaLocation":1056},{"text":813,"config":1235},{"href":815,"dataGaName":816,"dataGaLocation":1056},{"text":832,"config":1237},{"href":834,"dataGaName":835,"dataGaLocation":1056},{"text":840,"config":1239},{"href":842,"dataGaName":843,"dataGaLocation":1056},{"text":845,"config":1241},{"href":847,"dataGaName":848,"dataGaLocation":1056},{"text":850,"config":1243},{"href":852,"dataGaName":853,"dataGaLocation":1056},{"text":855,"config":1245},{"href":857,"dataGaName":858,"dataGaLocation":1056},{"text":860,"config":1247},{"href":862,"dataGaName":863,"dataGaLocation":1056},{"text":865,"config":1249},{"href":867,"dataGaName":868,"dataGaLocation":1056},{"title":881,"links":1251},[1252,1254,1256,1258,1260,1262,1266,1271,1273,1275,1277],{"text":889,"config":1253},{"href":891,"dataGaName":883,"dataGaLocation":1056},{"text":894,"config":1255},{"href":896,"dataGaName":897,"dataGaLocation":1056},{"text":902,"config":1257},{"href":904,"dataGaName":905,"dataGaLocation":1056},{"text":907,"config":1259},{"href":909,"dataGaName":910,"dataGaLocation":1056},{"text":912,"config":1261},{"href":914,"dataGaName":915,"dataGaLocation":1056},{"text":1263,"config":1264},"Sustainability",{"href":1265,"dataGaName":1263,"dataGaLocation":1056},"/sustainability/",{"text":1267,"config":1268},"Diversity, inclusion and belonging (DIB)",{"href":1269,"dataGaName":1270,"dataGaLocation":1056},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":917,"config":1272},{"href":919,"dataGaName":920,"dataGaLocation":1056},{"text":927,"config":1274},{"href":929,"dataGaName":930,"dataGaLocation":1056},{"text":932,"config":1276},{"href":934,"dataGaName":935,"dataGaLocation":1056},{"text":1278,"config":1279},"Modern Slavery Transparency Statement",{"href":1280,"dataGaName":1281,"dataGaLocation":1056},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1283},[1284,1287,1290],{"text":1285,"config":1286},"Terms",{"href":1108,"dataGaName":1109,"dataGaLocation":1056},{"text":1288,"config":1289},"Cookies",{"dataGaName":1118,"dataGaLocation":1056,"id":1119,"isOneTrustButton":147},{"text":1291,"config":1292},"Privacy",{"href":1113,"dataGaName":1114,"dataGaLocation":1056},[1294],{"id":1295,"title":1296,"body":595,"config":1297,"content":1299,"description":595,"extension":1302,"meta":1303,"navigation":147,"path":1304,"seo":1305,"stem":1306,"__hash__":1307},"blogAuthors/en-us/blog/authors/brendan-oleary.yml","Brendan Oleary",{"template":1298},"BlogAuthor",{"name":7,"config":1300},{"headshot":82,"ctfId":1301},"brendan","yml",{},"/en-us/blog/authors/brendan-oleary",{},"en-us/blog/authors/brendan-oleary","IkXVLft77WlFK-Vgo210ZM3Io_PCcrXnYzkBCzx153k",[1309,1318,1326],{"title":1310,"description":1311,"heroImage":1312,"category":591,"date":1313,"authors":1314,"slug":1317,"externalUrl":595},"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",[1315,1316],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1319,"description":1320,"heroImage":1321,"category":591,"date":1322,"authors":1323,"slug":1325,"externalUrl":595},"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",[1324],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1327,"description":1328,"heroImage":1329,"category":591,"date":1330,"authors":1331,"slug":1333,"externalUrl":595},"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",[1332],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1335},[1336,1350,1362,1374],{"id":1337,"categories":1338,"header":1340,"text":1341,"button":1342,"image":1347},"ai-modernization",[1339],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1343,"config":1344},"Get your AI maturity score",{"href":1345,"dataGaName":1346,"dataGaLocation":821},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1348},{"src":1349},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1351,"categories":1352,"header":1354,"text":1341,"button":1355,"image":1359},"devops-modernization",[1353,1158],"product","Are you just managing tools or shipping innovation?",{"text":1356,"config":1357},"Get your DevOps maturity score",{"href":1358,"dataGaName":1346,"dataGaLocation":821},"/assessments/devops-modernization-assessment/",{"config":1360},{"src":1361},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1363,"categories":1364,"header":1366,"text":1341,"button":1367,"image":1371},"security-modernization",[1365],"security","Are you trading speed for security?",{"text":1368,"config":1369},"Get your security maturity score",{"href":1370,"dataGaName":1346,"dataGaLocation":821},"/assessments/security-modernization-assessment/",{"config":1372},{"src":1373},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1375,"paths":1376,"header":1379,"text":1380,"button":1381,"image":1386},"github-azure-migration",[1377,1378],"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":1382,"config":1383},"See how GitLab compares to GitHub",{"href":1384,"dataGaName":1385,"dataGaLocation":821},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1387},{"src":1361},{"header":1389,"blurb":1390,"button":1391,"secondaryButton":1396},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1392,"config":1393},"Get your free trial",{"href":1394,"dataGaName":622,"dataGaLocation":1395},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1094,"config":1397},{"href":946,"dataGaName":627,"dataGaLocation":1395},1786803752389]