[{"data":1,"prerenderedAt":1587},["ShallowReactive",2],{"/blog/how-we-use-gitlab-to-grow-open-source-communities":3,"navigation-en-us":790,"banner-en-us":1217,"footer-en-us":1227,"blog-post-authors-en-us-Lee Tickett|Daniel Murphy":1472,"blog-related-posts-en-us-how-we-use-gitlab-to-grow-open-source-communities":1499,"blog-promotions-en-us":1524,"next-steps-en-us":1577},{"id":4,"title":5,"authors":6,"body":9,"category":771,"date":772,"description":773,"extension":774,"externalUrl":775,"faq":775,"featured":776,"heroImage":777,"meta":778,"navigation":779,"path":780,"seo":781,"slug":782,"stem":783,"tags":784,"template":788,"updatedDate":775,"__hash__":789},"blogPosts/en-us/blog/how-we-use-gitlab-to-grow-open-source-communities.md","How we use GitLab to grow open source communities",[7,8],"Lee Tickett","Daniel Murphy",{"type":10,"value":11,"toc":758},"minimark",[12,23,26,29,32,37,40,43,56,59,68,71,74,77,81,84,93,102,111,118,127,130,134,137,152,160,400,406,410,413,438,441,450,551,557,561,564,567,575,581,585,594,600,620,624,637,650,656,662,666,669,672,678,687,695,701,704,708,717,721,724,727,731,744,751,754],[13,14,15,16,22],"p",{},"GitLab's Contributor Success team faced a challenge.\nWhile our returning open source contributors were merging more code changes and collaborating on deeper features, first-time contributors were struggling to get started. We knew many newcomers to open source often gave up or never asked for help. But as advocates for ",[17,18,21],"a",{"href":19,"rel":20},"https://handbook.gitlab.com/handbook/company/mission/",[],"GitLab's mission","\nto enable everyone to contribute, we wanted to do better.",[13,24,25],{},"We started running research studies on open source contributors to GitLab. Then we improved the stumbling blocks. In January, we achieved a record of 184 unique community contributors to GitLab in a single month,\nexceeding our team target of 170 for the first time.",[13,27,28],{},"Three months later, we broke it again with 192.",[13,30,31],{},"Here's how we used GitLab's own tools to solve the newcomer dilemma and grow our open source community.",[33,34,36],"h2",{"id":35},"what-we-learned-studying-first-time-contributors","What we learned studying first-time contributors",[13,38,39],{},"In 2023, we conducted the first-ever user study of GitLab open source contributors.\nWe watched six participants who had never contributed to GitLab make their first attempt. They completed diary studies and Zoom interviews detailing their experience.",[13,41,42],{},"Participants told us:",[44,45,46,50,53],"ul",{},[47,48,49],"li",{},"The contributor documentation was confusing",[47,51,52],{},"Getting started felt overwhelming",[47,54,55],{},"It wasn't clear how or where to find help",[13,57,58],{},"Only one out of the six participants successfully merged a code contribution to GitLab during the study.",[13,60,61,62,67],{},"It became clear we needed to focus on the onboarding experience if we wanted new contributors to succeed.\nSo we ",[17,63,66],{"href":64,"rel":65},"https://handbook.gitlab.com/handbook/values/#iteration",[],"iterated","!",[13,69,70],{},"Our team spent the next year addressing their challenges. We used GitLab tools,\nsuch as issue templates, scheduled pipelines, webhooks, and the GitLab Query Language (GLQL), to build an innovative semi-automated onboarding solution.",[13,72,73],{},"In 2025, we performed a follow-up user study with new participants who had never made a contribution to GitLab. All 10 participants successfully created and merged contributions to GitLab, a 100% success rate. The feedback showed a great appreciation for the new onboarding process, the speed at which\nmaintainers checked in on contributors, and the recognition we offered to contributors.",[13,75,76],{},"Even better, participants shared how much fun they had contributing:\n\"I felt a little rush of excitement at being able to say 'I helped build GitLab.'\"",[33,78,80],{"id":79},"we-built-personal-onboarding-with-gitlab","We built personal onboarding with GitLab",[13,82,83],{},"Our solution started with engagement.\nTo help newcomers get started, we introduced a personal onboarding process connecting each\ncontributor with a community maintainer.",[13,85,86,87,92],{},"We created an ",[17,88,91],{"href":89,"rel":90},"https://gitlab.com/gitlab-community/meta/-/blob/ac0e5579a6a1cf26e367010bfcf6c7d35b38d4f8/.gitlab/issue_templates/Onboarding.md",[],"issue template"," with a clear checklist of tasks.",[13,94,95,96,101],{},"The onboarding issue also handles access approval for the\n",[17,97,100],{"href":98,"rel":99},"https://about.gitlab.com/blog/gitlab-community-forks/",[],"GitLab community forks",",\na collection of shared projects that make it easier to push changes, collaborate with others,\nand access GitLab Ultimate and Duo features.",[13,103,104,105,110],{},"Using ",[17,106,109],{"href":107,"rel":108},"https://docs.gitlab.com/user/project/labels/#scoped-labels",[],"scoped labels",", we indicate the status of the access request for easy maintainer follow-ups.",[13,112,113],{},[114,115],"img",{"alt":116,"src":117},"GitLab onboarding issue","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512804/vkiyl0hrfbgcer3nz38r.png",[13,119,120,121,126],{},"We started with a Ruby script run via a ",[17,122,125],{"href":123,"rel":124},"https://docs.gitlab.com/ci/pipelines/schedules/",[],"scheduled pipeline",",\nchecking for new access requests and using the issue template to create personalized onboarding issues.",[13,128,129],{},"From here, our maintainers engage with new contributors to verify access, answer questions, and find issues.",[33,131,133],{"id":132},"we-standardized-responses-with-comment-templates","We standardized responses with comment templates",[13,135,136],{},"With multiple maintainers in the GitLab community, we wanted to ensure consistent and clear messaging.",[13,138,139,140,145,146,151],{},"We created ",[17,141,144],{"href":142,"rel":143},"https://docs.gitlab.com/user/profile/comment_templates/",[],"comment templates",",\nwhich we sync with the repository using the GraphQL API and a\n",[17,147,150],{"href":148,"rel":149},"https://gitlab.com/gitlab-community/meta/-/blob/dd6e0c2861c848251424b72e3e8c5603dcaac725/bin/sync_comment_templates.rb",[],"Ruby script",".",[13,153,154,155,159],{},"The script is triggered in ",[156,157,158],"code",{},".gitlab-ci.yml"," when comment template changes are pushed\nto the default branch (a dry run is triggered in merge requests).",[161,162,167],"pre",{"className":163,"code":164,"language":165,"meta":166,"style":166},"language-yaml shiki shiki-themes github-light","execute:sync-comment-templates:\n  stage: execute\n  extends: .ruby\n  script:\n    - bundle exec bin/sync_comment_templates.rb\n  variables:\n    SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN: $SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN_READ_ONLY\n  rules:\n    - if: $CI_PIPELINE_SOURCE == 'schedule' || $CI_PIPELINE_SOURCE == \"trigger\"\n      when: never\n    - if: $EXECUTE_SYNC_COMMENT_TEMPLATES == '1'\n    - if: $CI_MERGE_REQUEST_IID\n      changes:\n        - .gitlab/comment_templates/**/*\n      variables:\n        REPORT_ONLY: 1\n    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH\n      changes:\n        - .gitlab/comment_templates/**/*\n      variables:\n        FORCE_SYNC: 1\n        DRY_RUN: 0\n        SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN: $SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN_READ_WRITE\n\n","yaml","",[156,168,169,182,195,206,214,223,231,242,250,263,274,286,298,306,315,323,335,347,354,361,368,378,389],{"__ignoreMap":166},[170,171,174,178],"span",{"class":172,"line":173},"line",1,[170,175,177],{"class":176},"shJU0","execute:sync-comment-templates",[170,179,181],{"class":180},"sgsFI",":\n",[170,183,185,188,191],{"class":172,"line":184},2,[170,186,187],{"class":176},"  stage",[170,189,190],{"class":180},": ",[170,192,194],{"class":193},"sYBdl","execute\n",[170,196,198,201,203],{"class":172,"line":197},3,[170,199,200],{"class":176},"  extends",[170,202,190],{"class":180},[170,204,205],{"class":193},".ruby\n",[170,207,209,212],{"class":172,"line":208},4,[170,210,211],{"class":176},"  script",[170,213,181],{"class":180},[170,215,217,220],{"class":172,"line":216},5,[170,218,219],{"class":180},"    - ",[170,221,222],{"class":193},"bundle exec bin/sync_comment_templates.rb\n",[170,224,226,229],{"class":172,"line":225},6,[170,227,228],{"class":176},"  variables",[170,230,181],{"class":180},[170,232,234,237,239],{"class":172,"line":233},7,[170,235,236],{"class":176},"    SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN",[170,238,190],{"class":180},[170,240,241],{"class":193},"$SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN_READ_ONLY\n",[170,243,245,248],{"class":172,"line":244},8,[170,246,247],{"class":176},"  rules",[170,249,181],{"class":180},[170,251,253,255,258,260],{"class":172,"line":252},9,[170,254,219],{"class":180},[170,256,257],{"class":176},"if",[170,259,190],{"class":180},[170,261,262],{"class":193},"$CI_PIPELINE_SOURCE == 'schedule' || $CI_PIPELINE_SOURCE == \"trigger\"\n",[170,264,266,269,271],{"class":172,"line":265},10,[170,267,268],{"class":176},"      when",[170,270,190],{"class":180},[170,272,273],{"class":193},"never\n",[170,275,277,279,281,283],{"class":172,"line":276},11,[170,278,219],{"class":180},[170,280,257],{"class":176},[170,282,190],{"class":180},[170,284,285],{"class":193},"$EXECUTE_SYNC_COMMENT_TEMPLATES == '1'\n",[170,287,289,291,293,295],{"class":172,"line":288},12,[170,290,219],{"class":180},[170,292,257],{"class":176},[170,294,190],{"class":180},[170,296,297],{"class":193},"$CI_MERGE_REQUEST_IID\n",[170,299,301,304],{"class":172,"line":300},13,[170,302,303],{"class":176},"      changes",[170,305,181],{"class":180},[170,307,309,312],{"class":172,"line":308},14,[170,310,311],{"class":180},"        - ",[170,313,314],{"class":193},".gitlab/comment_templates/**/*\n",[170,316,318,321],{"class":172,"line":317},15,[170,319,320],{"class":176},"      variables",[170,322,181],{"class":180},[170,324,326,329,331],{"class":172,"line":325},16,[170,327,328],{"class":176},"        REPORT_ONLY",[170,330,190],{"class":180},[170,332,334],{"class":333},"sYu0t","1\n",[170,336,338,340,342,344],{"class":172,"line":337},17,[170,339,219],{"class":180},[170,341,257],{"class":176},[170,343,190],{"class":180},[170,345,346],{"class":193},"$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH\n",[170,348,350,352],{"class":172,"line":349},18,[170,351,303],{"class":176},[170,353,181],{"class":180},[170,355,357,359],{"class":172,"line":356},19,[170,358,311],{"class":180},[170,360,314],{"class":193},[170,362,364,366],{"class":172,"line":363},20,[170,365,320],{"class":176},[170,367,181],{"class":180},[170,369,371,374,376],{"class":172,"line":370},21,[170,372,373],{"class":176},"        FORCE_SYNC",[170,375,190],{"class":180},[170,377,334],{"class":333},[170,379,381,384,386],{"class":172,"line":380},22,[170,382,383],{"class":176},"        DRY_RUN",[170,385,190],{"class":180},[170,387,388],{"class":333},"0\n",[170,390,392,395,397],{"class":172,"line":391},23,[170,393,394],{"class":176},"        SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN",[170,396,190],{"class":180},[170,398,399],{"class":193},"$SYNC_COMMENT_TEMPLATES_GITLAB_API_TOKEN_READ_WRITE\n",[13,401,402],{},[114,403],{"alt":404,"src":405},"GitLab comment template","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512803/qmfaymqhq3zgdcnm6a3j.png",[33,407,409],{"id":408},"we-eliminated-the-5-minute-wait-time","We eliminated the 5-minute wait time",[13,411,412],{},"Our first iteration was a little slow.\nAfter starting the onboarding process, contributors wondered what to do next while the scheduled\npipeline took up to 5 minutes to create their onboarding issue.\nFive minutes feels like forever when you have the momentum to dive in.",[13,414,415,420,421,426,427,432,433,151],{},[17,416,419],{"href":417,"rel":418},"https://gitlab.com/Taucher2003",[],"Niklas",", a member of our ",[17,422,425],{"href":423,"rel":424},"https://about.gitlab.com/community/core-team/",[],"Core team ",", built a solution.\nHe added ",[17,428,431],{"href":429,"rel":430},"https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163094",[],"webhook events for access requests","\nand ",[17,434,437],{"href":435,"rel":436},"https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142738",[],"custom payload templates for webhooks",[13,439,440],{},"These features together allowed us to trigger a pipeline immediately instead of waiting for the schedule.\nThis reduces the time to roughly 40 seconds (the time it takes for the CI pipeline to run)\nand generates the onboarding issue right away. It also saves thousands of wasted pipelines and compute minutes when no access requests actually need processing.",[13,442,443,444,449],{},"We set up a ",[17,445,448],{"href":446,"rel":447},"https://docs.gitlab.com/ci/triggers/#create-a-pipeline-trigger-token",[],"pipeline trigger token","\nand used this as the target for the webhook, passing the desired environment variables:",[161,451,455],{"className":452,"code":453,"language":454,"meta":166,"style":166},"language-json shiki shiki-themes github-light","{\n  \"ref\": \"main\",\n  \"variables\": {\n    \"EXECUTE_ACCESS_REQUESTS\": \"1\",\n    \"DRY_RUN\": \"0\",\n    \"PIPELINE_NAME\": \"Create onboarding issues\",\n    \"GROUP_ID\": \"{{group_id}}\",\n    \"EVENT_NAME\": \"{{event_name}}\"\n  }\n}\n","json",[156,456,457,462,475,483,495,507,519,531,541,546],{"__ignoreMap":166},[170,458,459],{"class":172,"line":173},[170,460,461],{"class":180},"{\n",[170,463,464,467,469,472],{"class":172,"line":184},[170,465,466],{"class":333},"  \"ref\"",[170,468,190],{"class":180},[170,470,471],{"class":193},"\"main\"",[170,473,474],{"class":180},",\n",[170,476,477,480],{"class":172,"line":197},[170,478,479],{"class":333},"  \"variables\"",[170,481,482],{"class":180},": {\n",[170,484,485,488,490,493],{"class":172,"line":208},[170,486,487],{"class":333},"    \"EXECUTE_ACCESS_REQUESTS\"",[170,489,190],{"class":180},[170,491,492],{"class":193},"\"1\"",[170,494,474],{"class":180},[170,496,497,500,502,505],{"class":172,"line":216},[170,498,499],{"class":333},"    \"DRY_RUN\"",[170,501,190],{"class":180},[170,503,504],{"class":193},"\"0\"",[170,506,474],{"class":180},[170,508,509,512,514,517],{"class":172,"line":225},[170,510,511],{"class":333},"    \"PIPELINE_NAME\"",[170,513,190],{"class":180},[170,515,516],{"class":193},"\"Create onboarding issues\"",[170,518,474],{"class":180},[170,520,521,524,526,529],{"class":172,"line":233},[170,522,523],{"class":333},"    \"GROUP_ID\"",[170,525,190],{"class":180},[170,527,528],{"class":193},"\"{{group_id}}\"",[170,530,474],{"class":180},[170,532,533,536,538],{"class":172,"line":244},[170,534,535],{"class":333},"    \"EVENT_NAME\"",[170,537,190],{"class":180},[170,539,540],{"class":193},"\"{{event_name}}\"\n",[170,542,543],{"class":172,"line":252},[170,544,545],{"class":180},"  }\n",[170,547,548],{"class":172,"line":265},[170,549,550],{"class":180},"}\n",[13,552,553],{},[114,554],{"alt":555,"src":556},"Pipeline list","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512805/qom7hnqnwfcdzvria7dd.png",[33,558,560],{"id":559},"we-automated-follow-ups","We automated follow-ups",[13,562,563],{},"With an increasing volume of customers and community contributors onboarding to the GitLab community,\nmaintainers struggled to track which issues needed attention and some follow-up questions got lost.",[13,565,566],{},"We built automation leveraging webhooks and Ruby to label issues updated by community members.\nThis creates a clear signal of issue status for maintainers.",[13,568,569,574],{},[17,570,573],{"href":571,"rel":572},"https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage",[],"GitLab Triage","\nautomatically nudges idle onboarding issues to ensure we maintain contributor momentum.",[13,576,577],{},[114,578],{"alt":579,"src":580},"Automated nudge for idle GitLab onboarding issues","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512811/gkj3qaidjl1vv2dlu8ep.png",[33,582,584],{"id":583},"we-organized-issue-tracking-with-glql","We organized issue tracking with GLQL",[13,586,587,588,593],{},"We built a ",[17,589,592],{"href":590,"rel":591},"https://docs.gitlab.com/user/glql/",[],"GLQL view"," to keep track of issues.\nThis GLQL table summarizes onboarding issues which need attention,\nso maintainers can review and follow up with community members.",[13,595,596],{},[114,597],{"alt":598,"src":599},"GLQL view of issue tracking","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512804/hdduf0orntdfhkysheae.png",[13,601,602,603,608,609,432,614,619],{},"These GLQL views improved our overall triage ",[17,604,607],{"href":605,"rel":606},"https://handbook.gitlab.com/handbook/values/#efficiency",[],"efficiency",".\nIt was so successful we ended up using this strategy within the ",[17,610,613],{"href":611,"rel":612},"https://about.gitlab.com/solutions/open-source/",[],"GitLab for Open Source",[17,615,618],{"href":616,"rel":617},"https://about.gitlab.com/solutions/education/",[],"GitLab for Education"," programs, too.\nWith GLQL tables for support issues, these community programs lowered their response times by 75%.",[33,621,623],{"id":622},"we-made-the-readme-findable","We made the README findable",[13,625,626,627,632,633,636],{},"The ",[17,628,631],{"href":629,"rel":630},"https://gitlab.com/gitlab-community/",[],"@gitlab-community group","\nis the home for contributors on Gitlab.com.\nWe already had a ",[156,634,635],{},"README.md"," file explaining the community forks and onboarding process, but this file\nlived in our meta project.\nWith our follow-up user study, we discovered this was a point of confusion for newcomers when their\nonboarding issues were under a different project.",[13,638,639,640,645,646,649],{},"We used ",[17,641,644],{"href":642,"rel":643},"https://docs.gitlab.com/user/project/repository/mirror/",[],"GitLab's project mirroring","\nto solve this and mirrored the meta project to ",[156,647,648],{},"gitlab-profile",".\nThis surfaced the existing README file at the group level, making it easier to discover.",[13,651,652],{},[114,653],{"alt":654,"src":655},"GitLab project mirroiring","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512809/kbgdxyilza71kmj0aeqt.png",[13,657,658],{},[114,659],{"alt":660,"src":661},"Group README","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512804/taosgn8vvgo8onszuwaf.png",[33,663,665],{"id":664},"the-results-speak-for-themselves","The results speak for themselves",[13,667,668],{},"By dogfooding GitLab, we improved the stumbling blocks found in our research studies\nand transformed the GitLab contributor journey.\nWe have grown the number of customers and community members contributing to GitLab,\nadding features to the product, solving bugs, and adding to our CI/CD catalog.",[13,670,671],{},"Our onboarding process has increased the rate newcomers join the community, and our total number of\ncontributors on the community forks has doubled over the last 9 months.",[13,673,674],{},[114,675],{"alt":676,"src":677},"Community forks growth chart","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512803/xagra4vfsrhbcwnzekmp.png",[13,679,680,681,686],{},"We reduced the time it takes for newcomers to make their first contribution by connecting them\nwith maintainers faster and supporting them in getting started.\nWe use ",[17,682,685],{"href":683,"rel":684},"https://docs.gitlab.com/user/group/value_stream_analytics/",[],"GitLab's value stream analytics","\nto track our response rates.",[44,688,689,692],{},[47,690,691],{},"First response time from community maintainers is down to 46 minutes over the last 3 months",[47,693,694],{},"Average approval time for community forks access is down to 1 hour over the last 3 months",[13,696,697],{},[114,698],{"alt":699,"src":700},"Value stream analytics timeline","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752512812/jzksakrfdb22hooqemzh.png",[13,702,703],{},"The 100% success rate of our 2025 user study confirmed these improvements for our first-time contributors.",[33,705,707],{"id":706},"we-invested-time-savings-into-contributor-recognition","We invested time savings into contributor recognition",[13,709,710,711,716],{},"Fixing these newcomer challenges allowed us more capacity to focus on better recognition of\ncontributors, incentivizing first-timers to keep coming back.\nThe result is ",[17,712,715],{"href":713,"rel":714},"https://contributors.gitlab.com/",[],"contributors.gitlab.com",".\nWe built out a central hub for our contributors that features gamified leaderboards,\nachievements, and rewards.\nContributors can see their impact, track progress, and grow in the community.",[33,718,720],{"id":719},"sharing-what-we-learned","Sharing what we learned",[13,722,723],{},"These improvements work and are repeatable for other open source projects.\nWe are sharing our approach across communities and conferences so that other projects can consider using these tools to grow.",[13,725,726],{},"As more organizations learn the barriers to participation, we can create a more welcoming open source environment.\nWith these GitLab tools, we can offer a smoother experience for both contributors and maintainers.\nWe're committed to advancing this work and collaborating to remove barriers for open source projects everywhere.",[33,728,730],{"id":729},"start-the-conversation","Start the conversation",[13,732,733,734,737,738,743],{},"Want to learn more about growing your contributor community?\nEmail ",[156,735,736],{},"contributors@gitlab.com"," or ",[17,739,742],{"href":740,"rel":741},"https://gitlab.com/gitlab-org/developer-relations/contributor-success/team-task/-/issues",[],"open an issue","\nto start a discussion.",[13,745,746,747,151],{},"Or, if you're interested in joining our security research community, learn more about ",[17,748,750],{"href":749},"/blog/securing-ai-together-gitlabs-partnership-with-security-researchers/","GitLab's partnership with security researchers",[13,752,753],{},"We're here to help build communities.",[755,756,757],"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 .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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":166,"searchDepth":184,"depth":184,"links":759},[760,761,762,763,764,765,766,767,768,769,770],{"id":35,"depth":184,"text":36},{"id":79,"depth":184,"text":80},{"id":132,"depth":184,"text":133},{"id":408,"depth":184,"text":409},{"id":559,"depth":184,"text":560},{"id":583,"depth":184,"text":584},{"id":622,"depth":184,"text":623},{"id":664,"depth":184,"text":665},{"id":706,"depth":184,"text":707},{"id":719,"depth":184,"text":720},{"id":729,"depth":184,"text":730},"open-source","2025-07-15","Learn how to use the DevSecOps platform to solve onboarding problems for new contributors.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099558/Blog/Hero%20Images/Blog/Hero%20Images/gitlabflatlogomap_gitlabflatlogomap.png_1750099558369.png",{},true,"/en-us/blog/how-we-use-gitlab-to-grow-open-source-communities",{"noIndex":776,"title":5,"description":773},"how-we-use-gitlab-to-grow-open-source-communities","en-us/blog/how-we-use-gitlab-to-grow-open-source-communities",[785,786,787],"open source","community","product","BlogPost","ec09N7xeOpn_2jSPLd92U3hLO5Nq0fbdWBi-OfdOQUc",{"logo":791,"freeTrial":796,"sales":801,"login":806,"items":811,"search":1137,"minimal":1168,"duo":1187,"switchNav":1196,"pricingDeployment":1207},{"config":792},{"href":793,"dataGaName":794,"dataGaLocation":795},"/","gitlab logo","header",{"text":797,"config":798},"Get free trial",{"href":799,"dataGaName":800,"dataGaLocation":795},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":802,"config":803},"Request a demo",{"href":804,"dataGaName":805,"dataGaLocation":795},"/sales/?contact-topic=request-demo","sales",{"text":807,"config":808},"Sign in",{"href":809,"dataGaName":810,"dataGaLocation":795},"https://gitlab.com/users/sign_in/","sign in",[812,841,941,946,1059,1115],{"text":813,"config":814,"menu":816},"Platform",{"dataNavLevelOne":815},"platform",{"type":817,"columns":818},"cards",[819,825,833],{"title":813,"description":820,"link":821},"The intelligent orchestration platform for DevSecOps",{"text":822,"config":823},"Explore our Platform",{"href":824,"dataGaName":815,"dataGaLocation":795},"/platform/",{"title":826,"description":827,"link":828},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":829,"config":830},"Meet GitLab Duo",{"href":831,"dataGaName":832,"dataGaLocation":795},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":834,"description":835,"link":836},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":837,"config":838},"Learn more",{"href":839,"dataGaName":840,"dataGaLocation":795},"/why-gitlab/","why gitlab",{"text":842,"left":779,"config":843,"menu":845},"Product",{"dataNavLevelOne":844},"solutions",{"type":846,"link":847,"columns":851,"feature":920},"lists",{"text":848,"config":849},"View all Solutions",{"href":850,"dataGaName":844,"dataGaLocation":795},"/solutions/",[852,876,899],{"title":853,"description":854,"link":855,"items":860},"Automation","CI/CD and automation to accelerate deployment",{"config":856},{"icon":857,"href":858,"dataGaName":859,"dataGaLocation":795},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[861,865,868,872],{"text":862,"config":863},"CI/CD",{"href":864,"dataGaLocation":795,"dataGaName":862},"/solutions/continuous-integration/",{"text":826,"config":866},{"href":831,"dataGaLocation":795,"dataGaName":867},"gitlab duo agent platform - product menu",{"text":869,"config":870},"Source Code Management",{"href":871,"dataGaLocation":795,"dataGaName":869},"/solutions/source-code-management/",{"text":873,"config":874},"Automated Software Delivery",{"href":858,"dataGaLocation":795,"dataGaName":875},"Automated software delivery",{"title":877,"description":878,"link":879,"items":884},"Security","Deliver code faster without compromising security",{"config":880},{"href":881,"dataGaName":882,"dataGaLocation":795,"icon":883},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[885,889,894],{"text":886,"config":887},"Application Security Testing",{"href":881,"dataGaName":888,"dataGaLocation":795},"Application security testing",{"text":890,"config":891},"Software Supply Chain Security",{"href":892,"dataGaLocation":795,"dataGaName":893},"/solutions/supply-chain/","Software supply chain security",{"text":895,"config":896},"Software Compliance",{"href":897,"dataGaName":898,"dataGaLocation":795},"/solutions/software-compliance/","software compliance",{"title":900,"link":901,"items":906},"Measurement",{"config":902},{"icon":903,"href":904,"dataGaName":905,"dataGaLocation":795},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[907,911,915],{"text":908,"config":909},"Visibility & Measurement",{"href":904,"dataGaLocation":795,"dataGaName":910},"Visibility and Measurement",{"text":912,"config":913},"Value Stream Management",{"href":914,"dataGaLocation":795,"dataGaName":912},"/solutions/value-stream-management/",{"text":916,"config":917},"Analytics & Insights",{"href":918,"dataGaLocation":795,"dataGaName":919},"/solutions/analytics-and-insights/","Analytics and insights",{"title":921,"type":846,"items":922},"GitLab for",[923,929,935],{"text":924,"config":925},"Enterprise",{"icon":926,"href":927,"dataGaLocation":795,"dataGaName":928},"Building","/enterprise/","enterprise",{"text":930,"config":931},"Small Business",{"icon":932,"href":933,"dataGaLocation":795,"dataGaName":934},"Work","/small-business/","small business",{"text":936,"config":937},"Public Sector",{"icon":938,"href":939,"dataGaLocation":795,"dataGaName":940},"Organization","/solutions/public-sector/","public sector",{"text":942,"config":943},"Pricing",{"href":944,"dataGaName":945,"dataGaLocation":795,"dataNavLevelOne":945},"/pricing/","pricing",{"text":947,"config":948,"menu":950},"Resources",{"dataNavLevelOne":949},"resources",{"type":846,"link":951,"columns":955,"feature":1048},{"text":952,"config":953},"View all resources",{"href":954,"dataGaName":949,"dataGaLocation":795},"/resources/",[956,989,1016],{"title":957,"items":958},"Getting started",[959,964,969,974,979,984],{"text":960,"config":961},"Install",{"href":962,"dataGaName":963,"dataGaLocation":795},"/install/","install",{"text":965,"config":966},"Quick start guides",{"href":967,"dataGaName":968,"dataGaLocation":795},"/get-started/","quick setup checklists",{"text":970,"config":971},"Learn",{"href":972,"dataGaLocation":795,"dataGaName":973},"https://university.gitlab.com/","learn",{"text":975,"config":976},"Product documentation",{"href":977,"dataGaName":978,"dataGaLocation":795},"https://docs.gitlab.com/","product documentation",{"text":980,"config":981},"Best practice videos",{"href":982,"dataGaName":983,"dataGaLocation":795},"/getting-started-videos/","best practice videos",{"text":985,"config":986},"Integrations",{"href":987,"dataGaName":988,"dataGaLocation":795},"/integrations/","integrations",{"title":990,"items":991},"Discover",[992,997,1002,1007,1011],{"text":993,"config":994},"Customer success stories",{"href":995,"dataGaName":996,"dataGaLocation":795},"/customers/","customer success stories",{"text":998,"config":999},"Blog",{"href":1000,"dataGaName":1001,"dataGaLocation":795},"/blog/","blog",{"text":1003,"config":1004},"Demo Hub",{"href":1005,"dataGaName":1006,"dataGaLocation":795},"/demo-hub/","demo hub",{"text":1008,"config":1009},"The Source",{"href":1010,"dataGaName":1001,"dataGaLocation":795},"/the-source/",{"text":1012,"config":1013},"Remote",{"href":1014,"dataGaName":1015,"dataGaLocation":795},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1017,"items":1018},"Connect",[1019,1024,1029,1033,1038,1043],{"text":1020,"config":1021},"GitLab Services",{"href":1022,"dataGaName":1023,"dataGaLocation":795},"/services/","services",{"text":1025,"config":1026},"Contribute",{"href":1027,"dataGaName":1028,"dataGaLocation":795},"https://contributors.gitlab.com","contribute",{"text":1030,"config":1031},"Community",{"href":1032,"dataGaName":786,"dataGaLocation":795},"/community/",{"text":1034,"config":1035},"Forum",{"href":1036,"dataGaName":1037,"dataGaLocation":795},"https://forum.gitlab.com/","forum",{"text":1039,"config":1040},"Events",{"href":1041,"dataGaName":1042,"dataGaLocation":795},"/events/","events",{"text":1044,"config":1045},"Partners",{"href":1046,"dataGaName":1047,"dataGaLocation":795},"/partners/","partners",{"config":1049,"title":1052,"text":1053,"link":1054},{"background":1050,"textColor":1051},"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":1055,"config":1056},"Read the latest",{"href":1057,"dataGaName":1058,"dataGaLocation":795},"/whats-new/","whats new",{"text":1060,"config":1061,"menu":1063},"Company",{"dataNavLevelOne":1062},"company",{"type":846,"columns":1064},[1065],{"items":1066},[1067,1072,1078,1080,1085,1090,1095,1100,1105,1110],{"text":1068,"config":1069},"About",{"href":1070,"dataGaName":1071,"dataGaLocation":795},"/company/","about",{"text":1073,"config":1074,"footerGa":1077},"Jobs",{"href":1075,"dataGaName":1076,"dataGaLocation":795},"/jobs/","jobs",{"dataGaName":1076},{"text":1039,"config":1079},{"href":1041,"dataGaName":1042,"dataGaLocation":795},{"text":1081,"config":1082},"Leadership",{"href":1083,"dataGaName":1084,"dataGaLocation":795},"/company/team/e-group/","leadership",{"text":1086,"config":1087},"Handbook",{"href":1088,"dataGaName":1089,"dataGaLocation":795},"https://handbook.gitlab.com/","handbook",{"text":1091,"config":1092},"Investor relations",{"href":1093,"dataGaName":1094,"dataGaLocation":795},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1096,"config":1097},"Trust Center",{"href":1098,"dataGaName":1099,"dataGaLocation":795},"/security/","trust center",{"text":1101,"config":1102},"AI Transparency Center",{"href":1103,"dataGaName":1104,"dataGaLocation":795},"/ai-transparency-center/","ai transparency center",{"text":1106,"config":1107},"Newsletter",{"href":1108,"dataGaName":1109,"dataGaLocation":795},"/company/contact/#contact-forms","newsletter",{"text":1111,"config":1112},"Press",{"href":1113,"dataGaName":1114,"dataGaLocation":795},"/press/","press",{"text":1116,"config":1117,"menu":1118},"Contact us",{"dataNavLevelOne":1062},{"type":846,"columns":1119},[1120],{"items":1121},[1122,1127,1132],{"text":1123,"config":1124},"Talk to sales",{"href":1125,"dataGaName":1126,"dataGaLocation":795},"/sales/","talk to sales",{"text":1128,"config":1129},"Support portal",{"href":1130,"dataGaName":1131,"dataGaLocation":795},"https://support.gitlab.com/hc/en-us","support portal",{"text":1133,"config":1134},"Customer portal",{"href":1135,"dataGaName":1136,"dataGaLocation":795},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1138,"login":1139,"suggestions":1146},"Close",{"text":1140,"link":1141},"To search repositories and projects, login to",{"text":1142,"config":1143},"gitlab.com",{"href":809,"dataGaName":1144,"dataGaLocation":1145},"search login","search",{"text":1147,"default":1148},"Suggestions",[1149,1151,1155,1157,1161,1165],{"text":826,"config":1150},{"href":831,"dataGaName":826,"dataGaLocation":1145},{"text":1152,"config":1153},"Code Suggestions (AI)",{"href":1154,"dataGaName":1152,"dataGaLocation":1145},"/solutions/code-suggestions/",{"text":862,"config":1156},{"href":864,"dataGaName":862,"dataGaLocation":1145},{"text":1158,"config":1159},"GitLab on AWS",{"href":1160,"dataGaName":1158,"dataGaLocation":1145},"/partners/technology-partners/aws/",{"text":1162,"config":1163},"GitLab on Google Cloud",{"href":1164,"dataGaName":1162,"dataGaLocation":1145},"/partners/technology-partners/google-cloud-platform/",{"text":1166,"config":1167},"Why GitLab?",{"href":839,"dataGaName":1166,"dataGaLocation":1145},{"freeTrial":1169,"mobileIcon":1174,"desktopIcon":1179,"secondaryButton":1182},{"text":1170,"config":1171},"Start free trial",{"href":1172,"dataGaName":800,"dataGaLocation":1173},"https://gitlab.com/-/trials/new/","nav",{"altText":1175,"config":1176},"Gitlab Icon",{"src":1177,"dataGaName":1178,"dataGaLocation":1173},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1175,"config":1180},{"src":1181,"dataGaName":1178,"dataGaLocation":1173},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1183,"config":1184},"Get Started",{"href":1185,"dataGaName":1186,"dataGaLocation":1173},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1188,"mobileIcon":1192,"desktopIcon":1194},{"text":1189,"config":1190},"Learn more about GitLab Duo",{"href":831,"dataGaName":1191,"dataGaLocation":1173},"gitlab duo",{"altText":1175,"config":1193},{"src":1177,"dataGaName":1178,"dataGaLocation":1173},{"altText":1175,"config":1195},{"src":1181,"dataGaName":1178,"dataGaLocation":1173},{"button":1197,"mobileIcon":1202,"desktopIcon":1204},{"text":1198,"config":1199},"/switch",{"href":1200,"dataGaName":1201,"dataGaLocation":1173},"#contact","switch",{"altText":1175,"config":1203},{"src":1177,"dataGaName":1178,"dataGaLocation":1173},{"altText":1175,"config":1205},{"src":1206,"dataGaName":1178,"dataGaLocation":1173},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1208,"mobileIcon":1213,"desktopIcon":1215},{"text":1209,"config":1210},"Back to pricing",{"href":944,"dataGaName":1211,"dataGaLocation":1173,"icon":1212},"back to pricing","GoBack",{"altText":1175,"config":1214},{"src":1177,"dataGaName":1178,"dataGaLocation":1173},{"altText":1175,"config":1216},{"src":1181,"dataGaName":1178,"dataGaLocation":1173},{"title":1218,"titleMobile":1219,"button":1220,"config":1225},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":837,"config":1221},{"href":1222,"dataGaName":1223,"dataGaLocation":1224},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1226,"disabled":776},"release",{"data":1228},{"text":1229,"source":1230,"edit":1236,"contribute":1241,"config":1246,"items":1251,"minimal":1461},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1231,"config":1232},"View page source",{"href":1233,"dataGaName":1234,"dataGaLocation":1235},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1237,"config":1238},"Edit this page",{"href":1239,"dataGaName":1240,"dataGaLocation":1235},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1242,"config":1243},"Please contribute",{"href":1244,"dataGaName":1245,"dataGaLocation":1235},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1247,"facebook":1248,"youtube":1249,"linkedin":1250},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1252,1299,1353,1397,1429],{"title":942,"links":1253,"subMenu":1268},[1254,1258,1263],{"text":1255,"config":1256},"View plans",{"href":944,"dataGaName":1257,"dataGaLocation":1235},"view plans",{"text":1259,"config":1260},"Why Premium?",{"href":1261,"dataGaName":1262,"dataGaLocation":1235},"/pricing/premium/","why premium",{"text":1264,"config":1265},"Why Ultimate?",{"href":1266,"dataGaName":1267,"dataGaLocation":1235},"/pricing/ultimate/","why ultimate",[1269],{"title":1270,"links":1271},"Contact Us",[1272,1275,1277,1279,1284,1289,1294],{"text":1273,"config":1274},"Contact sales",{"href":1125,"dataGaName":805,"dataGaLocation":1235},{"text":1128,"config":1276},{"href":1130,"dataGaName":1131,"dataGaLocation":1235},{"text":1133,"config":1278},{"href":1135,"dataGaName":1136,"dataGaLocation":1235},{"text":1280,"config":1281},"Status",{"href":1282,"dataGaName":1283,"dataGaLocation":1235},"https://status.gitlab.com/","status",{"text":1285,"config":1286},"Terms of use",{"href":1287,"dataGaName":1288,"dataGaLocation":1235},"/terms/","terms of use",{"text":1290,"config":1291},"Privacy statement",{"href":1292,"dataGaName":1293,"dataGaLocation":1235},"/privacy/","privacy statement",{"text":1295,"config":1296},"Cookie preferences",{"dataGaName":1297,"dataGaLocation":1235,"id":1298,"isOneTrustButton":779},"cookie preferences","ot-sdk-btn",{"title":842,"links":1300,"subMenu":1309},[1301,1305],{"text":1302,"config":1303},"DevSecOps platform",{"href":824,"dataGaName":1304,"dataGaLocation":1235},"devsecops platform",{"text":1306,"config":1307},"AI-Assisted Development",{"href":831,"dataGaName":1308,"dataGaLocation":1235},"ai-assisted development",[1310],{"title":1311,"links":1312},"Topics",[1313,1318,1323,1328,1333,1338,1343,1348],{"text":1314,"config":1315},"CICD",{"href":1316,"dataGaName":1317,"dataGaLocation":1235},"/topics/ci-cd/","cicd",{"text":1319,"config":1320},"GitOps",{"href":1321,"dataGaName":1322,"dataGaLocation":1235},"/topics/gitops/","gitops",{"text":1324,"config":1325},"DevOps",{"href":1326,"dataGaName":1327,"dataGaLocation":1235},"/topics/devops/","devops",{"text":1329,"config":1330},"Version Control",{"href":1331,"dataGaName":1332,"dataGaLocation":1235},"/topics/version-control/","version control",{"text":1334,"config":1335},"DevSecOps",{"href":1336,"dataGaName":1337,"dataGaLocation":1235},"/topics/devsecops/","devsecops",{"text":1339,"config":1340},"Cloud Native",{"href":1341,"dataGaName":1342,"dataGaLocation":1235},"/topics/cloud-native/","cloud native",{"text":1344,"config":1345},"AI for Coding",{"href":1346,"dataGaName":1347,"dataGaLocation":1235},"/topics/devops/ai-for-coding/","ai for coding",{"text":1349,"config":1350},"Agentic AI",{"href":1351,"dataGaName":1352,"dataGaLocation":1235},"/topics/agentic-ai/","agentic ai",{"title":1354,"links":1355},"Solutions",[1356,1358,1360,1365,1369,1372,1376,1379,1381,1384,1387,1392],{"text":886,"config":1357},{"href":881,"dataGaName":886,"dataGaLocation":1235},{"text":875,"config":1359},{"href":858,"dataGaName":859,"dataGaLocation":1235},{"text":1361,"config":1362},"Agile development",{"href":1363,"dataGaName":1364,"dataGaLocation":1235},"/solutions/agile-delivery/","agile delivery",{"text":1366,"config":1367},"SCM",{"href":871,"dataGaName":1368,"dataGaLocation":1235},"source code management",{"text":1314,"config":1370},{"href":864,"dataGaName":1371,"dataGaLocation":1235},"continuous integration & delivery",{"text":1373,"config":1374},"Value stream management",{"href":914,"dataGaName":1375,"dataGaLocation":1235},"value stream management",{"text":1319,"config":1377},{"href":1378,"dataGaName":1322,"dataGaLocation":1235},"/solutions/gitops/",{"text":924,"config":1380},{"href":927,"dataGaName":928,"dataGaLocation":1235},{"text":1382,"config":1383},"Small business",{"href":933,"dataGaName":934,"dataGaLocation":1235},{"text":1385,"config":1386},"Public sector",{"href":939,"dataGaName":940,"dataGaLocation":1235},{"text":1388,"config":1389},"Education",{"href":1390,"dataGaName":1391,"dataGaLocation":1235},"/solutions/education/","education",{"text":1393,"config":1394},"Financial services",{"href":1395,"dataGaName":1396,"dataGaLocation":1235},"/solutions/finance/","financial services",{"title":947,"links":1398},[1399,1401,1403,1405,1408,1410,1413,1415,1417,1419,1421,1423,1425,1427],{"text":960,"config":1400},{"href":962,"dataGaName":963,"dataGaLocation":1235},{"text":965,"config":1402},{"href":967,"dataGaName":968,"dataGaLocation":1235},{"text":970,"config":1404},{"href":972,"dataGaName":973,"dataGaLocation":1235},{"text":975,"config":1406},{"href":977,"dataGaName":1407,"dataGaLocation":1235},"docs",{"text":998,"config":1409},{"href":1000,"dataGaName":1001,"dataGaLocation":1235},{"text":1411,"config":1412},"What's new",{"href":1057,"dataGaName":1058,"dataGaLocation":1235},{"text":993,"config":1414},{"href":995,"dataGaName":996,"dataGaLocation":1235},{"text":1012,"config":1416},{"href":1014,"dataGaName":1015,"dataGaLocation":1235},{"text":1020,"config":1418},{"href":1022,"dataGaName":1023,"dataGaLocation":1235},{"text":1025,"config":1420},{"href":1027,"dataGaName":1028,"dataGaLocation":1235},{"text":1030,"config":1422},{"href":1032,"dataGaName":786,"dataGaLocation":1235},{"text":1034,"config":1424},{"href":1036,"dataGaName":1037,"dataGaLocation":1235},{"text":1039,"config":1426},{"href":1041,"dataGaName":1042,"dataGaLocation":1235},{"text":1044,"config":1428},{"href":1046,"dataGaName":1047,"dataGaLocation":1235},{"title":1060,"links":1430},[1431,1433,1435,1437,1439,1441,1445,1450,1452,1454,1456],{"text":1068,"config":1432},{"href":1070,"dataGaName":1062,"dataGaLocation":1235},{"text":1073,"config":1434},{"href":1075,"dataGaName":1076,"dataGaLocation":1235},{"text":1081,"config":1436},{"href":1083,"dataGaName":1084,"dataGaLocation":1235},{"text":1086,"config":1438},{"href":1088,"dataGaName":1089,"dataGaLocation":1235},{"text":1091,"config":1440},{"href":1093,"dataGaName":1094,"dataGaLocation":1235},{"text":1442,"config":1443},"Sustainability",{"href":1444,"dataGaName":1442,"dataGaLocation":1235},"/sustainability/",{"text":1446,"config":1447},"Diversity, inclusion and belonging (DIB)",{"href":1448,"dataGaName":1449,"dataGaLocation":1235},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1096,"config":1451},{"href":1098,"dataGaName":1099,"dataGaLocation":1235},{"text":1106,"config":1453},{"href":1108,"dataGaName":1109,"dataGaLocation":1235},{"text":1111,"config":1455},{"href":1113,"dataGaName":1114,"dataGaLocation":1235},{"text":1457,"config":1458},"Modern Slavery Transparency Statement",{"href":1459,"dataGaName":1460,"dataGaLocation":1235},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1462},[1463,1466,1469],{"text":1464,"config":1465},"Terms",{"href":1287,"dataGaName":1288,"dataGaLocation":1235},{"text":1467,"config":1468},"Cookies",{"dataGaName":1297,"dataGaLocation":1235,"id":1298,"isOneTrustButton":779},{"text":1470,"config":1471},"Privacy",{"href":1292,"dataGaName":1293,"dataGaLocation":1235},[1473,1487],{"id":1474,"title":7,"body":775,"config":1475,"content":1477,"description":775,"extension":1481,"meta":1482,"navigation":779,"path":1483,"seo":1484,"stem":1485,"__hash__":1486},"blogAuthors/en-us/blog/authors/lee-tickett.yml",{"template":1476},"BlogAuthor",{"name":7,"config":1478},{"headshot":1479,"ctfId":1480},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752592356/ibeixykxeiey9aiebylt.png","leetickett","yml",{},"/en-us/blog/authors/lee-tickett",{},"en-us/blog/authors/lee-tickett","pjnpw0lMQmdffRTIj30HBAHqTEvadkz2cw3rJyXrG5I",{"id":1488,"title":8,"body":775,"config":1489,"content":1491,"description":775,"extension":1481,"meta":1494,"navigation":779,"path":1495,"seo":1496,"stem":1497,"__hash__":1498},"blogAuthors/en-us/blog/authors/daniel-murphy.yml",{"template":1476,"gitlabHandle":1490},"daniel-murphy",{"name":8,"config":1492},{"headshot":1493},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752519199/fabr89uottv7n6r2jldp.png",{},"/en-us/blog/authors/daniel-murphy",{},"en-us/blog/authors/daniel-murphy","qJWhsvh9LVdEz9CQLrXqn24UzGzlgEfS1_fV-8C9O9I",[1500,1508,1516],{"title":1501,"description":1502,"heroImage":1503,"category":771,"date":1504,"authors":1505,"slug":1507,"externalUrl":775},"What's new in Git 2.55.0?","Learn about the new features and changes in Git 2.55, including a new git-history(1) fixup command, an fsmonitor daemon for Linux, pushing to remote groups, and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782732487/ztwgrvlolpifo01vj8qc.png","2026-06-29",[1506],"Toon Claes","whats-new-in-git-2-55-0",{"title":1509,"description":1510,"heroImage":1511,"category":771,"date":1512,"authors":1513,"slug":1515,"externalUrl":775},"GitLab AI Hackathon 2026: Meet the winners","Nearly 7,000 developers built 600+ AI agents and flows on GitLab Duo Agent Platform. Find out who won and what they created.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[1514],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":1517,"description":1518,"heroImage":1519,"category":771,"date":1520,"authors":1521,"slug":1523,"externalUrl":775},"What’s new in Git 2.54.0?","Learn about release contributions, including new repository maintenance, a new command to edit commit history, a replacement for git-sizer(1), and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782734716/ztwgrvlolpifo01vj8qc.png","2026-04-20",[1522],"Patrick Steinhardt","whats-new-in-git-2-54-0",{"promotions":1525},[1526,1540,1551,1563],{"id":1527,"categories":1528,"header":1530,"text":1531,"button":1532,"image":1537},"ai-modernization",[1529],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1533,"config":1534},"Get your AI maturity score",{"href":1535,"dataGaName":1536,"dataGaLocation":1001},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1538},{"src":1539},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1541,"categories":1542,"header":1543,"text":1531,"button":1544,"image":1548},"devops-modernization",[787,1337],"Are you just managing tools or shipping innovation?",{"text":1545,"config":1546},"Get your DevOps maturity score",{"href":1547,"dataGaName":1536,"dataGaLocation":1001},"/assessments/devops-modernization-assessment/",{"config":1549},{"src":1550},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1552,"categories":1553,"header":1555,"text":1531,"button":1556,"image":1560},"security-modernization",[1554],"security","Are you trading speed for security?",{"text":1557,"config":1558},"Get your security maturity score",{"href":1559,"dataGaName":1536,"dataGaLocation":1001},"/assessments/security-modernization-assessment/",{"config":1561},{"src":1562},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1564,"paths":1565,"header":1568,"text":1569,"button":1570,"image":1575},"github-azure-migration",[1566,1567],"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":1571,"config":1572},"See how GitLab compares to GitHub",{"href":1573,"dataGaName":1574,"dataGaLocation":1001},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1576},{"src":1550},{"header":1578,"blurb":1579,"button":1580,"secondaryButton":1585},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1581,"config":1582},"Get your free trial",{"href":1583,"dataGaName":800,"dataGaLocation":1584},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1273,"config":1586},{"href":1125,"dataGaName":805,"dataGaLocation":1584},1786803752177]