[{"data":1,"prerenderedAt":1487},["ShallowReactive",2],{"/blog/publishing-an-astro-site-with-pages":3,"navigation-en-us":701,"banner-en-us":1128,"footer-en-us":1138,"blog-post-authors-en-us-Janis Altherr":1383,"blog-related-posts-en-us-publishing-an-astro-site-with-pages":1398,"blog-promotions-en-us":1424,"next-steps-en-us":1477},{"id":4,"title":5,"authors":6,"body":8,"category":680,"date":681,"description":682,"extension":683,"externalUrl":684,"faq":684,"featured":685,"heroImage":686,"meta":687,"navigation":144,"path":688,"seo":689,"slug":693,"stem":694,"tags":695,"template":699,"updatedDate":684,"__hash__":700},"blogPosts/en-us/blog/publishing-an-astro-site-with-pages.md","How to publish your Astro Site with GitLab Pages",[7],"Janis Altherr",{"type":9,"value":10,"toc":672},"minimark",[11,15,20,23,33,59,66,73,97,101,108,231,234,253,256,272,279,290,336,348,413,416,445,449,452,455,458,465,507,510,514,521,528,531,537,563,569,572,578,581,587,597,604,611,617,623,626,632,636,639,643,668],[12,13,14],"p",{},"Astro is an amazing new framework to create content-focused static sites and GitLab Pages is a great way to deploy a site built with Astro. Here's a step-by-step guide on how to build and deploy an Astro Site with GitLab Pages.",[16,17,19],"h2",{"id":18},"create-the-project-locally","Create the project locally",[12,21,22],{},"First, create the Astro Project locally using the Astro CLI.",[12,24,25,26,32],{},"Note: Even though we're offering a ",[27,28,31],"a",{"href":29,"rel":30},"https://gitlab.com/pages/astro",[],"project template",",\nwe recommend using the CLI locally to scaffold your project. This ensures you can create your project with the latest defaults.",[34,35,40],"pre",{"className":36,"code":37,"language":38,"meta":39,"style":39},"language-shell shiki shiki-themes github-light","npm create astro@latest\n","shell","",[41,42,43],"code",{"__ignoreMap":39},[44,45,48,52,56],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"s7eDp","npm",[44,53,55],{"class":54},"sYBdl"," create",[44,57,58],{"class":54}," astro@latest\n",[12,60,61,62,65],{},"Now follow the CLI instructions. As part of the setup, Astro will create the\nproject folder for you. During the course of the setup Astro will ask whether you'd like to initialize a new Git repository. Answer this with ",[41,63,64],{},"y"," (yes).",[12,67,68,69,72],{},"Once the Astro CLI is done scaffolding your project, ",[41,70,71],{},"cd"," into the new folder:",[34,74,76],{"className":36,"code":75,"language":38,"meta":39,"style":39},"cd \u003Cyour-project>\n",[41,77,78],{"__ignoreMap":39},[44,79,80,83,87,90,94],{"class":46,"line":47},[44,81,71],{"class":82},"sYu0t",[44,84,86],{"class":85},"sD7c4"," \u003C",[44,88,89],{"class":54},"your-projec",[44,91,93],{"class":92},"sgsFI","t",[44,95,96],{"class":85},">\n",[16,98,100],{"id":99},"configure-astro-for-gitlab-pages","Configure Astro for GitLab Pages",[12,102,103,104,107],{},"Astro comes with a few defaults that are incompatible with GitLab Pages. So before continuing, we need to set up a compatible config.\nEdit your ",[41,105,106],{},"astro.config.mjs"," to include the following:",[34,109,113],{"className":110,"code":111,"language":112,"meta":39,"style":39},"language-javascript shiki shiki-themes github-light","// astro.config.mjs\nimport { defineConfig } from 'astro/config';\n\n// https://astro.build/config\nexport default defineConfig({\n  // GitLab Pages requires exposed files to be located in a folder called \"public\".\n  // So we're instructing Astro to put the static build output in a folder of that name.\n  outDir: 'public',\n\n  // The folder name Astro uses for static files (`public`) is already reserved\n  // for the build output. So in deviation from the defaults we're using a folder\n  // called `static` instead.\n  publicDir: 'static',\n});\n","javascript",[41,114,115,121,139,146,152,167,173,179,191,196,202,208,214,225],{"__ignoreMap":39},[44,116,117],{"class":46,"line":47},[44,118,120],{"class":119},"sAwPA","// astro.config.mjs\n",[44,122,124,127,130,133,136],{"class":46,"line":123},2,[44,125,126],{"class":85},"import",[44,128,129],{"class":92}," { defineConfig } ",[44,131,132],{"class":85},"from",[44,134,135],{"class":54}," 'astro/config'",[44,137,138],{"class":92},";\n",[44,140,142],{"class":46,"line":141},3,[44,143,145],{"emptyLinePlaceholder":144},true,"\n",[44,147,149],{"class":46,"line":148},4,[44,150,151],{"class":119},"// https://astro.build/config\n",[44,153,155,158,161,164],{"class":46,"line":154},5,[44,156,157],{"class":85},"export",[44,159,160],{"class":85}," default",[44,162,163],{"class":50}," defineConfig",[44,165,166],{"class":92},"({\n",[44,168,170],{"class":46,"line":169},6,[44,171,172],{"class":119},"  // GitLab Pages requires exposed files to be located in a folder called \"public\".\n",[44,174,176],{"class":46,"line":175},7,[44,177,178],{"class":119},"  // So we're instructing Astro to put the static build output in a folder of that name.\n",[44,180,182,185,188],{"class":46,"line":181},8,[44,183,184],{"class":92},"  outDir: ",[44,186,187],{"class":54},"'public'",[44,189,190],{"class":92},",\n",[44,192,194],{"class":46,"line":193},9,[44,195,145],{"emptyLinePlaceholder":144},[44,197,199],{"class":46,"line":198},10,[44,200,201],{"class":119},"  // The folder name Astro uses for static files (`public`) is already reserved\n",[44,203,205],{"class":46,"line":204},11,[44,206,207],{"class":119},"  // for the build output. So in deviation from the defaults we're using a folder\n",[44,209,211],{"class":46,"line":210},12,[44,212,213],{"class":119},"  // called `static` instead.\n",[44,215,217,220,223],{"class":46,"line":216},13,[44,218,219],{"class":92},"  publicDir: ",[44,221,222],{"class":54},"'static'",[44,224,190],{"class":92},[44,226,228],{"class":46,"line":227},14,[44,229,230],{"class":92},"});\n",[12,232,233],{},"Why are we doing this? GitLab Pages is a way to publish some files in a\nrepository, no matter what build tool you used to generate them. Unlike with\nother deployment tools the exposed files and the source code can live\ntogether in one place. So to ensure you don't accidentally expose sensitive\nfiles we're requiring you to consciously put them into a\nfolder named \"public\".",[12,235,236,237,240,241,244,245,249,250,252],{},"By default, Astro uses ",[41,238,239],{},"public"," for something different – the static\nassets. So we have to change that behavior. The above config tells Astro\nthat we'll put the static files in a folder named ",[41,242,243],{},"static"," and want the ",[246,247,248],"em",{},"output","\nfiles to be put in a folder named, as required, ",[41,251,239],{},".",[12,254,255],{},"Astro already generated that assets folder under the old name while\nscaffolding, so we'll have to rename it. Inside your Astro project folder, run:",[34,257,259],{"className":36,"code":258,"language":38,"meta":39,"style":39},"mv public static\n",[41,260,261],{"__ignoreMap":39},[44,262,263,266,269],{"class":46,"line":47},[44,264,265],{"class":50},"mv",[44,267,268],{"class":54}," public",[44,270,271],{"class":54}," static\n",[12,273,274,275,278],{},"Depending on your project configuration, GitLab Pages will deploy your site\nat a URL that follows the format simlar to ",[41,276,277],{},"https://\u003Cuser-or-group>.gitlab. io/\u003Cproject-name>",". If you want to use the default URL, you need to adjust Astro\nto the fact that the site is not mounted at the root path, otherwise it may\nnot load static assets (such as the CSS files) correctly.",[12,280,281,286,287,289],{},[27,282,285],{"href":283,"rel":284},"https://docs.gitlab.com/user/project/pages/getting_started_part_one/#gitlab-pages-default-domain-names",[],"Visit the documentation","\nto find out the URL schema of the project you intend to create, then add the\nfollowing line to your ",[41,288,106],{},". (Skip this step if you're creating\na user or group page):",[34,291,293],{"className":110,"code":292,"language":112,"meta":39,"style":39},"// astro.config.mjs\nexport default defineConfig({\n  // ...\n  base: '/\u003Cproject-name>'\n  // In case the project is owned by a subgroup, use:\n  // base: '/\u003Csubgroup>/\u003Cproject-name>'\n});\n",[41,294,295,299,309,314,322,327,332],{"__ignoreMap":39},[44,296,297],{"class":46,"line":47},[44,298,120],{"class":119},[44,300,301,303,305,307],{"class":46,"line":123},[44,302,157],{"class":85},[44,304,160],{"class":85},[44,306,163],{"class":50},[44,308,166],{"class":92},[44,310,311],{"class":46,"line":141},[44,312,313],{"class":119},"  // ...\n",[44,315,316,319],{"class":46,"line":148},[44,317,318],{"class":92},"  base: ",[44,320,321],{"class":54},"'/\u003Cproject-name>'\n",[44,323,324],{"class":46,"line":154},[44,325,326],{"class":119},"  // In case the project is owned by a subgroup, use:\n",[44,328,329],{"class":46,"line":169},[44,330,331],{"class":119},"  // base: '/\u003Csubgroup>/\u003Cproject-name>'\n",[44,333,334],{"class":46,"line":175},[44,335,230],{"class":92},[12,337,338,339,344,345,347],{},"Astro ",[27,340,343],{"href":341,"rel":342},"https://docs.astro.build/en/reference/configuration-reference/#site",[],"recommends","\nadding the final site's full URL to generate the sitemap, so add it now to your\n",[41,346,106],{},":",[34,349,351],{"className":110,"code":350,"language":112,"meta":39,"style":39},"// astro.config.mjs\nexport default defineConfig({\n  // ...\n  site: 'https://\u003Cuser-or-group>.gitlab.io'\n  \n  // Note: Instead of specifying both `base` and `site`, you can simply\n  // use the full URL here:\n  // site: 'https://\u003Cuser-or-group>.gitlab.io/\u003Cproject-name>'\n  // or for pages owned by a subgroup:\n  // site: 'https://\u003Cgroup>.gitlab.io/\u003Csubgroup>/\u003Cproject-name>'\n});\n",[41,352,353,357,367,371,379,384,389,394,399,404,409],{"__ignoreMap":39},[44,354,355],{"class":46,"line":47},[44,356,120],{"class":119},[44,358,359,361,363,365],{"class":46,"line":123},[44,360,157],{"class":85},[44,362,160],{"class":85},[44,364,163],{"class":50},[44,366,166],{"class":92},[44,368,369],{"class":46,"line":141},[44,370,313],{"class":119},[44,372,373,376],{"class":46,"line":148},[44,374,375],{"class":92},"  site: ",[44,377,378],{"class":54},"'https://\u003Cuser-or-group>.gitlab.io'\n",[44,380,381],{"class":46,"line":154},[44,382,383],{"class":92},"  \n",[44,385,386],{"class":46,"line":169},[44,387,388],{"class":119},"  // Note: Instead of specifying both `base` and `site`, you can simply\n",[44,390,391],{"class":46,"line":175},[44,392,393],{"class":119},"  // use the full URL here:\n",[44,395,396],{"class":46,"line":181},[44,397,398],{"class":119},"  // site: 'https://\u003Cuser-or-group>.gitlab.io/\u003Cproject-name>'\n",[44,400,401],{"class":46,"line":193},[44,402,403],{"class":119},"  // or for pages owned by a subgroup:\n",[44,405,406],{"class":46,"line":198},[44,407,408],{"class":119},"  // site: 'https://\u003Cgroup>.gitlab.io/\u003Csubgroup>/\u003Cproject-name>'\n",[44,410,411],{"class":46,"line":204},[44,412,230],{"class":92},[12,414,415],{},"Now that you've successfully configured your project, you can commit your\nchanges.",[34,417,419],{"className":36,"code":418,"language":38,"meta":39,"style":39},"git add -A\ngit commit -m \"Initial commit\"\n",[41,420,421,432],{"__ignoreMap":39},[44,422,423,426,429],{"class":46,"line":47},[44,424,425],{"class":50},"git",[44,427,428],{"class":54}," add",[44,430,431],{"class":82}," -A\n",[44,433,434,436,439,442],{"class":46,"line":123},[44,435,425],{"class":50},[44,437,438],{"class":54}," commit",[44,440,441],{"class":82}," -m",[44,443,444],{"class":54}," \"Initial commit\"\n",[16,446,448],{"id":447},"set-up-the-remote-repository","Set up the remote repository",[12,450,451],{},"You can't push the code as we have yet to set up the remote repository. Visit\nGitLab and create a new project. When asked, select \"Create blank project.\"",[12,453,454],{},"In the setup screen, select \"GitLab Pages\" as the deployment target. Choose the\nvisibility level however you like. This is mainly asking whether your source\ncode is public, although it does affect the initial setting (see \"Making a\nprivate project's site public\" below).",[12,456,457],{},"Make sure you unset the checkbox next to \"Initialize repository with a README\",\notherwise GitLab will begin a new Git history that you will have to reconcile\nwith your existing local one.",[12,459,460,461,464],{},"Once the Project is set up, follow the instructions on how to add an ",[246,462,463],{},"existing\nrepository"," – if you don't have an existing remote, so you can just run:",[34,466,468],{"className":36,"code":467,"language":38,"meta":39,"style":39},"git remote add origin \u003Cgit-project-url>\ngit push -u origin --all\n",[41,469,470,492],{"__ignoreMap":39},[44,471,472,474,477,479,482,484,487,490],{"class":46,"line":47},[44,473,425],{"class":50},[44,475,476],{"class":54}," remote",[44,478,428],{"class":54},[44,480,481],{"class":54}," origin",[44,483,86],{"class":85},[44,485,486],{"class":54},"git-project-ur",[44,488,489],{"class":92},"l",[44,491,96],{"class":85},[44,493,494,496,499,502,504],{"class":46,"line":123},[44,495,425],{"class":50},[44,497,498],{"class":54}," push",[44,500,501],{"class":82}," -u",[44,503,481],{"class":54},[44,505,506],{"class":82}," --all\n",[12,508,509],{},"Now you've synced your local code with Gitlab, let's finish publishing it with\nPages.",[16,511,513],{"id":512},"create-a-pages-pipeline","Create a Pages pipeline",[12,515,516,517,520],{},"In GitLab, go to your project's settings and select Pages. You will be welcomed\nby a screen that helps you build a ",[41,518,519],{},".gitlab-ci.yml"," file.",[12,522,523],{},[524,525],"img",{"alt":526,"src":527},"Screenshot: The \"Get stated with Pages\" UI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397946/blog/Content%20Images/astro-pages/wizard_step_1.png",[12,529,530],{},"Enter \"node:lts\" as the build image. This will give you the latest node\nenvironment with long-time support.",[12,532,533,534,536],{},"We've already configured Astro to output our files in a folder named ",[41,535,239],{},",\nso you can check the checkbox asking you to confirm this.",[12,538,539,540,543,544,546,547,550,551,554,555,560,561,252],{},"On the next page, enter ",[41,541,542],{},"npm ci"," as the installation step. Running ",[41,545,542],{},"\ninstead of ",[41,548,549],{},"npm install"," is recommended for CI environments such as GitLab\nPipelines as it uses the ",[41,552,553],{},"package-lock.json"," to match the installed version\nwith the one you used during development. See the ",[27,556,559],{"href":557,"rel":558},"https://docs.npmjs.com/cli/v8/commands/npm-ci",[],"npm documentation","\nto learn more about ",[41,562,542],{},[12,564,565],{},[524,566],{"alt":567,"src":568},"Screenshot: Inputting the installation step","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397946/blog/Content%20Images/astro-pages/wizard_step_2.png",[12,570,571],{},"On the last page, enter the build command \"npm run build\". Again, click \"next\".",[12,573,574],{},[524,575],{"alt":576,"src":577},"Screenshot: Inputting the build step","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397947/blog/Content%20Images/astro-pages/wizard_step_3.png",[12,579,580],{},"Next to the inputs you see the pipeline file that has been built for you.\nThis is the one we want to add to the repository to enable Pages.",[12,582,583],{},[524,584],{"alt":585,"src":586},"Screenshot: The finished file and the commit step","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397948/blog/Content%20Images/astro-pages/wizard_step_4.png",[12,588,589,590,593,594,596],{},"How does it work in detail? If GitLab sees a job named ",[41,591,592],{},"pages",", it will\nlook for artifacts inside a root folder ",[41,595,239],{}," and then create a\nGitLab Pages deployment from it.",[12,598,599,600,603],{},"The ",[41,601,602],{},"rules"," section ensures the pages deployment is only triggered by\ncommits to the default branch. Every time you push a change to your default\nbranch, Pages will publish the new changes.",[12,605,606,607,610],{},"If you're happy with the pipeline, enter a commit message and click \"commit\".\n(Make sure you run ",[41,608,609],{},"git pull"," locally before doing any more changes to\nprevent issues with diverging histories.)",[12,612,613,614,616],{},"Now having added a commit with a ",[41,615,519],{}," file, GitLab has kicked off\na pipeline. Visit CI/CD > Pipelines to see the progress. After a couple of\nminutes, you should see the pipeline has succeeded. (If it's showing \"failed\",\nclick on the status button to see the job logs.)",[12,618,619],{},[524,620],{"alt":621,"src":622},"Screenshot: Pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397946/blog/Content%20Images/astro-pages/pipeline_overview.png",[12,624,625],{},"Once the pipeline has completed, go back to Settings > Pages. You should now see\nthe various settings of your site, including your new site's URL. Click on\nit and, congratulations, you've just deployed your Astro Site wit GitLab\nPages!",[12,627,628],{},[524,629],{"alt":630,"src":631},"Screenshot: The deployed page","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397944/blog/Content%20Images/astro-pages/deployed_site.png",[16,633,635],{"id":634},"making-a-private-projects-site-public","Making a private project's site public",[12,637,638],{},"By default, a private project's Pages site is only accessible to project\nmembers. If you want your source code to be private, but still have a public\nsite, go to Settings/General and expand \"visibility, project features, permissions\", scroll down to \"Pages\" and set\nit to \"Everyone\".",[16,640,642],{"id":641},"keep-reading","Keep reading",[644,645,646,654,661],"ul",{},[647,648,649],"li",{},[27,650,653],{"href":651,"rel":652},"https://docs.gitlab.com/user/project/pages/getting_started/pages_ui/",[],"Tutorial: Use the GitLab UI to deploy your static site",[647,655,656],{},[27,657,660],{"href":658,"rel":659},"https://docs.astro.build/en/guides/deploy/gitlab/",[],"Astro Docs: Deploy your Astro Site to GitLab Pages",[647,662,663],{},[27,664,667],{"href":665,"rel":666},"https://youtu.be/49hgxqPGofw",[],"Watch a video on how to create a Pages Pipeline with the Wizard",[669,670,671],"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 .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 .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":39,"searchDepth":123,"depth":123,"links":673},[674,675,676,677,678,679],{"id":18,"depth":123,"text":19},{"id":99,"depth":123,"text":100},{"id":447,"depth":123,"text":448},{"id":512,"depth":123,"text":513},{"id":634,"depth":123,"text":635},{"id":641,"depth":123,"text":642},"engineering","2022-10-24","Learn how to deploy an Astro Site with GitLab Pages.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682473/Blog/Hero%20Images/shot-by-cerqueira-0o_GEzyargo-unsplash.jpg",{},"/en-us/blog/publishing-an-astro-site-with-pages",{"title":5,"description":682,"ogTitle":5,"ogDescription":682,"noIndex":685,"ogImage":686,"ogUrl":690,"ogSiteName":691,"ogType":692,"canonicalUrls":690},"https://about.gitlab.com/blog/publishing-an-astro-site-with-pages","https://about.gitlab.com","article","publishing-an-astro-site-with-pages","en-us/blog/publishing-an-astro-site-with-pages",[696,697,698],"tutorial","integrations","product","BlogPost","qTbNsR_Ag3vTHA_ek3n7kOrKcll-VKllMX_6wOG8usc",{"logo":702,"freeTrial":707,"sales":712,"login":717,"items":722,"search":1048,"minimal":1079,"duo":1098,"switchNav":1107,"pricingDeployment":1118},{"config":703},{"href":704,"dataGaName":705,"dataGaLocation":706},"/","gitlab logo","header",{"text":708,"config":709},"Get free trial",{"href":710,"dataGaName":711,"dataGaLocation":706},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":713,"config":714},"Request a demo",{"href":715,"dataGaName":716,"dataGaLocation":706},"/sales/?contact-topic=request-demo","sales",{"text":718,"config":719},"Sign in",{"href":720,"dataGaName":721,"dataGaLocation":706},"https://gitlab.com/users/sign_in/","sign in",[723,752,852,857,970,1026],{"text":724,"config":725,"menu":727},"Platform",{"dataNavLevelOne":726},"platform",{"type":728,"columns":729},"cards",[730,736,744],{"title":724,"description":731,"link":732},"The intelligent orchestration platform for DevSecOps",{"text":733,"config":734},"Explore our Platform",{"href":735,"dataGaName":726,"dataGaLocation":706},"/platform/",{"title":737,"description":738,"link":739},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":740,"config":741},"Meet GitLab Duo",{"href":742,"dataGaName":743,"dataGaLocation":706},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":745,"description":746,"link":747},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":748,"config":749},"Learn more",{"href":750,"dataGaName":751,"dataGaLocation":706},"/why-gitlab/","why gitlab",{"text":753,"left":144,"config":754,"menu":756},"Product",{"dataNavLevelOne":755},"solutions",{"type":757,"link":758,"columns":762,"feature":831},"lists",{"text":759,"config":760},"View all Solutions",{"href":761,"dataGaName":755,"dataGaLocation":706},"/solutions/",[763,787,810],{"title":764,"description":765,"link":766,"items":771},"Automation","CI/CD and automation to accelerate deployment",{"config":767},{"icon":768,"href":769,"dataGaName":770,"dataGaLocation":706},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[772,776,779,783],{"text":773,"config":774},"CI/CD",{"href":775,"dataGaLocation":706,"dataGaName":773},"/solutions/continuous-integration/",{"text":737,"config":777},{"href":742,"dataGaLocation":706,"dataGaName":778},"gitlab duo agent platform - product menu",{"text":780,"config":781},"Source Code Management",{"href":782,"dataGaLocation":706,"dataGaName":780},"/solutions/source-code-management/",{"text":784,"config":785},"Automated Software Delivery",{"href":769,"dataGaLocation":706,"dataGaName":786},"Automated software delivery",{"title":788,"description":789,"link":790,"items":795},"Security","Deliver code faster without compromising security",{"config":791},{"href":792,"dataGaName":793,"dataGaLocation":706,"icon":794},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[796,800,805],{"text":797,"config":798},"Application Security Testing",{"href":792,"dataGaName":799,"dataGaLocation":706},"Application security testing",{"text":801,"config":802},"Software Supply Chain Security",{"href":803,"dataGaLocation":706,"dataGaName":804},"/solutions/supply-chain/","Software supply chain security",{"text":806,"config":807},"Software Compliance",{"href":808,"dataGaName":809,"dataGaLocation":706},"/solutions/software-compliance/","software compliance",{"title":811,"link":812,"items":817},"Measurement",{"config":813},{"icon":814,"href":815,"dataGaName":816,"dataGaLocation":706},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[818,822,826],{"text":819,"config":820},"Visibility & Measurement",{"href":815,"dataGaLocation":706,"dataGaName":821},"Visibility and Measurement",{"text":823,"config":824},"Value Stream Management",{"href":825,"dataGaLocation":706,"dataGaName":823},"/solutions/value-stream-management/",{"text":827,"config":828},"Analytics & Insights",{"href":829,"dataGaLocation":706,"dataGaName":830},"/solutions/analytics-and-insights/","Analytics and insights",{"title":832,"type":757,"items":833},"GitLab for",[834,840,846],{"text":835,"config":836},"Enterprise",{"icon":837,"href":838,"dataGaLocation":706,"dataGaName":839},"Building","/enterprise/","enterprise",{"text":841,"config":842},"Small Business",{"icon":843,"href":844,"dataGaLocation":706,"dataGaName":845},"Work","/small-business/","small business",{"text":847,"config":848},"Public Sector",{"icon":849,"href":850,"dataGaLocation":706,"dataGaName":851},"Organization","/solutions/public-sector/","public sector",{"text":853,"config":854},"Pricing",{"href":855,"dataGaName":856,"dataGaLocation":706,"dataNavLevelOne":856},"/pricing/","pricing",{"text":858,"config":859,"menu":861},"Resources",{"dataNavLevelOne":860},"resources",{"type":757,"link":862,"columns":866,"feature":959},{"text":863,"config":864},"View all resources",{"href":865,"dataGaName":860,"dataGaLocation":706},"/resources/",[867,899,926],{"title":868,"items":869},"Getting started",[870,875,880,885,890,895],{"text":871,"config":872},"Install",{"href":873,"dataGaName":874,"dataGaLocation":706},"/install/","install",{"text":876,"config":877},"Quick start guides",{"href":878,"dataGaName":879,"dataGaLocation":706},"/get-started/","quick setup checklists",{"text":881,"config":882},"Learn",{"href":883,"dataGaLocation":706,"dataGaName":884},"https://university.gitlab.com/","learn",{"text":886,"config":887},"Product documentation",{"href":888,"dataGaName":889,"dataGaLocation":706},"https://docs.gitlab.com/","product documentation",{"text":891,"config":892},"Best practice videos",{"href":893,"dataGaName":894,"dataGaLocation":706},"/getting-started-videos/","best practice videos",{"text":896,"config":897},"Integrations",{"href":898,"dataGaName":697,"dataGaLocation":706},"/integrations/",{"title":900,"items":901},"Discover",[902,907,912,917,921],{"text":903,"config":904},"Customer success stories",{"href":905,"dataGaName":906,"dataGaLocation":706},"/customers/","customer success stories",{"text":908,"config":909},"Blog",{"href":910,"dataGaName":911,"dataGaLocation":706},"/blog/","blog",{"text":913,"config":914},"Demo Hub",{"href":915,"dataGaName":916,"dataGaLocation":706},"/demo-hub/","demo hub",{"text":918,"config":919},"The Source",{"href":920,"dataGaName":911,"dataGaLocation":706},"/the-source/",{"text":922,"config":923},"Remote",{"href":924,"dataGaName":925,"dataGaLocation":706},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":927,"items":928},"Connect",[929,934,939,944,949,954],{"text":930,"config":931},"GitLab Services",{"href":932,"dataGaName":933,"dataGaLocation":706},"/services/","services",{"text":935,"config":936},"Contribute",{"href":937,"dataGaName":938,"dataGaLocation":706},"https://contributors.gitlab.com","contribute",{"text":940,"config":941},"Community",{"href":942,"dataGaName":943,"dataGaLocation":706},"/community/","community",{"text":945,"config":946},"Forum",{"href":947,"dataGaName":948,"dataGaLocation":706},"https://forum.gitlab.com/","forum",{"text":950,"config":951},"Events",{"href":952,"dataGaName":953,"dataGaLocation":706},"/events/","events",{"text":955,"config":956},"Partners",{"href":957,"dataGaName":958,"dataGaLocation":706},"/partners/","partners",{"config":960,"title":963,"text":964,"link":965},{"background":961,"textColor":962},"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":966,"config":967},"Read the latest",{"href":968,"dataGaName":969,"dataGaLocation":706},"/whats-new/","whats new",{"text":971,"config":972,"menu":974},"Company",{"dataNavLevelOne":973},"company",{"type":757,"columns":975},[976],{"items":977},[978,983,989,991,996,1001,1006,1011,1016,1021],{"text":979,"config":980},"About",{"href":981,"dataGaName":982,"dataGaLocation":706},"/company/","about",{"text":984,"config":985,"footerGa":988},"Jobs",{"href":986,"dataGaName":987,"dataGaLocation":706},"/jobs/","jobs",{"dataGaName":987},{"text":950,"config":990},{"href":952,"dataGaName":953,"dataGaLocation":706},{"text":992,"config":993},"Leadership",{"href":994,"dataGaName":995,"dataGaLocation":706},"/company/team/e-group/","leadership",{"text":997,"config":998},"Handbook",{"href":999,"dataGaName":1000,"dataGaLocation":706},"https://handbook.gitlab.com/","handbook",{"text":1002,"config":1003},"Investor relations",{"href":1004,"dataGaName":1005,"dataGaLocation":706},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1007,"config":1008},"Trust Center",{"href":1009,"dataGaName":1010,"dataGaLocation":706},"/security/","trust center",{"text":1012,"config":1013},"AI Transparency Center",{"href":1014,"dataGaName":1015,"dataGaLocation":706},"/ai-transparency-center/","ai transparency center",{"text":1017,"config":1018},"Newsletter",{"href":1019,"dataGaName":1020,"dataGaLocation":706},"/company/contact/#contact-forms","newsletter",{"text":1022,"config":1023},"Press",{"href":1024,"dataGaName":1025,"dataGaLocation":706},"/press/","press",{"text":1027,"config":1028,"menu":1029},"Contact us",{"dataNavLevelOne":973},{"type":757,"columns":1030},[1031],{"items":1032},[1033,1038,1043],{"text":1034,"config":1035},"Talk to sales",{"href":1036,"dataGaName":1037,"dataGaLocation":706},"/sales/","talk to sales",{"text":1039,"config":1040},"Support portal",{"href":1041,"dataGaName":1042,"dataGaLocation":706},"https://support.gitlab.com/hc/en-us","support portal",{"text":1044,"config":1045},"Customer portal",{"href":1046,"dataGaName":1047,"dataGaLocation":706},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1049,"login":1050,"suggestions":1057},"Close",{"text":1051,"link":1052},"To search repositories and projects, login to",{"text":1053,"config":1054},"gitlab.com",{"href":720,"dataGaName":1055,"dataGaLocation":1056},"search login","search",{"text":1058,"default":1059},"Suggestions",[1060,1062,1066,1068,1072,1076],{"text":737,"config":1061},{"href":742,"dataGaName":737,"dataGaLocation":1056},{"text":1063,"config":1064},"Code Suggestions (AI)",{"href":1065,"dataGaName":1063,"dataGaLocation":1056},"/solutions/code-suggestions/",{"text":773,"config":1067},{"href":775,"dataGaName":773,"dataGaLocation":1056},{"text":1069,"config":1070},"GitLab on AWS",{"href":1071,"dataGaName":1069,"dataGaLocation":1056},"/partners/technology-partners/aws/",{"text":1073,"config":1074},"GitLab on Google Cloud",{"href":1075,"dataGaName":1073,"dataGaLocation":1056},"/partners/technology-partners/google-cloud-platform/",{"text":1077,"config":1078},"Why GitLab?",{"href":750,"dataGaName":1077,"dataGaLocation":1056},{"freeTrial":1080,"mobileIcon":1085,"desktopIcon":1090,"secondaryButton":1093},{"text":1081,"config":1082},"Start free trial",{"href":1083,"dataGaName":711,"dataGaLocation":1084},"https://gitlab.com/-/trials/new/","nav",{"altText":1086,"config":1087},"Gitlab Icon",{"src":1088,"dataGaName":1089,"dataGaLocation":1084},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1086,"config":1091},{"src":1092,"dataGaName":1089,"dataGaLocation":1084},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1094,"config":1095},"Get Started",{"href":1096,"dataGaName":1097,"dataGaLocation":1084},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1099,"mobileIcon":1103,"desktopIcon":1105},{"text":1100,"config":1101},"Learn more about GitLab Duo",{"href":742,"dataGaName":1102,"dataGaLocation":1084},"gitlab duo",{"altText":1086,"config":1104},{"src":1088,"dataGaName":1089,"dataGaLocation":1084},{"altText":1086,"config":1106},{"src":1092,"dataGaName":1089,"dataGaLocation":1084},{"button":1108,"mobileIcon":1113,"desktopIcon":1115},{"text":1109,"config":1110},"/switch",{"href":1111,"dataGaName":1112,"dataGaLocation":1084},"#contact","switch",{"altText":1086,"config":1114},{"src":1088,"dataGaName":1089,"dataGaLocation":1084},{"altText":1086,"config":1116},{"src":1117,"dataGaName":1089,"dataGaLocation":1084},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1119,"mobileIcon":1124,"desktopIcon":1126},{"text":1120,"config":1121},"Back to pricing",{"href":855,"dataGaName":1122,"dataGaLocation":1084,"icon":1123},"back to pricing","GoBack",{"altText":1086,"config":1125},{"src":1088,"dataGaName":1089,"dataGaLocation":1084},{"altText":1086,"config":1127},{"src":1092,"dataGaName":1089,"dataGaLocation":1084},{"title":1129,"titleMobile":1130,"button":1131,"config":1136},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":748,"config":1132},{"href":1133,"dataGaName":1134,"dataGaLocation":1135},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1137,"disabled":685},"release",{"data":1139},{"text":1140,"source":1141,"edit":1147,"contribute":1152,"config":1157,"items":1162,"minimal":1372},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1142,"config":1143},"View page source",{"href":1144,"dataGaName":1145,"dataGaLocation":1146},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1148,"config":1149},"Edit this page",{"href":1150,"dataGaName":1151,"dataGaLocation":1146},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1153,"config":1154},"Please contribute",{"href":1155,"dataGaName":1156,"dataGaLocation":1146},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1158,"facebook":1159,"youtube":1160,"linkedin":1161},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1163,1210,1264,1308,1340],{"title":853,"links":1164,"subMenu":1179},[1165,1169,1174],{"text":1166,"config":1167},"View plans",{"href":855,"dataGaName":1168,"dataGaLocation":1146},"view plans",{"text":1170,"config":1171},"Why Premium?",{"href":1172,"dataGaName":1173,"dataGaLocation":1146},"/pricing/premium/","why premium",{"text":1175,"config":1176},"Why Ultimate?",{"href":1177,"dataGaName":1178,"dataGaLocation":1146},"/pricing/ultimate/","why ultimate",[1180],{"title":1181,"links":1182},"Contact Us",[1183,1186,1188,1190,1195,1200,1205],{"text":1184,"config":1185},"Contact sales",{"href":1036,"dataGaName":716,"dataGaLocation":1146},{"text":1039,"config":1187},{"href":1041,"dataGaName":1042,"dataGaLocation":1146},{"text":1044,"config":1189},{"href":1046,"dataGaName":1047,"dataGaLocation":1146},{"text":1191,"config":1192},"Status",{"href":1193,"dataGaName":1194,"dataGaLocation":1146},"https://status.gitlab.com/","status",{"text":1196,"config":1197},"Terms of use",{"href":1198,"dataGaName":1199,"dataGaLocation":1146},"/terms/","terms of use",{"text":1201,"config":1202},"Privacy statement",{"href":1203,"dataGaName":1204,"dataGaLocation":1146},"/privacy/","privacy statement",{"text":1206,"config":1207},"Cookie preferences",{"dataGaName":1208,"dataGaLocation":1146,"id":1209,"isOneTrustButton":144},"cookie preferences","ot-sdk-btn",{"title":753,"links":1211,"subMenu":1220},[1212,1216],{"text":1213,"config":1214},"DevSecOps platform",{"href":735,"dataGaName":1215,"dataGaLocation":1146},"devsecops platform",{"text":1217,"config":1218},"AI-Assisted Development",{"href":742,"dataGaName":1219,"dataGaLocation":1146},"ai-assisted development",[1221],{"title":1222,"links":1223},"Topics",[1224,1229,1234,1239,1244,1249,1254,1259],{"text":1225,"config":1226},"CICD",{"href":1227,"dataGaName":1228,"dataGaLocation":1146},"/topics/ci-cd/","cicd",{"text":1230,"config":1231},"GitOps",{"href":1232,"dataGaName":1233,"dataGaLocation":1146},"/topics/gitops/","gitops",{"text":1235,"config":1236},"DevOps",{"href":1237,"dataGaName":1238,"dataGaLocation":1146},"/topics/devops/","devops",{"text":1240,"config":1241},"Version Control",{"href":1242,"dataGaName":1243,"dataGaLocation":1146},"/topics/version-control/","version control",{"text":1245,"config":1246},"DevSecOps",{"href":1247,"dataGaName":1248,"dataGaLocation":1146},"/topics/devsecops/","devsecops",{"text":1250,"config":1251},"Cloud Native",{"href":1252,"dataGaName":1253,"dataGaLocation":1146},"/topics/cloud-native/","cloud native",{"text":1255,"config":1256},"AI for Coding",{"href":1257,"dataGaName":1258,"dataGaLocation":1146},"/topics/devops/ai-for-coding/","ai for coding",{"text":1260,"config":1261},"Agentic AI",{"href":1262,"dataGaName":1263,"dataGaLocation":1146},"/topics/agentic-ai/","agentic ai",{"title":1265,"links":1266},"Solutions",[1267,1269,1271,1276,1280,1283,1287,1290,1292,1295,1298,1303],{"text":797,"config":1268},{"href":792,"dataGaName":797,"dataGaLocation":1146},{"text":786,"config":1270},{"href":769,"dataGaName":770,"dataGaLocation":1146},{"text":1272,"config":1273},"Agile development",{"href":1274,"dataGaName":1275,"dataGaLocation":1146},"/solutions/agile-delivery/","agile delivery",{"text":1277,"config":1278},"SCM",{"href":782,"dataGaName":1279,"dataGaLocation":1146},"source code management",{"text":1225,"config":1281},{"href":775,"dataGaName":1282,"dataGaLocation":1146},"continuous integration & delivery",{"text":1284,"config":1285},"Value stream management",{"href":825,"dataGaName":1286,"dataGaLocation":1146},"value stream management",{"text":1230,"config":1288},{"href":1289,"dataGaName":1233,"dataGaLocation":1146},"/solutions/gitops/",{"text":835,"config":1291},{"href":838,"dataGaName":839,"dataGaLocation":1146},{"text":1293,"config":1294},"Small business",{"href":844,"dataGaName":845,"dataGaLocation":1146},{"text":1296,"config":1297},"Public sector",{"href":850,"dataGaName":851,"dataGaLocation":1146},{"text":1299,"config":1300},"Education",{"href":1301,"dataGaName":1302,"dataGaLocation":1146},"/solutions/education/","education",{"text":1304,"config":1305},"Financial services",{"href":1306,"dataGaName":1307,"dataGaLocation":1146},"/solutions/finance/","financial services",{"title":858,"links":1309},[1310,1312,1314,1316,1319,1321,1324,1326,1328,1330,1332,1334,1336,1338],{"text":871,"config":1311},{"href":873,"dataGaName":874,"dataGaLocation":1146},{"text":876,"config":1313},{"href":878,"dataGaName":879,"dataGaLocation":1146},{"text":881,"config":1315},{"href":883,"dataGaName":884,"dataGaLocation":1146},{"text":886,"config":1317},{"href":888,"dataGaName":1318,"dataGaLocation":1146},"docs",{"text":908,"config":1320},{"href":910,"dataGaName":911,"dataGaLocation":1146},{"text":1322,"config":1323},"What's new",{"href":968,"dataGaName":969,"dataGaLocation":1146},{"text":903,"config":1325},{"href":905,"dataGaName":906,"dataGaLocation":1146},{"text":922,"config":1327},{"href":924,"dataGaName":925,"dataGaLocation":1146},{"text":930,"config":1329},{"href":932,"dataGaName":933,"dataGaLocation":1146},{"text":935,"config":1331},{"href":937,"dataGaName":938,"dataGaLocation":1146},{"text":940,"config":1333},{"href":942,"dataGaName":943,"dataGaLocation":1146},{"text":945,"config":1335},{"href":947,"dataGaName":948,"dataGaLocation":1146},{"text":950,"config":1337},{"href":952,"dataGaName":953,"dataGaLocation":1146},{"text":955,"config":1339},{"href":957,"dataGaName":958,"dataGaLocation":1146},{"title":971,"links":1341},[1342,1344,1346,1348,1350,1352,1356,1361,1363,1365,1367],{"text":979,"config":1343},{"href":981,"dataGaName":973,"dataGaLocation":1146},{"text":984,"config":1345},{"href":986,"dataGaName":987,"dataGaLocation":1146},{"text":992,"config":1347},{"href":994,"dataGaName":995,"dataGaLocation":1146},{"text":997,"config":1349},{"href":999,"dataGaName":1000,"dataGaLocation":1146},{"text":1002,"config":1351},{"href":1004,"dataGaName":1005,"dataGaLocation":1146},{"text":1353,"config":1354},"Sustainability",{"href":1355,"dataGaName":1353,"dataGaLocation":1146},"/sustainability/",{"text":1357,"config":1358},"Diversity, inclusion and belonging (DIB)",{"href":1359,"dataGaName":1360,"dataGaLocation":1146},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1007,"config":1362},{"href":1009,"dataGaName":1010,"dataGaLocation":1146},{"text":1017,"config":1364},{"href":1019,"dataGaName":1020,"dataGaLocation":1146},{"text":1022,"config":1366},{"href":1024,"dataGaName":1025,"dataGaLocation":1146},{"text":1368,"config":1369},"Modern Slavery Transparency Statement",{"href":1370,"dataGaName":1371,"dataGaLocation":1146},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1373},[1374,1377,1380],{"text":1375,"config":1376},"Terms",{"href":1198,"dataGaName":1199,"dataGaLocation":1146},{"text":1378,"config":1379},"Cookies",{"dataGaName":1208,"dataGaLocation":1146,"id":1209,"isOneTrustButton":144},{"text":1381,"config":1382},"Privacy",{"href":1203,"dataGaName":1204,"dataGaLocation":1146},[1384],{"id":1385,"title":7,"body":684,"config":1386,"content":1388,"description":684,"extension":1392,"meta":1393,"navigation":144,"path":1394,"seo":1395,"stem":1396,"__hash__":1397},"blogAuthors/en-us/blog/authors/janis-altherr.yml",{"template":1387},"BlogAuthor",{"name":7,"config":1389},{"headshot":1390,"ctfId":1391},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663163/Blog/Author%20Headshots/janis-headshot.jpg","janis","yml",{},"/en-us/blog/authors/janis-altherr",{},"en-us/blog/authors/janis-altherr","IypsWlKRRAD566nOfIQF0sRhJjrEm0E-PxjlLJ0XGKE",[1399,1408,1416],{"title":1400,"description":1401,"heroImage":1402,"category":680,"date":1403,"authors":1404,"slug":1407,"externalUrl":684},"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",[1405,1406],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1409,"description":1410,"heroImage":1411,"category":680,"date":1412,"authors":1413,"slug":1415,"externalUrl":684},"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",[1414],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1417,"description":1418,"heroImage":1419,"category":680,"date":1420,"authors":1421,"slug":1423,"externalUrl":684},"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",[1422],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1425},[1426,1440,1451,1463],{"id":1427,"categories":1428,"header":1430,"text":1431,"button":1432,"image":1437},"ai-modernization",[1429],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1433,"config":1434},"Get your AI maturity score",{"href":1435,"dataGaName":1436,"dataGaLocation":911},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1438},{"src":1439},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1441,"categories":1442,"header":1443,"text":1431,"button":1444,"image":1448},"devops-modernization",[698,1248],"Are you just managing tools or shipping innovation?",{"text":1445,"config":1446},"Get your DevOps maturity score",{"href":1447,"dataGaName":1436,"dataGaLocation":911},"/assessments/devops-modernization-assessment/",{"config":1449},{"src":1450},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1452,"categories":1453,"header":1455,"text":1431,"button":1456,"image":1460},"security-modernization",[1454],"security","Are you trading speed for security?",{"text":1457,"config":1458},"Get your security maturity score",{"href":1459,"dataGaName":1436,"dataGaLocation":911},"/assessments/security-modernization-assessment/",{"config":1461},{"src":1462},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1464,"paths":1465,"header":1468,"text":1469,"button":1470,"image":1475},"github-azure-migration",[1466,1467],"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":1471,"config":1472},"See how GitLab compares to GitHub",{"href":1473,"dataGaName":1474,"dataGaLocation":911},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1476},{"src":1450},{"header":1478,"blurb":1479,"button":1480,"secondaryButton":1485},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1481,"config":1482},"Get your free trial",{"href":1483,"dataGaName":711,"dataGaLocation":1484},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1184,"config":1486},{"href":1036,"dataGaName":716,"dataGaLocation":1484},1786803736996]