[{"data":1,"prerenderedAt":1282},["ShallowReactive",2],{"/blog/hosting-vuejs-apps-using-gitlab-pages":3,"navigation-en-us":483,"banner-en-us":910,"footer-en-us":920,"blog-post-authors-en-us-Sophia Manicor|Noah Ing":1165,"blog-related-posts-en-us-hosting-vuejs-apps-using-gitlab-pages":1192,"blog-promotions-en-us":1218,"next-steps-en-us":1272},{"id":4,"title":5,"authors":6,"body":9,"category":461,"date":462,"description":463,"extension":464,"externalUrl":465,"faq":465,"featured":466,"heroImage":467,"meta":468,"navigation":176,"path":469,"seo":470,"slug":474,"stem":475,"tags":476,"template":481,"updatedDate":465,"__hash__":482},"blogPosts/en-us/blog/hosting-vuejs-apps-using-gitlab-pages.md","How to host VueJS apps using GitLab Pages",[7,8],"Sophia Manicor","Noah Ing",{"type":10,"value":11,"toc":452},"minimark",[12,16,21,34,38,44,95,98,111,116,131,134,138,152,358,362,374,382,400,404,411,415,421,424,428,448],[13,14,15],"p",{},"If you use VueJS to build websites, then you can host your website for free with GitLab Pages. This short tutorial walks you through a simple way to host and deploy your VueJS applications using GitLab CI/CD and GitLab Pages.",[17,18,20],"h2",{"id":19},"prequisites","Prequisites",[22,23,24,28,31],"ul",{},[25,26,27],"li",{},"A VueJS application",[25,29,30],{},"Working knowledge of GitLab CI",[25,32,33],{},"5 minutes",[17,35,37],{"id":36},"setting-up-your-vuejs-application","Setting up your VueJS application",[39,40,41],"ol",{},[25,42,43],{},"Install vue-cli.",[45,46,51],"pre",{"className":47,"code":48,"language":49,"meta":50,"style":50},"language-bash shiki shiki-themes github-light","npm install -g @vue/cli\n# OR\nyarn global add @vue/cli\n","bash","",[52,53,54,74,81],"code",{"__ignoreMap":50},[55,56,59,63,67,71],"span",{"class":57,"line":58},"line",1,[55,60,62],{"class":61},"s7eDp","npm",[55,64,66],{"class":65},"sYBdl"," install",[55,68,70],{"class":69},"sYu0t"," -g",[55,72,73],{"class":65}," @vue/cli\n",[55,75,77],{"class":57,"line":76},2,[55,78,80],{"class":79},"sAwPA","# OR\n",[55,82,84,87,90,93],{"class":57,"line":83},3,[55,85,86],{"class":61},"yarn",[55,88,89],{"class":65}," global",[55,91,92],{"class":65}," add",[55,94,73],{"class":65},[13,96,97],{},"You can check you have the right version of Vue with:",[45,99,101],{"className":47,"code":100,"language":49,"meta":50,"style":50},"vue --version\n",[52,102,103],{"__ignoreMap":50},[55,104,105,108],{"class":57,"line":58},[55,106,107],{"class":61},"vue",[55,109,110],{"class":69}," --version\n",[39,112,113],{"start":76},[25,114,115],{},"Create your application using:",[45,117,119],{"className":47,"code":118,"language":49,"meta":50,"style":50},"vue create name-of-app\n",[52,120,121],{"__ignoreMap":50},[55,122,123,125,128],{"class":57,"line":58},[55,124,107],{"class":61},[55,126,127],{"class":65}," create",[55,129,130],{"class":65}," name-of-app\n",[13,132,133],{},"When successfully completed, you will have a scaffolding of your VueJS application.",[17,135,137],{"id":136},"setting-up-gitlab-ciyml-for-gitlab-pages","Setting up .gitlab-ci.yml for GitLab Pages",[13,139,140,141,147,148,151],{},"Below is the ",[142,143,146],"a",{"href":144,"rel":145},"https://gitlab.com/demos/applications/vuejs-gitlab-pages/-/blob/main/.gitlab-ci.yml",[],"GitLab CI configuration"," necessary to deploy to GitLab Pages. Put this file into your root project. GitLab Pages always deploys your website from a specific folder called ",[52,149,150],{},"public",".",[45,153,157],{"className":154,"code":155,"language":156,"meta":50,"style":50},"language-yaml shiki shiki-themes github-light","image: \"node:16-alpine\"\n\nstages:\n  - build\n  - test\n  - deploy\n\nbuild:\n  stage: build\n  script:\n    - yarn install --frozen-lockfile --check-files --non-interactive\n    - yarn build\n  artifacts:\n    paths:\n      - public\n\npages:\n  stage: deploy\n  script:\n    - echo 'Pages deployment job'\n  artifacts:\n    paths:\n      - public\n  only:\n    - main\n\n","yaml",[52,158,159,172,178,186,195,203,211,216,224,234,242,251,259,267,275,284,289,297,306,313,321,328,335,342,350],{"__ignoreMap":50},[55,160,161,165,169],{"class":57,"line":58},[55,162,164],{"class":163},"shJU0","image",[55,166,168],{"class":167},"sgsFI",": ",[55,170,171],{"class":65},"\"node:16-alpine\"\n",[55,173,174],{"class":57,"line":76},[55,175,177],{"emptyLinePlaceholder":176},true,"\n",[55,179,180,183],{"class":57,"line":83},[55,181,182],{"class":163},"stages",[55,184,185],{"class":167},":\n",[55,187,189,192],{"class":57,"line":188},4,[55,190,191],{"class":167},"  - ",[55,193,194],{"class":65},"build\n",[55,196,198,200],{"class":57,"line":197},5,[55,199,191],{"class":167},[55,201,202],{"class":65},"test\n",[55,204,206,208],{"class":57,"line":205},6,[55,207,191],{"class":167},[55,209,210],{"class":65},"deploy\n",[55,212,214],{"class":57,"line":213},7,[55,215,177],{"emptyLinePlaceholder":176},[55,217,219,222],{"class":57,"line":218},8,[55,220,221],{"class":163},"build",[55,223,185],{"class":167},[55,225,227,230,232],{"class":57,"line":226},9,[55,228,229],{"class":163},"  stage",[55,231,168],{"class":167},[55,233,194],{"class":65},[55,235,237,240],{"class":57,"line":236},10,[55,238,239],{"class":163},"  script",[55,241,185],{"class":167},[55,243,245,248],{"class":57,"line":244},11,[55,246,247],{"class":167},"    - ",[55,249,250],{"class":65},"yarn install --frozen-lockfile --check-files --non-interactive\n",[55,252,254,256],{"class":57,"line":253},12,[55,255,247],{"class":167},[55,257,258],{"class":65},"yarn build\n",[55,260,262,265],{"class":57,"line":261},13,[55,263,264],{"class":163},"  artifacts",[55,266,185],{"class":167},[55,268,270,273],{"class":57,"line":269},14,[55,271,272],{"class":163},"    paths",[55,274,185],{"class":167},[55,276,278,281],{"class":57,"line":277},15,[55,279,280],{"class":167},"      - ",[55,282,283],{"class":65},"public\n",[55,285,287],{"class":57,"line":286},16,[55,288,177],{"emptyLinePlaceholder":176},[55,290,292,295],{"class":57,"line":291},17,[55,293,294],{"class":163},"pages",[55,296,185],{"class":167},[55,298,300,302,304],{"class":57,"line":299},18,[55,301,229],{"class":163},[55,303,168],{"class":167},[55,305,210],{"class":65},[55,307,309,311],{"class":57,"line":308},19,[55,310,239],{"class":163},[55,312,185],{"class":167},[55,314,316,318],{"class":57,"line":315},20,[55,317,247],{"class":167},[55,319,320],{"class":65},"echo 'Pages deployment job'\n",[55,322,324,326],{"class":57,"line":323},21,[55,325,264],{"class":163},[55,327,185],{"class":167},[55,329,331,333],{"class":57,"line":330},22,[55,332,272],{"class":163},[55,334,185],{"class":167},[55,336,338,340],{"class":57,"line":337},23,[55,339,280],{"class":167},[55,341,283],{"class":65},[55,343,345,348],{"class":57,"line":344},24,[55,346,347],{"class":163},"  only",[55,349,185],{"class":167},[55,351,353,355],{"class":57,"line":352},25,[55,354,247],{"class":167},[55,356,357],{"class":65},"main\n",[17,359,361],{"id":360},"vue-config-vueconfigjs","Vue config (vue.config.js)",[13,363,364,365,370,371,151],{},"In Vue, the artifacts are built in a folder called dist, in order for GitLab to deploy to Pages, we need to change the path of the artifacts. One way to do this is by changing the ",[142,366,369],{"href":367,"rel":368},"https://gitlab.com/demos/applications/vuejs-gitlab-pages/-/blob/main/vue.config.js",[],"Vue config file",", ",[52,372,373],{},"vue.config.js",[45,375,380],{"className":376,"code":378,"language":379,"meta":50},[377],"language-text","const { defineConfig } = require('@vue/cli-service')\n\nfunction publicPath () {\n  if (process.env.CI_PAGES_URL) {\n    return new URL(process.env.CI_PAGES_URL).pathname\n  } else {\n    return '/'\n  }\n}\n\nmodule.exports = defineConfig({\n  transpileDependencies: true,\n  publicPath: publicPath(),\n  outputDir: 'public'\n})\n","text",[52,381,378],{"__ignoreMap":50},[13,383,384,385,388,389,391,392,395,396,399],{},"Here we have set ",[52,386,387],{},"outputDir"," to ",[52,390,150],{}," so that GitLab will pick up the build artifacts and deploy to Pages. Another important piece when creating this configuration file is to change the ",[52,393,394],{},"publicPath",", which is the base URL your application will be deployed at. In this case, we have create a function ",[52,397,398],{},"publicPath()"," that checks if the CI_PAGES_URL environment variable is set and returns the correct base URL.",[17,401,403],{"id":402},"run-gitlab-ci","Run GitLab CI",[13,405,406],{},[407,408],"img",{"alt":409,"src":410},"vuejs-gitlab-pages-pipeline","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397772/blog/Content%20Images/2023-05-11-hosting-vuejs-apps-using-gitlab-pages/vuejs-gitlab-pages-pipeline.png",[17,412,414],{"id":413},"check-pages-to-get-your-url","Check Pages to get your URL",[13,416,417],{},[407,418],{"alt":419,"src":420},"gitlab-pages-domain","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397772/blog/Content%20Images/2023-05-11-hosting-vuejs-apps-using-gitlab-pages/gitlab-page-domain.png",[13,422,423],{},"Voila! You have set up a VueJS project with a fully functioning CI/CD pipeline. Enjoy your VueJS application hosted by GitLab Pages!",[17,425,427],{"id":426},"references","References",[22,429,430,436,442],{},[25,431,432],{},[142,433,434],{"href":434,"rel":435},"https://cli.vuejs.org/guide/installation.html",[],[25,437,438],{},[142,439,440],{"href":440,"rel":441},"https://cli.vuejs.org/guide/creating-a-project.html",[],[25,443,444],{},[142,445,446],{"href":446,"rel":447},"https://gitlab.com/demos/applications/vuejs-gitlab-pages",[],[449,450,451],"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 .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}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 .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}",{"title":50,"searchDepth":76,"depth":76,"links":453},[454,455,456,457,458,459,460],{"id":19,"depth":76,"text":20},{"id":36,"depth":76,"text":37},{"id":136,"depth":76,"text":137},{"id":360,"depth":76,"text":361},{"id":402,"depth":76,"text":403},{"id":413,"depth":76,"text":414},{"id":426,"depth":76,"text":427},"engineering","2023-09-13","Follow this tutorial, including detailed configuration guidance, to quickly get your application up and running for free.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683489/Blog/Hero%20Images/hosting.png",{},"/en-us/blog/hosting-vuejs-apps-using-gitlab-pages",{"title":5,"description":463,"ogTitle":5,"ogDescription":463,"noIndex":466,"ogImage":467,"ogUrl":471,"ogSiteName":472,"ogType":473,"canonicalUrls":471},"https://about.gitlab.com/blog/hosting-vuejs-apps-using-gitlab-pages","https://about.gitlab.com","article","hosting-vuejs-apps-using-gitlab-pages","en-us/blog/hosting-vuejs-apps-using-gitlab-pages",[477,478,479,480],"CI/CD","tutorial","CI","CD","BlogPost","L-BgiBoeoHdpjR4c1ELjVSsu1lcWfx6YwC3xnwZpQEA",{"logo":484,"freeTrial":489,"sales":494,"login":499,"items":504,"search":830,"minimal":861,"duo":880,"switchNav":889,"pricingDeployment":900},{"config":485},{"href":486,"dataGaName":487,"dataGaLocation":488},"/","gitlab logo","header",{"text":490,"config":491},"Get free trial",{"href":492,"dataGaName":493,"dataGaLocation":488},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":495,"config":496},"Request a demo",{"href":497,"dataGaName":498,"dataGaLocation":488},"/sales/?contact-topic=request-demo","sales",{"text":500,"config":501},"Sign in",{"href":502,"dataGaName":503,"dataGaLocation":488},"https://gitlab.com/users/sign_in/","sign in",[505,534,633,638,752,808],{"text":506,"config":507,"menu":509},"Platform",{"dataNavLevelOne":508},"platform",{"type":510,"columns":511},"cards",[512,518,526],{"title":506,"description":513,"link":514},"The intelligent orchestration platform for DevSecOps",{"text":515,"config":516},"Explore our Platform",{"href":517,"dataGaName":508,"dataGaLocation":488},"/platform/",{"title":519,"description":520,"link":521},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":522,"config":523},"Meet GitLab Duo",{"href":524,"dataGaName":525,"dataGaLocation":488},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":527,"description":528,"link":529},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":530,"config":531},"Learn more",{"href":532,"dataGaName":533,"dataGaLocation":488},"/why-gitlab/","why gitlab",{"text":535,"left":176,"config":536,"menu":538},"Product",{"dataNavLevelOne":537},"solutions",{"type":539,"link":540,"columns":544,"feature":612},"lists",{"text":541,"config":542},"View all Solutions",{"href":543,"dataGaName":537,"dataGaLocation":488},"/solutions/",[545,568,591],{"title":546,"description":547,"link":548,"items":553},"Automation","CI/CD and automation to accelerate deployment",{"config":549},{"icon":550,"href":551,"dataGaName":552,"dataGaLocation":488},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[554,557,560,564],{"text":477,"config":555},{"href":556,"dataGaLocation":488,"dataGaName":477},"/solutions/continuous-integration/",{"text":519,"config":558},{"href":524,"dataGaLocation":488,"dataGaName":559},"gitlab duo agent platform - product menu",{"text":561,"config":562},"Source Code Management",{"href":563,"dataGaLocation":488,"dataGaName":561},"/solutions/source-code-management/",{"text":565,"config":566},"Automated Software Delivery",{"href":551,"dataGaLocation":488,"dataGaName":567},"Automated software delivery",{"title":569,"description":570,"link":571,"items":576},"Security","Deliver code faster without compromising security",{"config":572},{"href":573,"dataGaName":574,"dataGaLocation":488,"icon":575},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[577,581,586],{"text":578,"config":579},"Application Security Testing",{"href":573,"dataGaName":580,"dataGaLocation":488},"Application security testing",{"text":582,"config":583},"Software Supply Chain Security",{"href":584,"dataGaLocation":488,"dataGaName":585},"/solutions/supply-chain/","Software supply chain security",{"text":587,"config":588},"Software Compliance",{"href":589,"dataGaName":590,"dataGaLocation":488},"/solutions/software-compliance/","software compliance",{"title":592,"link":593,"items":598},"Measurement",{"config":594},{"icon":595,"href":596,"dataGaName":597,"dataGaLocation":488},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[599,603,607],{"text":600,"config":601},"Visibility & Measurement",{"href":596,"dataGaLocation":488,"dataGaName":602},"Visibility and Measurement",{"text":604,"config":605},"Value Stream Management",{"href":606,"dataGaLocation":488,"dataGaName":604},"/solutions/value-stream-management/",{"text":608,"config":609},"Analytics & Insights",{"href":610,"dataGaLocation":488,"dataGaName":611},"/solutions/analytics-and-insights/","Analytics and insights",{"title":613,"type":539,"items":614},"GitLab for",[615,621,627],{"text":616,"config":617},"Enterprise",{"icon":618,"href":619,"dataGaLocation":488,"dataGaName":620},"Building","/enterprise/","enterprise",{"text":622,"config":623},"Small Business",{"icon":624,"href":625,"dataGaLocation":488,"dataGaName":626},"Work","/small-business/","small business",{"text":628,"config":629},"Public Sector",{"icon":630,"href":631,"dataGaLocation":488,"dataGaName":632},"Organization","/solutions/public-sector/","public sector",{"text":634,"config":635},"Pricing",{"href":636,"dataGaName":637,"dataGaLocation":488,"dataNavLevelOne":637},"/pricing/","pricing",{"text":639,"config":640,"menu":642},"Resources",{"dataNavLevelOne":641},"resources",{"type":539,"link":643,"columns":647,"feature":741},{"text":644,"config":645},"View all resources",{"href":646,"dataGaName":641,"dataGaLocation":488},"/resources/",[648,681,708],{"title":649,"items":650},"Getting started",[651,656,661,666,671,676],{"text":652,"config":653},"Install",{"href":654,"dataGaName":655,"dataGaLocation":488},"/install/","install",{"text":657,"config":658},"Quick start guides",{"href":659,"dataGaName":660,"dataGaLocation":488},"/get-started/","quick setup checklists",{"text":662,"config":663},"Learn",{"href":664,"dataGaLocation":488,"dataGaName":665},"https://university.gitlab.com/","learn",{"text":667,"config":668},"Product documentation",{"href":669,"dataGaName":670,"dataGaLocation":488},"https://docs.gitlab.com/","product documentation",{"text":672,"config":673},"Best practice videos",{"href":674,"dataGaName":675,"dataGaLocation":488},"/getting-started-videos/","best practice videos",{"text":677,"config":678},"Integrations",{"href":679,"dataGaName":680,"dataGaLocation":488},"/integrations/","integrations",{"title":682,"items":683},"Discover",[684,689,694,699,703],{"text":685,"config":686},"Customer success stories",{"href":687,"dataGaName":688,"dataGaLocation":488},"/customers/","customer success stories",{"text":690,"config":691},"Blog",{"href":692,"dataGaName":693,"dataGaLocation":488},"/blog/","blog",{"text":695,"config":696},"Demo Hub",{"href":697,"dataGaName":698,"dataGaLocation":488},"/demo-hub/","demo hub",{"text":700,"config":701},"The Source",{"href":702,"dataGaName":693,"dataGaLocation":488},"/the-source/",{"text":704,"config":705},"Remote",{"href":706,"dataGaName":707,"dataGaLocation":488},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":709,"items":710},"Connect",[711,716,721,726,731,736],{"text":712,"config":713},"GitLab Services",{"href":714,"dataGaName":715,"dataGaLocation":488},"/services/","services",{"text":717,"config":718},"Contribute",{"href":719,"dataGaName":720,"dataGaLocation":488},"https://contributors.gitlab.com","contribute",{"text":722,"config":723},"Community",{"href":724,"dataGaName":725,"dataGaLocation":488},"/community/","community",{"text":727,"config":728},"Forum",{"href":729,"dataGaName":730,"dataGaLocation":488},"https://forum.gitlab.com/","forum",{"text":732,"config":733},"Events",{"href":734,"dataGaName":735,"dataGaLocation":488},"/events/","events",{"text":737,"config":738},"Partners",{"href":739,"dataGaName":740,"dataGaLocation":488},"/partners/","partners",{"config":742,"title":745,"text":746,"link":747},{"background":743,"textColor":744},"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":748,"config":749},"Read the latest",{"href":750,"dataGaName":751,"dataGaLocation":488},"/whats-new/","whats new",{"text":753,"config":754,"menu":756},"Company",{"dataNavLevelOne":755},"company",{"type":539,"columns":757},[758],{"items":759},[760,765,771,773,778,783,788,793,798,803],{"text":761,"config":762},"About",{"href":763,"dataGaName":764,"dataGaLocation":488},"/company/","about",{"text":766,"config":767,"footerGa":770},"Jobs",{"href":768,"dataGaName":769,"dataGaLocation":488},"/jobs/","jobs",{"dataGaName":769},{"text":732,"config":772},{"href":734,"dataGaName":735,"dataGaLocation":488},{"text":774,"config":775},"Leadership",{"href":776,"dataGaName":777,"dataGaLocation":488},"/company/team/e-group/","leadership",{"text":779,"config":780},"Handbook",{"href":781,"dataGaName":782,"dataGaLocation":488},"https://handbook.gitlab.com/","handbook",{"text":784,"config":785},"Investor relations",{"href":786,"dataGaName":787,"dataGaLocation":488},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":789,"config":790},"Trust Center",{"href":791,"dataGaName":792,"dataGaLocation":488},"/security/","trust center",{"text":794,"config":795},"AI Transparency Center",{"href":796,"dataGaName":797,"dataGaLocation":488},"/ai-transparency-center/","ai transparency center",{"text":799,"config":800},"Newsletter",{"href":801,"dataGaName":802,"dataGaLocation":488},"/company/contact/#contact-forms","newsletter",{"text":804,"config":805},"Press",{"href":806,"dataGaName":807,"dataGaLocation":488},"/press/","press",{"text":809,"config":810,"menu":811},"Contact us",{"dataNavLevelOne":755},{"type":539,"columns":812},[813],{"items":814},[815,820,825],{"text":816,"config":817},"Talk to sales",{"href":818,"dataGaName":819,"dataGaLocation":488},"/sales/","talk to sales",{"text":821,"config":822},"Support portal",{"href":823,"dataGaName":824,"dataGaLocation":488},"https://support.gitlab.com/hc/en-us","support portal",{"text":826,"config":827},"Customer portal",{"href":828,"dataGaName":829,"dataGaLocation":488},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":831,"login":832,"suggestions":839},"Close",{"text":833,"link":834},"To search repositories and projects, login to",{"text":835,"config":836},"gitlab.com",{"href":502,"dataGaName":837,"dataGaLocation":838},"search login","search",{"text":840,"default":841},"Suggestions",[842,844,848,850,854,858],{"text":519,"config":843},{"href":524,"dataGaName":519,"dataGaLocation":838},{"text":845,"config":846},"Code Suggestions (AI)",{"href":847,"dataGaName":845,"dataGaLocation":838},"/solutions/code-suggestions/",{"text":477,"config":849},{"href":556,"dataGaName":477,"dataGaLocation":838},{"text":851,"config":852},"GitLab on AWS",{"href":853,"dataGaName":851,"dataGaLocation":838},"/partners/technology-partners/aws/",{"text":855,"config":856},"GitLab on Google Cloud",{"href":857,"dataGaName":855,"dataGaLocation":838},"/partners/technology-partners/google-cloud-platform/",{"text":859,"config":860},"Why GitLab?",{"href":532,"dataGaName":859,"dataGaLocation":838},{"freeTrial":862,"mobileIcon":867,"desktopIcon":872,"secondaryButton":875},{"text":863,"config":864},"Start free trial",{"href":865,"dataGaName":493,"dataGaLocation":866},"https://gitlab.com/-/trials/new/","nav",{"altText":868,"config":869},"Gitlab Icon",{"src":870,"dataGaName":871,"dataGaLocation":866},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":868,"config":873},{"src":874,"dataGaName":871,"dataGaLocation":866},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":876,"config":877},"Get Started",{"href":878,"dataGaName":879,"dataGaLocation":866},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":881,"mobileIcon":885,"desktopIcon":887},{"text":882,"config":883},"Learn more about GitLab Duo",{"href":524,"dataGaName":884,"dataGaLocation":866},"gitlab duo",{"altText":868,"config":886},{"src":870,"dataGaName":871,"dataGaLocation":866},{"altText":868,"config":888},{"src":874,"dataGaName":871,"dataGaLocation":866},{"button":890,"mobileIcon":895,"desktopIcon":897},{"text":891,"config":892},"/switch",{"href":893,"dataGaName":894,"dataGaLocation":866},"#contact","switch",{"altText":868,"config":896},{"src":870,"dataGaName":871,"dataGaLocation":866},{"altText":868,"config":898},{"src":899,"dataGaName":871,"dataGaLocation":866},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":901,"mobileIcon":906,"desktopIcon":908},{"text":902,"config":903},"Back to pricing",{"href":636,"dataGaName":904,"dataGaLocation":866,"icon":905},"back to pricing","GoBack",{"altText":868,"config":907},{"src":870,"dataGaName":871,"dataGaLocation":866},{"altText":868,"config":909},{"src":874,"dataGaName":871,"dataGaLocation":866},{"title":911,"titleMobile":912,"button":913,"config":918},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":530,"config":914},{"href":915,"dataGaName":916,"dataGaLocation":917},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":919,"disabled":466},"release",{"data":921},{"text":922,"source":923,"edit":929,"contribute":934,"config":939,"items":944,"minimal":1154},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":924,"config":925},"View page source",{"href":926,"dataGaName":927,"dataGaLocation":928},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":930,"config":931},"Edit this page",{"href":932,"dataGaName":933,"dataGaLocation":928},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":935,"config":936},"Please contribute",{"href":937,"dataGaName":938,"dataGaLocation":928},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":940,"facebook":941,"youtube":942,"linkedin":943},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[945,992,1046,1090,1122],{"title":634,"links":946,"subMenu":961},[947,951,956],{"text":948,"config":949},"View plans",{"href":636,"dataGaName":950,"dataGaLocation":928},"view plans",{"text":952,"config":953},"Why Premium?",{"href":954,"dataGaName":955,"dataGaLocation":928},"/pricing/premium/","why premium",{"text":957,"config":958},"Why Ultimate?",{"href":959,"dataGaName":960,"dataGaLocation":928},"/pricing/ultimate/","why ultimate",[962],{"title":963,"links":964},"Contact Us",[965,968,970,972,977,982,987],{"text":966,"config":967},"Contact sales",{"href":818,"dataGaName":498,"dataGaLocation":928},{"text":821,"config":969},{"href":823,"dataGaName":824,"dataGaLocation":928},{"text":826,"config":971},{"href":828,"dataGaName":829,"dataGaLocation":928},{"text":973,"config":974},"Status",{"href":975,"dataGaName":976,"dataGaLocation":928},"https://status.gitlab.com/","status",{"text":978,"config":979},"Terms of use",{"href":980,"dataGaName":981,"dataGaLocation":928},"/terms/","terms of use",{"text":983,"config":984},"Privacy statement",{"href":985,"dataGaName":986,"dataGaLocation":928},"/privacy/","privacy statement",{"text":988,"config":989},"Cookie preferences",{"dataGaName":990,"dataGaLocation":928,"id":991,"isOneTrustButton":176},"cookie preferences","ot-sdk-btn",{"title":535,"links":993,"subMenu":1002},[994,998],{"text":995,"config":996},"DevSecOps platform",{"href":517,"dataGaName":997,"dataGaLocation":928},"devsecops platform",{"text":999,"config":1000},"AI-Assisted Development",{"href":524,"dataGaName":1001,"dataGaLocation":928},"ai-assisted development",[1003],{"title":1004,"links":1005},"Topics",[1006,1011,1016,1021,1026,1031,1036,1041],{"text":1007,"config":1008},"CICD",{"href":1009,"dataGaName":1010,"dataGaLocation":928},"/topics/ci-cd/","cicd",{"text":1012,"config":1013},"GitOps",{"href":1014,"dataGaName":1015,"dataGaLocation":928},"/topics/gitops/","gitops",{"text":1017,"config":1018},"DevOps",{"href":1019,"dataGaName":1020,"dataGaLocation":928},"/topics/devops/","devops",{"text":1022,"config":1023},"Version Control",{"href":1024,"dataGaName":1025,"dataGaLocation":928},"/topics/version-control/","version control",{"text":1027,"config":1028},"DevSecOps",{"href":1029,"dataGaName":1030,"dataGaLocation":928},"/topics/devsecops/","devsecops",{"text":1032,"config":1033},"Cloud Native",{"href":1034,"dataGaName":1035,"dataGaLocation":928},"/topics/cloud-native/","cloud native",{"text":1037,"config":1038},"AI for Coding",{"href":1039,"dataGaName":1040,"dataGaLocation":928},"/topics/devops/ai-for-coding/","ai for coding",{"text":1042,"config":1043},"Agentic AI",{"href":1044,"dataGaName":1045,"dataGaLocation":928},"/topics/agentic-ai/","agentic ai",{"title":1047,"links":1048},"Solutions",[1049,1051,1053,1058,1062,1065,1069,1072,1074,1077,1080,1085],{"text":578,"config":1050},{"href":573,"dataGaName":578,"dataGaLocation":928},{"text":567,"config":1052},{"href":551,"dataGaName":552,"dataGaLocation":928},{"text":1054,"config":1055},"Agile development",{"href":1056,"dataGaName":1057,"dataGaLocation":928},"/solutions/agile-delivery/","agile delivery",{"text":1059,"config":1060},"SCM",{"href":563,"dataGaName":1061,"dataGaLocation":928},"source code management",{"text":1007,"config":1063},{"href":556,"dataGaName":1064,"dataGaLocation":928},"continuous integration & delivery",{"text":1066,"config":1067},"Value stream management",{"href":606,"dataGaName":1068,"dataGaLocation":928},"value stream management",{"text":1012,"config":1070},{"href":1071,"dataGaName":1015,"dataGaLocation":928},"/solutions/gitops/",{"text":616,"config":1073},{"href":619,"dataGaName":620,"dataGaLocation":928},{"text":1075,"config":1076},"Small business",{"href":625,"dataGaName":626,"dataGaLocation":928},{"text":1078,"config":1079},"Public sector",{"href":631,"dataGaName":632,"dataGaLocation":928},{"text":1081,"config":1082},"Education",{"href":1083,"dataGaName":1084,"dataGaLocation":928},"/solutions/education/","education",{"text":1086,"config":1087},"Financial services",{"href":1088,"dataGaName":1089,"dataGaLocation":928},"/solutions/finance/","financial services",{"title":639,"links":1091},[1092,1094,1096,1098,1101,1103,1106,1108,1110,1112,1114,1116,1118,1120],{"text":652,"config":1093},{"href":654,"dataGaName":655,"dataGaLocation":928},{"text":657,"config":1095},{"href":659,"dataGaName":660,"dataGaLocation":928},{"text":662,"config":1097},{"href":664,"dataGaName":665,"dataGaLocation":928},{"text":667,"config":1099},{"href":669,"dataGaName":1100,"dataGaLocation":928},"docs",{"text":690,"config":1102},{"href":692,"dataGaName":693,"dataGaLocation":928},{"text":1104,"config":1105},"What's new",{"href":750,"dataGaName":751,"dataGaLocation":928},{"text":685,"config":1107},{"href":687,"dataGaName":688,"dataGaLocation":928},{"text":704,"config":1109},{"href":706,"dataGaName":707,"dataGaLocation":928},{"text":712,"config":1111},{"href":714,"dataGaName":715,"dataGaLocation":928},{"text":717,"config":1113},{"href":719,"dataGaName":720,"dataGaLocation":928},{"text":722,"config":1115},{"href":724,"dataGaName":725,"dataGaLocation":928},{"text":727,"config":1117},{"href":729,"dataGaName":730,"dataGaLocation":928},{"text":732,"config":1119},{"href":734,"dataGaName":735,"dataGaLocation":928},{"text":737,"config":1121},{"href":739,"dataGaName":740,"dataGaLocation":928},{"title":753,"links":1123},[1124,1126,1128,1130,1132,1134,1138,1143,1145,1147,1149],{"text":761,"config":1125},{"href":763,"dataGaName":755,"dataGaLocation":928},{"text":766,"config":1127},{"href":768,"dataGaName":769,"dataGaLocation":928},{"text":774,"config":1129},{"href":776,"dataGaName":777,"dataGaLocation":928},{"text":779,"config":1131},{"href":781,"dataGaName":782,"dataGaLocation":928},{"text":784,"config":1133},{"href":786,"dataGaName":787,"dataGaLocation":928},{"text":1135,"config":1136},"Sustainability",{"href":1137,"dataGaName":1135,"dataGaLocation":928},"/sustainability/",{"text":1139,"config":1140},"Diversity, inclusion and belonging (DIB)",{"href":1141,"dataGaName":1142,"dataGaLocation":928},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":789,"config":1144},{"href":791,"dataGaName":792,"dataGaLocation":928},{"text":799,"config":1146},{"href":801,"dataGaName":802,"dataGaLocation":928},{"text":804,"config":1148},{"href":806,"dataGaName":807,"dataGaLocation":928},{"text":1150,"config":1151},"Modern Slavery Transparency Statement",{"href":1152,"dataGaName":1153,"dataGaLocation":928},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1155},[1156,1159,1162],{"text":1157,"config":1158},"Terms",{"href":980,"dataGaName":981,"dataGaLocation":928},{"text":1160,"config":1161},"Cookies",{"dataGaName":990,"dataGaLocation":928,"id":991,"isOneTrustButton":176},{"text":1163,"config":1164},"Privacy",{"href":985,"dataGaName":986,"dataGaLocation":928},[1166,1180],{"id":1167,"title":7,"body":465,"config":1168,"content":1170,"description":465,"extension":1174,"meta":1175,"navigation":176,"path":1176,"seo":1177,"stem":1178,"__hash__":1179},"blogAuthors/en-us/blog/authors/sophia-manicor.yml",{"template":1169},"BlogAuthor",{"name":7,"config":1171},{"headshot":1172,"ctfId":1173},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665576/Blog/Author%20Headshots/sophie_manicor_headshot.png","79Msqcc9YZrC0IvTggfQ5y","yml",{},"/en-us/blog/authors/sophia-manicor",{},"en-us/blog/authors/sophia-manicor","i6tZEYh0BGVe56GYn5Z59J7fVNHk3-yVCcPBXBlfXJY",{"id":1181,"title":8,"body":465,"config":1182,"content":1183,"description":465,"extension":1174,"meta":1187,"navigation":176,"path":1188,"seo":1189,"stem":1190,"__hash__":1191},"blogAuthors/en-us/blog/authors/noah-ing.yml",{"template":1169},{"name":8,"config":1184},{"headshot":1185,"ctfId":1186},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664410/Blog/Author%20Headshots/noahing.png","noahing",{},"/en-us/blog/authors/noah-ing",{},"en-us/blog/authors/noah-ing","NHgV_yTX8kHX01mE2SSxC6hcOMw3BCWiblr8m6csLkw",[1193,1202,1210],{"title":1194,"description":1195,"heroImage":1196,"category":461,"date":1197,"authors":1198,"slug":1201,"externalUrl":465},"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",[1199,1200],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1203,"description":1204,"heroImage":1205,"category":461,"date":1206,"authors":1207,"slug":1209,"externalUrl":465},"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",[1208],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1211,"description":1212,"heroImage":1213,"category":461,"date":1214,"authors":1215,"slug":1217,"externalUrl":465},"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",[1216],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1219},[1220,1234,1246,1258],{"id":1221,"categories":1222,"header":1224,"text":1225,"button":1226,"image":1231},"ai-modernization",[1223],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1227,"config":1228},"Get your AI maturity score",{"href":1229,"dataGaName":1230,"dataGaLocation":693},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1232},{"src":1233},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1235,"categories":1236,"header":1238,"text":1225,"button":1239,"image":1243},"devops-modernization",[1237,1030],"product","Are you just managing tools or shipping innovation?",{"text":1240,"config":1241},"Get your DevOps maturity score",{"href":1242,"dataGaName":1230,"dataGaLocation":693},"/assessments/devops-modernization-assessment/",{"config":1244},{"src":1245},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1247,"categories":1248,"header":1250,"text":1225,"button":1251,"image":1255},"security-modernization",[1249],"security","Are you trading speed for security?",{"text":1252,"config":1253},"Get your security maturity score",{"href":1254,"dataGaName":1230,"dataGaLocation":693},"/assessments/security-modernization-assessment/",{"config":1256},{"src":1257},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1259,"paths":1260,"header":1263,"text":1264,"button":1265,"image":1270},"github-azure-migration",[1261,1262],"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":1266,"config":1267},"See how GitLab compares to GitHub",{"href":1268,"dataGaName":1269,"dataGaLocation":693},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1271},{"src":1245},{"header":1273,"blurb":1274,"button":1275,"secondaryButton":1280},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1276,"config":1277},"Get your free trial",{"href":1278,"dataGaName":493,"dataGaLocation":1279},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":966,"config":1281},{"href":818,"dataGaName":498,"dataGaLocation":1279},1786803769413]