[{"data":1,"prerenderedAt":1391},["ShallowReactive",2],{"/blog/quick-start-guide-for-gitlab-workspaces":3,"navigation-en-us":605,"banner-en-us":1032,"footer-en-us":1042,"blog-post-authors-en-us-Itzik Gan Baruch":1286,"blog-related-posts-en-us-quick-start-guide-for-gitlab-workspaces":1301,"blog-promotions-en-us":1327,"next-steps-en-us":1381},{"id":4,"title":5,"authors":6,"body":8,"category":583,"date":584,"description":585,"extension":586,"externalUrl":587,"faq":587,"featured":588,"heroImage":589,"meta":590,"navigation":591,"path":592,"seo":593,"slug":597,"stem":598,"tags":599,"template":603,"updatedDate":587,"__hash__":604},"blogPosts/en-us/blog/quick-start-guide-for-gitlab-workspaces.md","Quickstart guide for GitLab Remote Development workspaces",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":573},"minimark",[11,22,25,28,43,46,98,102,111,114,123,131,303,317,320,391,397,400,406,409,418,421,427,457,460,466,477,480,487,490,493,518,524,528,545,548,551,554,557,569],[12,13,14,15,21],"p",{},"GitLab 16.0 introduced ",[16,17,20],"a",{"href":18,"rel":19},"https://docs.gitlab.com/releases/16/gitlab-16-0-released/#remote-development-workspaces-available-in-beta-for-public-projects",[],"Remote Development workspaces (beta)",", an exciting addition to the GitLab platform that empowers teams to build and deliver software more efficiently.",[12,23,24],{},"This guide provides step-by-step instructions on how to create a workspace directly from your GitLab account and work directly from the remote development environment. You will work in the Web IDE, a Visual Studio Code browser version, seamlessly integrated into the workspace.",[12,26,27],{},"From this quick start, you will learn how to create a workspace, use the Web IDE Terminal to install dependencies or start your server, and view your running application.",[12,29,30,31,36,37,42],{},"To learn more about Remote Development in GitLab, we recommend reading this informative blog post, \"",[16,32,35],{"href":33,"rel":34},"https://about.gitlab.com/blog/introducing-workspaces-beta/",[],"A first look at workspaces",",\" and the ",[16,38,41],{"href":39,"rel":40},"https://docs.gitlab.com/user/workspace/",[],"workspaces docs",".",[12,44,45],{},"Here are the steps covered in this tutorial:",[47,48,49,56,62,68,74,80,86,92],"ul",{},[50,51,52],"li",{},[16,53,55],{"href":54},"#prerequisites","Prerequisites",[50,57,58],{},[16,59,61],{"href":60},"#locate-devfile-at-the-root-of-repository","Locate DevFile at the root of repository",[50,63,64],{},[16,65,67],{"href":66},"#create-your-workspace","Create your workspace",[50,69,70],{},[16,71,73],{"href":72},"#install-dependencies-and-previewing-your-application-in-the-workspace","Install dependencies and previewing your application in the workspace",[50,75,76],{},[16,77,79],{"href":78},"#make-changes-to-the-application-and-previewing-the-updated-version","Make changes to the application and previewing the updated version",[50,81,82],{},[16,83,85],{"href":84},"#commit-the-change","Commit the change",[50,87,88],{},[16,89,91],{"href":90},"#explore-the-demo","Explore the demo",[50,93,94],{},[16,95,97],{"href":96},"#try-out-workspaces","Try out workspaces",[99,100,55],"h2",{"id":101},"prerequisites",[12,103,104,105,110],{},"Prior to enabling developers to create workspaces, there are a few prerequisites such as bring your own Kubernetes cluster, and install and configure the GitLab agent for Kubernetes on it. Additionally, certain configuration steps must be completed on the cluster. You can find detailed instructions for all these steps in ",[16,106,109],{"href":107,"rel":108},"https://docs.gitlab.com/user/workspace/configuration/#prerequisites",[],"our workspaces prequisites documentation",". Once the prerequisites are properly configured, developers who hold Developer role or above within the root group will gain the ability to create workspaces.",[99,112,61],{"id":113},"locate-devfile-at-the-root-of-repository",[12,115,116,117,122],{},"A ",[16,118,121],{"href":119,"rel":120},"https://devfile.io/docs/2.2.0/devfile-ecosystem",[],"devfile"," is a declarative configuration file, in YAML syntax, used to define and describe the development environment for a software project. It provides a standardized way to specify the necessary tools, languages, runtimes, and other components required for developing an application.",[12,124,125,126,42],{},"To initiate a workspace, it is necessary to have a devfile located at the root of the repository. In this blog post, we will utilize a project that contains a devfile, accessible ",[16,127,130],{"href":128,"rel":129},"https://gitlab.com/gitlab-da/use-cases/remote-development/example-nodejs-express-app/-/raw/main/.devfile.yaml",[],"here",[132,133,138],"pre",{"className":134,"code":135,"language":136,"meta":137,"style":137},"language-yaml shiki shiki-themes github-light","schemaVersion: 2.2.0\ncomponents:\n  - name: tooling-container\n    attributes:\n      gl/inject-editor: true\n    container:\n      # NOTE: THIS IMAGE EXISTS ONLY FOR DEMO PURPOSES AND WILL NOT BE MAINTAINED\n      image: registry.gitlab.com/gitlab-org/remote-development/gitlab-remote-development-docs/debian-bullseye-ruby-3.2-node-18.12:rubygems-3.4-git-2.33-lfs-2.9-yarn-1.22-graphicsmagick-1.3.36-gitlab-workspaces\n      memoryRequest: 1024M\n      memoryLimit: 2048M\n      cpuRequest: 500m\n      cpuLimit: 1000m\n      endpoints:\n      - name: http-3000\n        targetPort: 3000\n\n","yaml","",[139,140,141,158,167,182,190,201,209,216,227,238,249,260,271,279,292],"code",{"__ignoreMap":137},[142,143,146,150,154],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"shJU0","schemaVersion",[142,151,153],{"class":152},"sgsFI",": ",[142,155,157],{"class":156},"sYu0t","2.2.0\n",[142,159,161,164],{"class":144,"line":160},2,[142,162,163],{"class":148},"components",[142,165,166],{"class":152},":\n",[142,168,170,173,176,178],{"class":144,"line":169},3,[142,171,172],{"class":152},"  - ",[142,174,175],{"class":148},"name",[142,177,153],{"class":152},[142,179,181],{"class":180},"sYBdl","tooling-container\n",[142,183,185,188],{"class":144,"line":184},4,[142,186,187],{"class":148},"    attributes",[142,189,166],{"class":152},[142,191,193,196,198],{"class":144,"line":192},5,[142,194,195],{"class":148},"      gl/inject-editor",[142,197,153],{"class":152},[142,199,200],{"class":156},"true\n",[142,202,204,207],{"class":144,"line":203},6,[142,205,206],{"class":148},"    container",[142,208,166],{"class":152},[142,210,212],{"class":144,"line":211},7,[142,213,215],{"class":214},"sAwPA","      # NOTE: THIS IMAGE EXISTS ONLY FOR DEMO PURPOSES AND WILL NOT BE MAINTAINED\n",[142,217,219,222,224],{"class":144,"line":218},8,[142,220,221],{"class":148},"      image",[142,223,153],{"class":152},[142,225,226],{"class":180},"registry.gitlab.com/gitlab-org/remote-development/gitlab-remote-development-docs/debian-bullseye-ruby-3.2-node-18.12:rubygems-3.4-git-2.33-lfs-2.9-yarn-1.22-graphicsmagick-1.3.36-gitlab-workspaces\n",[142,228,230,233,235],{"class":144,"line":229},9,[142,231,232],{"class":148},"      memoryRequest",[142,234,153],{"class":152},[142,236,237],{"class":180},"1024M\n",[142,239,241,244,246],{"class":144,"line":240},10,[142,242,243],{"class":148},"      memoryLimit",[142,245,153],{"class":152},[142,247,248],{"class":180},"2048M\n",[142,250,252,255,257],{"class":144,"line":251},11,[142,253,254],{"class":148},"      cpuRequest",[142,256,153],{"class":152},[142,258,259],{"class":180},"500m\n",[142,261,263,266,268],{"class":144,"line":262},12,[142,264,265],{"class":148},"      cpuLimit",[142,267,153],{"class":152},[142,269,270],{"class":180},"1000m\n",[142,272,274,277],{"class":144,"line":273},13,[142,275,276],{"class":148},"      endpoints",[142,278,166],{"class":152},[142,280,282,285,287,289],{"class":144,"line":281},14,[142,283,284],{"class":152},"      - ",[142,286,175],{"class":148},[142,288,153],{"class":152},[142,290,291],{"class":180},"http-3000\n",[142,293,295,298,300],{"class":144,"line":294},15,[142,296,297],{"class":148},"        targetPort",[142,299,153],{"class":152},[142,301,302],{"class":156},"3000\n",[12,304,305,306,311,312,42],{},"For more information, see the ",[16,307,310],{"href":308,"rel":309},"https://docs.gitlab.com/user/workspace/#devfile",[],"GitLab documentation"," and ",[16,313,316],{"href":314,"rel":315},"https://devfile.io/docs/2.2.0/devfile-schema",[],"devfile documentation",[99,318,67],{"id":319},"create-your-workspace",[321,322,323,332,341,352,358,363,370,379,386],"ol",{},[50,324,325,326,331],{},"Make sure you have a ",[16,327,330],{"href":328,"rel":329},"https://docs.gitlab.com/user/permissions/",[],"Developer role or above"," in the root group, and the above prerequisites configured properly.",[50,333,334,335,340],{},"Fork ",[16,336,339],{"href":337,"rel":338},"https://gitlab.com/gitlab-da/use-cases/remote-development/example-nodejs-express-app",[],"this project"," to the GitLab group for which you have a Developer role or above.",[50,342,343,344,347,348],{},"Switch contexts and select ",[139,345,346],{},"Your work",".\n",[349,350],"img",{"alt":346,"src":351},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397797/blog/Content%20Images/2023-07-10-your-work.png",[50,353,354,355,42],{},"Select ",[139,356,357],{},"Workspaces",[50,359,354,360,42],{},[139,361,362],{},"New workspace",[50,364,365,366,369],{},"Select the project you forked or another project that has a ",[139,367,368],{},".devfile.yaml"," file at the root of the repository.",[50,371,372,373,378],{},"Select the ",[16,374,377],{"href":375,"rel":376},"https://docs.gitlab.com/user/workspace/#prerequisites",[],"cluster agent"," owned by the group the project belongs to.",[50,380,381,382,385],{},"In ",[139,383,384],{},"Time before automatic termination",", enter the number of hours until the workspace automatically terminates. This timeout is a safety measure to prevent a workspace from consuming excessive resources or running indefinitely.",[50,387,354,388,42],{},[139,389,390],{},"Create workspace",[12,392,393],{},[349,394],{"alt":395,"src":396},"create ws","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398130/blog/Content%20Images/create_workspace.png",[12,398,399],{},"The workspace will be deployed to the cluster and might take a few minutes to start. To access the workspace, under Preview, select the workspace link.",[12,401,402],{},[349,403],{"alt":404,"src":405},"ws list","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399345/blog/Content%20Images/workspaces_list.png",[99,407,73],{"id":408},"install-dependencies-and-previewing-your-application-in-the-workspace",[12,410,411,412,417],{},"After creating your workspace, the ",[16,413,416],{"href":414,"rel":415},"https://docs.gitlab.com/user/workspace/#web-ide",[],"Web IDE using VS Code"," is injected into it, and the repository is cloned to the image. Consequently, you gain immediate access to your code and can commence working on it right away.",[12,419,420],{},"You can now open the terminal, install any missing dependencies, and start the application.",[12,422,423],{},[349,424],{"alt":425,"src":426},"Terminal","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399351/blog/Content%20Images/ws-terminal.png",[321,428,429,438,451],{},[50,430,431,432,434,435,42],{},"To open the terminal, from the left menu, select ",[139,433,425],{},", ",[139,436,437],{},"New Terminal",[50,439,440,441,444,445,450],{},"Type ",[139,442,443],{},"npm install"," to install the dependencies listed in the ",[16,446,449],{"href":447,"rel":448},"https://gitlab.com/gitlab-da/use-cases/remote-development/example-nodejs-express-app/-/blob/main/package.json",[],"package.json"," file.",[50,452,440,453,456],{},[139,454,455],{},"npm start"," to start the application.",[12,458,459],{},"The log will indicate that the application has started on port 3000.",[12,461,462],{},[349,463],{"alt":464,"src":465},"log","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399007/blog/Content%20Images/server_log.png",[12,467,468,469,472,473,476],{},"You can now access your application by opening the browser and using the workspace URL. Change the number before ‘workspace’ in the URL to the port number on which your application is listening (e.g., 3000). For example, if your workspace URL is ",[139,470,471],{},"https://\u003Cprefix>-workspace-73241-25728545-rqvpjm.workspaces.gitlab.dev",", and your application is running on port 3000, update ",[139,474,475],{},"\u003Cprefix>"," to 3000 to access your application.",[99,478,79],{"id":479},"make-changes-to-the-application-and-previewing-the-updated-version",[12,481,482,483,486],{},"In the Web IDE, navigate to the ",[139,484,485],{},"server.js"," file, modify the text in line 9.",[12,488,489],{},"Afterward, refresh the browser where your application is opened to see the applied changes.",[99,491,85],{"id":492},"commit-the-change",[321,494,495,498,504,509,512,515],{},[50,496,497],{},"In the Web IDE click on the merge icon in the activity bar.",[50,499,500,501,503],{},"Click the line with the ",[139,502,485],{}," to view your change side by side.",[50,505,506,507,42],{},"To stage your change, click the plus icon next to ",[139,508,485],{},[50,510,511],{},"Type a commit message describing your change.",[50,513,514],{},"Click Commit.",[50,516,517],{},"Click Sync changes to push the commit to the GitLab server.",[12,519,520],{},[349,521],{"alt":522,"src":523},"commit","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398089/blog/Content%20Images/commit-stage.png",[99,525,527],{"id":526},"more-resources","More resources",[47,529,530,538],{},[50,531,532,533,42],{},"Explore further with this ",[16,534,537],{"href":535,"rel":536},"https://tech-marketing.gitlab.io/static-demos/workspaces/ws_html.html",[],"click-through demo of workspaces",[50,539,540,541,42],{},"Learn how to ",[16,542,544],{"href":543},"/blog/tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access/","install VS Code on a cloud provider VM and set up remote access",[99,546,97],{"id":547},"try-out-workspaces",[12,549,550],{},"Remote Development workspaces offer a convenient and efficient way to work on projects without the need for local development setups. They provide a streamlined workflow and enable developers to focus on writing code rather than dealing with complex environment setups.",[12,552,553],{},"By adopting workspaces, developers can collaborate effectively, improve productivity, and simplify the development process.",[12,555,556],{},"Give workspaces a try and revolutionize your remote development experience today!",[12,558,559,560,564,565],{},"Cover image by ",[16,561,563],{"href":562},"https://unsplash.com/@pankajpatel?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText","Pankaj Patel"," on ",[16,566,568],{"href":567},"https://unsplash.com/photos/_SgRNwAVNKw?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText","Unsplash",[570,571,572],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}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);}",{"title":137,"searchDepth":160,"depth":160,"links":574},[575,576,577,578,579,580,581,582],{"id":101,"depth":160,"text":55},{"id":113,"depth":160,"text":61},{"id":319,"depth":160,"text":67},{"id":408,"depth":160,"text":73},{"id":479,"depth":160,"text":79},{"id":492,"depth":160,"text":85},{"id":526,"depth":160,"text":527},{"id":547,"depth":160,"text":97},"engineering","2023-06-26","Learn how to create a workspace from your GitLab account and work directly from the remote development environment.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664219/Blog/Hero%20Images/2023-06-22-quickstart-workspaces-cover-image2.png",{},true,"/en-us/blog/quick-start-guide-for-gitlab-workspaces",{"title":5,"description":585,"ogTitle":5,"ogDescription":585,"noIndex":588,"ogImage":589,"ogUrl":594,"ogSiteName":595,"ogType":596,"canonicalUrls":594},"https://about.gitlab.com/blog/quick-start-guide-for-gitlab-workspaces","https://about.gitlab.com","article","quick-start-guide-for-gitlab-workspaces","en-us/blog/quick-start-guide-for-gitlab-workspaces",[600,601,602],"tutorial","DevOps","CI/CD","BlogPost","qIlEfqKBb_EB-C1BYfbIttf2hThIkqUCsfAKfR0-RBs",{"logo":606,"freeTrial":611,"sales":616,"login":621,"items":626,"search":952,"minimal":983,"duo":1002,"switchNav":1011,"pricingDeployment":1022},{"config":607},{"href":608,"dataGaName":609,"dataGaLocation":610},"/","gitlab logo","header",{"text":612,"config":613},"Get free trial",{"href":614,"dataGaName":615,"dataGaLocation":610},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":617,"config":618},"Request a demo",{"href":619,"dataGaName":620,"dataGaLocation":610},"/sales/?contact-topic=request-demo","sales",{"text":622,"config":623},"Sign in",{"href":624,"dataGaName":625,"dataGaLocation":610},"https://gitlab.com/users/sign_in/","sign in",[627,656,755,760,874,930],{"text":628,"config":629,"menu":631},"Platform",{"dataNavLevelOne":630},"platform",{"type":632,"columns":633},"cards",[634,640,648],{"title":628,"description":635,"link":636},"The intelligent orchestration platform for DevSecOps",{"text":637,"config":638},"Explore our Platform",{"href":639,"dataGaName":630,"dataGaLocation":610},"/platform/",{"title":641,"description":642,"link":643},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":644,"config":645},"Meet GitLab Duo",{"href":646,"dataGaName":647,"dataGaLocation":610},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":649,"description":650,"link":651},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":652,"config":653},"Learn more",{"href":654,"dataGaName":655,"dataGaLocation":610},"/why-gitlab/","why gitlab",{"text":657,"left":591,"config":658,"menu":660},"Product",{"dataNavLevelOne":659},"solutions",{"type":661,"link":662,"columns":666,"feature":734},"lists",{"text":663,"config":664},"View all Solutions",{"href":665,"dataGaName":659,"dataGaLocation":610},"/solutions/",[667,690,713],{"title":668,"description":669,"link":670,"items":675},"Automation","CI/CD and automation to accelerate deployment",{"config":671},{"icon":672,"href":673,"dataGaName":674,"dataGaLocation":610},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[676,679,682,686],{"text":602,"config":677},{"href":678,"dataGaLocation":610,"dataGaName":602},"/solutions/continuous-integration/",{"text":641,"config":680},{"href":646,"dataGaLocation":610,"dataGaName":681},"gitlab duo agent platform - product menu",{"text":683,"config":684},"Source Code Management",{"href":685,"dataGaLocation":610,"dataGaName":683},"/solutions/source-code-management/",{"text":687,"config":688},"Automated Software Delivery",{"href":673,"dataGaLocation":610,"dataGaName":689},"Automated software delivery",{"title":691,"description":692,"link":693,"items":698},"Security","Deliver code faster without compromising security",{"config":694},{"href":695,"dataGaName":696,"dataGaLocation":610,"icon":697},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[699,703,708],{"text":700,"config":701},"Application Security Testing",{"href":695,"dataGaName":702,"dataGaLocation":610},"Application security testing",{"text":704,"config":705},"Software Supply Chain Security",{"href":706,"dataGaLocation":610,"dataGaName":707},"/solutions/supply-chain/","Software supply chain security",{"text":709,"config":710},"Software Compliance",{"href":711,"dataGaName":712,"dataGaLocation":610},"/solutions/software-compliance/","software compliance",{"title":714,"link":715,"items":720},"Measurement",{"config":716},{"icon":717,"href":718,"dataGaName":719,"dataGaLocation":610},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[721,725,729],{"text":722,"config":723},"Visibility & Measurement",{"href":718,"dataGaLocation":610,"dataGaName":724},"Visibility and Measurement",{"text":726,"config":727},"Value Stream Management",{"href":728,"dataGaLocation":610,"dataGaName":726},"/solutions/value-stream-management/",{"text":730,"config":731},"Analytics & Insights",{"href":732,"dataGaLocation":610,"dataGaName":733},"/solutions/analytics-and-insights/","Analytics and insights",{"title":735,"type":661,"items":736},"GitLab for",[737,743,749],{"text":738,"config":739},"Enterprise",{"icon":740,"href":741,"dataGaLocation":610,"dataGaName":742},"Building","/enterprise/","enterprise",{"text":744,"config":745},"Small Business",{"icon":746,"href":747,"dataGaLocation":610,"dataGaName":748},"Work","/small-business/","small business",{"text":750,"config":751},"Public Sector",{"icon":752,"href":753,"dataGaLocation":610,"dataGaName":754},"Organization","/solutions/public-sector/","public sector",{"text":756,"config":757},"Pricing",{"href":758,"dataGaName":759,"dataGaLocation":610,"dataNavLevelOne":759},"/pricing/","pricing",{"text":761,"config":762,"menu":764},"Resources",{"dataNavLevelOne":763},"resources",{"type":661,"link":765,"columns":769,"feature":863},{"text":766,"config":767},"View all resources",{"href":768,"dataGaName":763,"dataGaLocation":610},"/resources/",[770,803,830],{"title":771,"items":772},"Getting started",[773,778,783,788,793,798],{"text":774,"config":775},"Install",{"href":776,"dataGaName":777,"dataGaLocation":610},"/install/","install",{"text":779,"config":780},"Quick start guides",{"href":781,"dataGaName":782,"dataGaLocation":610},"/get-started/","quick setup checklists",{"text":784,"config":785},"Learn",{"href":786,"dataGaLocation":610,"dataGaName":787},"https://university.gitlab.com/","learn",{"text":789,"config":790},"Product documentation",{"href":791,"dataGaName":792,"dataGaLocation":610},"https://docs.gitlab.com/","product documentation",{"text":794,"config":795},"Best practice videos",{"href":796,"dataGaName":797,"dataGaLocation":610},"/getting-started-videos/","best practice videos",{"text":799,"config":800},"Integrations",{"href":801,"dataGaName":802,"dataGaLocation":610},"/integrations/","integrations",{"title":804,"items":805},"Discover",[806,811,816,821,825],{"text":807,"config":808},"Customer success stories",{"href":809,"dataGaName":810,"dataGaLocation":610},"/customers/","customer success stories",{"text":812,"config":813},"Blog",{"href":814,"dataGaName":815,"dataGaLocation":610},"/blog/","blog",{"text":817,"config":818},"Demo Hub",{"href":819,"dataGaName":820,"dataGaLocation":610},"/demo-hub/","demo hub",{"text":822,"config":823},"The Source",{"href":824,"dataGaName":815,"dataGaLocation":610},"/the-source/",{"text":826,"config":827},"Remote",{"href":828,"dataGaName":829,"dataGaLocation":610},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":831,"items":832},"Connect",[833,838,843,848,853,858],{"text":834,"config":835},"GitLab Services",{"href":836,"dataGaName":837,"dataGaLocation":610},"/services/","services",{"text":839,"config":840},"Contribute",{"href":841,"dataGaName":842,"dataGaLocation":610},"https://contributors.gitlab.com","contribute",{"text":844,"config":845},"Community",{"href":846,"dataGaName":847,"dataGaLocation":610},"/community/","community",{"text":849,"config":850},"Forum",{"href":851,"dataGaName":852,"dataGaLocation":610},"https://forum.gitlab.com/","forum",{"text":854,"config":855},"Events",{"href":856,"dataGaName":857,"dataGaLocation":610},"/events/","events",{"text":859,"config":860},"Partners",{"href":861,"dataGaName":862,"dataGaLocation":610},"/partners/","partners",{"config":864,"title":867,"text":868,"link":869},{"background":865,"textColor":866},"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":870,"config":871},"Read the latest",{"href":872,"dataGaName":873,"dataGaLocation":610},"/whats-new/","whats new",{"text":875,"config":876,"menu":878},"Company",{"dataNavLevelOne":877},"company",{"type":661,"columns":879},[880],{"items":881},[882,887,893,895,900,905,910,915,920,925],{"text":883,"config":884},"About",{"href":885,"dataGaName":886,"dataGaLocation":610},"/company/","about",{"text":888,"config":889,"footerGa":892},"Jobs",{"href":890,"dataGaName":891,"dataGaLocation":610},"/jobs/","jobs",{"dataGaName":891},{"text":854,"config":894},{"href":856,"dataGaName":857,"dataGaLocation":610},{"text":896,"config":897},"Leadership",{"href":898,"dataGaName":899,"dataGaLocation":610},"/company/team/e-group/","leadership",{"text":901,"config":902},"Handbook",{"href":903,"dataGaName":904,"dataGaLocation":610},"https://handbook.gitlab.com/","handbook",{"text":906,"config":907},"Investor relations",{"href":908,"dataGaName":909,"dataGaLocation":610},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":911,"config":912},"Trust Center",{"href":913,"dataGaName":914,"dataGaLocation":610},"/security/","trust center",{"text":916,"config":917},"AI Transparency Center",{"href":918,"dataGaName":919,"dataGaLocation":610},"/ai-transparency-center/","ai transparency center",{"text":921,"config":922},"Newsletter",{"href":923,"dataGaName":924,"dataGaLocation":610},"/company/contact/#contact-forms","newsletter",{"text":926,"config":927},"Press",{"href":928,"dataGaName":929,"dataGaLocation":610},"/press/","press",{"text":931,"config":932,"menu":933},"Contact us",{"dataNavLevelOne":877},{"type":661,"columns":934},[935],{"items":936},[937,942,947],{"text":938,"config":939},"Talk to sales",{"href":940,"dataGaName":941,"dataGaLocation":610},"/sales/","talk to sales",{"text":943,"config":944},"Support portal",{"href":945,"dataGaName":946,"dataGaLocation":610},"https://support.gitlab.com/hc/en-us","support portal",{"text":948,"config":949},"Customer portal",{"href":950,"dataGaName":951,"dataGaLocation":610},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":953,"login":954,"suggestions":961},"Close",{"text":955,"link":956},"To search repositories and projects, login to",{"text":957,"config":958},"gitlab.com",{"href":624,"dataGaName":959,"dataGaLocation":960},"search login","search",{"text":962,"default":963},"Suggestions",[964,966,970,972,976,980],{"text":641,"config":965},{"href":646,"dataGaName":641,"dataGaLocation":960},{"text":967,"config":968},"Code Suggestions (AI)",{"href":969,"dataGaName":967,"dataGaLocation":960},"/solutions/code-suggestions/",{"text":602,"config":971},{"href":678,"dataGaName":602,"dataGaLocation":960},{"text":973,"config":974},"GitLab on AWS",{"href":975,"dataGaName":973,"dataGaLocation":960},"/partners/technology-partners/aws/",{"text":977,"config":978},"GitLab on Google Cloud",{"href":979,"dataGaName":977,"dataGaLocation":960},"/partners/technology-partners/google-cloud-platform/",{"text":981,"config":982},"Why GitLab?",{"href":654,"dataGaName":981,"dataGaLocation":960},{"freeTrial":984,"mobileIcon":989,"desktopIcon":994,"secondaryButton":997},{"text":985,"config":986},"Start free trial",{"href":987,"dataGaName":615,"dataGaLocation":988},"https://gitlab.com/-/trials/new/","nav",{"altText":990,"config":991},"Gitlab Icon",{"src":992,"dataGaName":993,"dataGaLocation":988},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":990,"config":995},{"src":996,"dataGaName":993,"dataGaLocation":988},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":998,"config":999},"Get Started",{"href":1000,"dataGaName":1001,"dataGaLocation":988},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1003,"mobileIcon":1007,"desktopIcon":1009},{"text":1004,"config":1005},"Learn more about GitLab Duo",{"href":646,"dataGaName":1006,"dataGaLocation":988},"gitlab duo",{"altText":990,"config":1008},{"src":992,"dataGaName":993,"dataGaLocation":988},{"altText":990,"config":1010},{"src":996,"dataGaName":993,"dataGaLocation":988},{"button":1012,"mobileIcon":1017,"desktopIcon":1019},{"text":1013,"config":1014},"/switch",{"href":1015,"dataGaName":1016,"dataGaLocation":988},"#contact","switch",{"altText":990,"config":1018},{"src":992,"dataGaName":993,"dataGaLocation":988},{"altText":990,"config":1020},{"src":1021,"dataGaName":993,"dataGaLocation":988},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1023,"mobileIcon":1028,"desktopIcon":1030},{"text":1024,"config":1025},"Back to pricing",{"href":758,"dataGaName":1026,"dataGaLocation":988,"icon":1027},"back to pricing","GoBack",{"altText":990,"config":1029},{"src":992,"dataGaName":993,"dataGaLocation":988},{"altText":990,"config":1031},{"src":996,"dataGaName":993,"dataGaLocation":988},{"title":1033,"titleMobile":1034,"button":1035,"config":1040},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":652,"config":1036},{"href":1037,"dataGaName":1038,"dataGaLocation":1039},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1041,"disabled":588},"release",{"data":1043},{"text":1044,"source":1045,"edit":1051,"contribute":1056,"config":1061,"items":1066,"minimal":1275},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1046,"config":1047},"View page source",{"href":1048,"dataGaName":1049,"dataGaLocation":1050},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1052,"config":1053},"Edit this page",{"href":1054,"dataGaName":1055,"dataGaLocation":1050},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1057,"config":1058},"Please contribute",{"href":1059,"dataGaName":1060,"dataGaLocation":1050},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1062,"facebook":1063,"youtube":1064,"linkedin":1065},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1067,1114,1167,1211,1243],{"title":756,"links":1068,"subMenu":1083},[1069,1073,1078],{"text":1070,"config":1071},"View plans",{"href":758,"dataGaName":1072,"dataGaLocation":1050},"view plans",{"text":1074,"config":1075},"Why Premium?",{"href":1076,"dataGaName":1077,"dataGaLocation":1050},"/pricing/premium/","why premium",{"text":1079,"config":1080},"Why Ultimate?",{"href":1081,"dataGaName":1082,"dataGaLocation":1050},"/pricing/ultimate/","why ultimate",[1084],{"title":1085,"links":1086},"Contact Us",[1087,1090,1092,1094,1099,1104,1109],{"text":1088,"config":1089},"Contact sales",{"href":940,"dataGaName":620,"dataGaLocation":1050},{"text":943,"config":1091},{"href":945,"dataGaName":946,"dataGaLocation":1050},{"text":948,"config":1093},{"href":950,"dataGaName":951,"dataGaLocation":1050},{"text":1095,"config":1096},"Status",{"href":1097,"dataGaName":1098,"dataGaLocation":1050},"https://status.gitlab.com/","status",{"text":1100,"config":1101},"Terms of use",{"href":1102,"dataGaName":1103,"dataGaLocation":1050},"/terms/","terms of use",{"text":1105,"config":1106},"Privacy statement",{"href":1107,"dataGaName":1108,"dataGaLocation":1050},"/privacy/","privacy statement",{"text":1110,"config":1111},"Cookie preferences",{"dataGaName":1112,"dataGaLocation":1050,"id":1113,"isOneTrustButton":591},"cookie preferences","ot-sdk-btn",{"title":657,"links":1115,"subMenu":1124},[1116,1120],{"text":1117,"config":1118},"DevSecOps platform",{"href":639,"dataGaName":1119,"dataGaLocation":1050},"devsecops platform",{"text":1121,"config":1122},"AI-Assisted Development",{"href":646,"dataGaName":1123,"dataGaLocation":1050},"ai-assisted development",[1125],{"title":1126,"links":1127},"Topics",[1128,1133,1138,1142,1147,1152,1157,1162],{"text":1129,"config":1130},"CICD",{"href":1131,"dataGaName":1132,"dataGaLocation":1050},"/topics/ci-cd/","cicd",{"text":1134,"config":1135},"GitOps",{"href":1136,"dataGaName":1137,"dataGaLocation":1050},"/topics/gitops/","gitops",{"text":601,"config":1139},{"href":1140,"dataGaName":1141,"dataGaLocation":1050},"/topics/devops/","devops",{"text":1143,"config":1144},"Version Control",{"href":1145,"dataGaName":1146,"dataGaLocation":1050},"/topics/version-control/","version control",{"text":1148,"config":1149},"DevSecOps",{"href":1150,"dataGaName":1151,"dataGaLocation":1050},"/topics/devsecops/","devsecops",{"text":1153,"config":1154},"Cloud Native",{"href":1155,"dataGaName":1156,"dataGaLocation":1050},"/topics/cloud-native/","cloud native",{"text":1158,"config":1159},"AI for Coding",{"href":1160,"dataGaName":1161,"dataGaLocation":1050},"/topics/devops/ai-for-coding/","ai for coding",{"text":1163,"config":1164},"Agentic AI",{"href":1165,"dataGaName":1166,"dataGaLocation":1050},"/topics/agentic-ai/","agentic ai",{"title":1168,"links":1169},"Solutions",[1170,1172,1174,1179,1183,1186,1190,1193,1195,1198,1201,1206],{"text":700,"config":1171},{"href":695,"dataGaName":700,"dataGaLocation":1050},{"text":689,"config":1173},{"href":673,"dataGaName":674,"dataGaLocation":1050},{"text":1175,"config":1176},"Agile development",{"href":1177,"dataGaName":1178,"dataGaLocation":1050},"/solutions/agile-delivery/","agile delivery",{"text":1180,"config":1181},"SCM",{"href":685,"dataGaName":1182,"dataGaLocation":1050},"source code management",{"text":1129,"config":1184},{"href":678,"dataGaName":1185,"dataGaLocation":1050},"continuous integration & delivery",{"text":1187,"config":1188},"Value stream management",{"href":728,"dataGaName":1189,"dataGaLocation":1050},"value stream management",{"text":1134,"config":1191},{"href":1192,"dataGaName":1137,"dataGaLocation":1050},"/solutions/gitops/",{"text":738,"config":1194},{"href":741,"dataGaName":742,"dataGaLocation":1050},{"text":1196,"config":1197},"Small business",{"href":747,"dataGaName":748,"dataGaLocation":1050},{"text":1199,"config":1200},"Public sector",{"href":753,"dataGaName":754,"dataGaLocation":1050},{"text":1202,"config":1203},"Education",{"href":1204,"dataGaName":1205,"dataGaLocation":1050},"/solutions/education/","education",{"text":1207,"config":1208},"Financial services",{"href":1209,"dataGaName":1210,"dataGaLocation":1050},"/solutions/finance/","financial services",{"title":761,"links":1212},[1213,1215,1217,1219,1222,1224,1227,1229,1231,1233,1235,1237,1239,1241],{"text":774,"config":1214},{"href":776,"dataGaName":777,"dataGaLocation":1050},{"text":779,"config":1216},{"href":781,"dataGaName":782,"dataGaLocation":1050},{"text":784,"config":1218},{"href":786,"dataGaName":787,"dataGaLocation":1050},{"text":789,"config":1220},{"href":791,"dataGaName":1221,"dataGaLocation":1050},"docs",{"text":812,"config":1223},{"href":814,"dataGaName":815,"dataGaLocation":1050},{"text":1225,"config":1226},"What's new",{"href":872,"dataGaName":873,"dataGaLocation":1050},{"text":807,"config":1228},{"href":809,"dataGaName":810,"dataGaLocation":1050},{"text":826,"config":1230},{"href":828,"dataGaName":829,"dataGaLocation":1050},{"text":834,"config":1232},{"href":836,"dataGaName":837,"dataGaLocation":1050},{"text":839,"config":1234},{"href":841,"dataGaName":842,"dataGaLocation":1050},{"text":844,"config":1236},{"href":846,"dataGaName":847,"dataGaLocation":1050},{"text":849,"config":1238},{"href":851,"dataGaName":852,"dataGaLocation":1050},{"text":854,"config":1240},{"href":856,"dataGaName":857,"dataGaLocation":1050},{"text":859,"config":1242},{"href":861,"dataGaName":862,"dataGaLocation":1050},{"title":875,"links":1244},[1245,1247,1249,1251,1253,1255,1259,1264,1266,1268,1270],{"text":883,"config":1246},{"href":885,"dataGaName":877,"dataGaLocation":1050},{"text":888,"config":1248},{"href":890,"dataGaName":891,"dataGaLocation":1050},{"text":896,"config":1250},{"href":898,"dataGaName":899,"dataGaLocation":1050},{"text":901,"config":1252},{"href":903,"dataGaName":904,"dataGaLocation":1050},{"text":906,"config":1254},{"href":908,"dataGaName":909,"dataGaLocation":1050},{"text":1256,"config":1257},"Sustainability",{"href":1258,"dataGaName":1256,"dataGaLocation":1050},"/sustainability/",{"text":1260,"config":1261},"Diversity, inclusion and belonging (DIB)",{"href":1262,"dataGaName":1263,"dataGaLocation":1050},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":911,"config":1265},{"href":913,"dataGaName":914,"dataGaLocation":1050},{"text":921,"config":1267},{"href":923,"dataGaName":924,"dataGaLocation":1050},{"text":926,"config":1269},{"href":928,"dataGaName":929,"dataGaLocation":1050},{"text":1271,"config":1272},"Modern Slavery Transparency Statement",{"href":1273,"dataGaName":1274,"dataGaLocation":1050},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1276},[1277,1280,1283],{"text":1278,"config":1279},"Terms",{"href":1102,"dataGaName":1103,"dataGaLocation":1050},{"text":1281,"config":1282},"Cookies",{"dataGaName":1112,"dataGaLocation":1050,"id":1113,"isOneTrustButton":591},{"text":1284,"config":1285},"Privacy",{"href":1107,"dataGaName":1108,"dataGaLocation":1050},[1287],{"id":1288,"title":7,"body":587,"config":1289,"content":1291,"description":587,"extension":1295,"meta":1296,"navigation":591,"path":1297,"seo":1298,"stem":1299,"__hash__":1300},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":1290},"BlogAuthor",{"name":7,"config":1292},{"headshot":1293,"ctfId":1294},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658921/Blog/Author%20Headshots/iganbaruch-headshot.jpg","iganbaruch","yml",{},"/en-us/blog/authors/itzik-gan-baruch",{},"en-us/blog/authors/itzik-gan-baruch","bz9VMiTQ1ixvnoxUFk0jiUcnLG3oQsymgXNCqyRqfsk",[1302,1311,1319],{"title":1303,"description":1304,"heroImage":1305,"category":583,"date":1306,"authors":1307,"slug":1310,"externalUrl":587},"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",[1308,1309],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1312,"description":1313,"heroImage":1314,"category":583,"date":1315,"authors":1316,"slug":1318,"externalUrl":587},"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",[1317],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1320,"description":1321,"heroImage":1322,"category":583,"date":1323,"authors":1324,"slug":1326,"externalUrl":587},"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",[1325],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1328},[1329,1343,1355,1367],{"id":1330,"categories":1331,"header":1333,"text":1334,"button":1335,"image":1340},"ai-modernization",[1332],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1336,"config":1337},"Get your AI maturity score",{"href":1338,"dataGaName":1339,"dataGaLocation":815},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1341},{"src":1342},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1344,"categories":1345,"header":1347,"text":1334,"button":1348,"image":1352},"devops-modernization",[1346,1151],"product","Are you just managing tools or shipping innovation?",{"text":1349,"config":1350},"Get your DevOps maturity score",{"href":1351,"dataGaName":1339,"dataGaLocation":815},"/assessments/devops-modernization-assessment/",{"config":1353},{"src":1354},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1356,"categories":1357,"header":1359,"text":1334,"button":1360,"image":1364},"security-modernization",[1358],"security","Are you trading speed for security?",{"text":1361,"config":1362},"Get your security maturity score",{"href":1363,"dataGaName":1339,"dataGaLocation":815},"/assessments/security-modernization-assessment/",{"config":1365},{"src":1366},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1368,"paths":1369,"header":1372,"text":1373,"button":1374,"image":1379},"github-azure-migration",[1370,1371],"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":1375,"config":1376},"See how GitLab compares to GitHub",{"href":1377,"dataGaName":1378,"dataGaLocation":815},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1380},{"src":1354},{"header":1382,"blurb":1383,"button":1384,"secondaryButton":1389},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1385,"config":1386},"Get your free trial",{"href":1387,"dataGaName":615,"dataGaLocation":1388},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1088,"config":1390},{"href":940,"dataGaName":620,"dataGaLocation":1388},1786803737088]