[{"data":1,"prerenderedAt":1108},["ShallowReactive",2],{"/blog/how-we-work-to-detect-and-mitigate-spam":3,"navigation-en-us":311,"banner-en-us":738,"footer-en-us":748,"blog-post-authors-en-us-Charl de Wit|Greg Myers":993,"blog-related-posts-en-us-how-we-work-to-detect-and-mitigate-spam":1021,"blog-promotions-en-us":1045,"next-steps-en-us":1098},{"id":4,"title":5,"authors":6,"body":9,"category":291,"date":292,"description":293,"extension":294,"externalUrl":295,"faq":295,"featured":296,"heroImage":297,"meta":298,"navigation":299,"path":300,"seo":301,"slug":305,"stem":306,"tags":307,"template":309,"updatedDate":295,"__hash__":310},"blogPosts/en-us/blog/how-we-work-to-detect-and-mitigate-spam.md","How we work to detect and mitigate Spam on GitLab.com and beyond",[7,8],"Charl de Wit","Greg Myers",{"type":10,"value":11,"toc":272},"minimark",[12,16,21,37,42,56,60,78,82,92,96,104,108,113,120,136,139,143,150,155,159,167,171,188,192,212,216,236,240,258],[13,14,15],"p",{},"We know spam can be a big problem.  Beyond being annoying, abusive behavior, we know it affects workflows and performance and puts a strain on rate limits and brand reputation.  We’re here to help.  Our security team works around the clock to actively detect and mitigate spam for GitLab.com users and our product utilizes filters, captcha and user-defined configuration to help self-managed instances prevent and mitigate spam and abuse.  But, there’s always more that can be done.  Below, we detail the work we do to protect .com users, offer up tips and best practices for self-managed users, and talk about some new automation and tooling we’re exploring that will help all users prevent spam.",[17,18,20],"h2",{"id":19},"how-we-work-to-detect-and-mitigate-spam-on-gitlabcom","How we work to detect and mitigate spam on GitLab.com",[13,22,23,24,30,31,36],{},"Our ",[25,26,29],"a",{"href":27,"rel":28},"https://handbook.gitlab.com/handbook/security/security-operations/trustandsafety/",[],"Trust and Safety team"," works to investigate and protect against the malicious use of GitLab.com and it’s associated features and tools with the goal of making our product safer for our customers and the wider community. One of their focus areas surrounds the detection and mitigation of ",[25,32,35],{"href":33,"rel":34},"https://handbook.gitlab.com/handbook/security/security-operations/trustandsafety/#what-is-abuse",[],"abusive activity"," on GitLab.com.",[38,39,41],"h3",{"id":40},"what-is-abuse","What is abuse?",[13,43,44,45,49,50,55],{},"We define abuse as the intentional misuse of GitLab products/services to cause harm or for personal gain which includes the distribution of malware, spam, and prohibited content.  This activity is covered under Section 3 of the ",[25,46,48],{"href":47},"/terms/#gitlab-com","GitLab website Terms of Use",". You can learn more about how we ",[25,51,54],{"href":52,"rel":53},"https://handbook.gitlab.com/handbook/security/security-operations/trustandsafety/#examples-of-common-forms-of-abuse-include-but-are-not-limited-to",[],"classify abuse"," in our handbook.",[38,57,59],{"id":58},"how-to-report-abuse-as-a-gitlabcom-user","How to report abuse as a GitLab.com user",[13,61,62,63,67,68,73,74,77],{},"Users on GitLab.com can report abuse via the ",[64,65,66],"code",{},"Report Abuse"," ",[25,69,72],{"href":70,"rel":71},"https://docs.gitlab.com/user/report_abuse/",[],"button"," while logged in. Alternately, users can email abuse reports to ",[64,75,76],{},"abuse@gitlab.com",".  Be sure to include any relevant information details in the issue or email so we can quickly and accurately understand the problem.",[17,79,81],{"id":80},"self-managed-customers-preventing-detecting-and-mitigating-spam","Self-managed customers: preventing, detecting and mitigating spam",[13,83,84,85],{},"GitLab uses Akismet Spam filter to check for spam when users create issues and reCaptcha as an added level of spam and abuse prevention.\nThis tooling helps respond to the symptoms of abuse, but the root of the problem remains: malicious actors register new accounts, or take over existing accounts and then use the accounts to spam and abuse instances and projects.\n",[86,87,88],"em",{},[89,90,91],"strong",{},"So, what more can you self-managed Admins do to prevent and mitigate spam?",[38,93,95],{"id":94},"_2fa","2FA",[13,97,98,99,103],{},"Hosted instances of GitLab can reduce spam by making it more difficult for bots to automate account creation or takeover. Requiring ",[25,100,95],{"href":101,"rel":102},"https://docs.gitlab.com/user/profile/account/two_factor_authentication/",[]," for all users is one way to prevent legitimate users from having their accounts taken over and used to create spam.",[38,105,107],{"id":106},"authentication-restrictions","Authentication restrictions",[109,110,112],"h4",{"id":111},"sign-up-restrictions","Sign-up restrictions",[13,114,115,119],{},[25,116,112],{"href":117,"rel":118},"https://docs.gitlab.com/administration/settings/sign_up_restrictions/",[]," will allow self-managed Admins to:",[121,122,123,127,130,133],"ul",{},[124,125,126],"li",{},"Disable new sign-ups.",[124,128,129],{},"Require Admin approval for new sign-ups.",[124,131,132],{},"Require user email confirmation.",[124,134,135],{},"Denylist or allowlist email addresses belonging to specific domains.",[13,137,138],{},"In fact, for customers running public-facing GitLab instances, we highly recommend that you consider disabling new sign-ups if you do not expect or want public users to sign up for an account on your instance.",[109,140,142],{"id":141},"sign-in-restrictions","Sign in restrictions",[13,144,145,149],{},[25,146,142],{"href":147,"rel":148},"https://docs.gitlab.com/administration/settings/sign_in_restrictions/",[]," allow self-managed Admins to customize authentication restrictions for web interfaces as well as Git over HTTP(S). These settings will allow you to enforce: * Mandatory 2FA for new users; this makes it more difficult for bots to surpass and prevents legitimate users from getting pwned via single factor authentication + weak password combinations.",[121,151,152],{},[124,153,154],{},"Email confirmation on sign-up; making it more difficult for bots to register new spam accounts.\nWe know that spammers are humans (or humans running bots) and these configurations create additional work for illegitimate users with the intent to spam your instance; thus presenting a deterrent and making your instance a more difficult target.",[38,156,158],{"id":157},"harden-your-instance","Harden your instance",[13,160,161,162,166],{},"Also, customizing your instance configuration can go a long way to discourage and reduce spam and abuse. This includes ",[25,163,165],{"href":164},"/blog/gitlab-instance-security-best-practices/#restricting-how-and-who","defining how users access your instance and who can have access",".",[38,168,170],{"id":169},"understand-how-abuse-is-reported-and-managed-by-self-managed-admins","Understand how abuse is reported and managed by self-managed Admins",[13,172,173,174,178,179,183,184,166],{},"It’s also key to understand how users can ",[25,175,177],{"href":70,"rel":176},[],"report abuse from other GitLab users to GitLab self-managed Administrators",", the ",[25,180,182],{"href":70,"rel":181},[],"actions that self-managed Admins can take against abusers"," and how ",[25,185,187],{"href":70,"rel":186},[],"abuse reports are managed and resolved by Admins",[38,189,191],{"id":190},"rate-limits","Rate limits",[13,193,194,195,200,201,206,207,166],{},"Finally, if you’re in the midst of spam abuse you can impose ",[25,196,199],{"href":197,"rel":198},"https://docs.gitlab.com/security/rate_limits/",[],"rate limits"," to help respond to the increased loads. You can also ",[25,202,205],{"href":203,"rel":204},"https://docs.gitlab.com/administration/settings/rate_limit_on_issues_creation/",[],"limit rates on issue creation"," and impose ",[25,208,211],{"href":209,"rel":210},"https://docs.gitlab.com/administration/settings/user_and_ip_rate_limits/",[],"rate limits on user and IPs",[17,213,215],{"id":214},"whats-next-in-spam-and-abuse-prevention-and-detection","What’s next in spam and abuse prevention and detection",[13,217,218,219,224,225,230,231,166],{},"We continue to look for new ways to prevent, detect and mitigate abuse on GitLab.com and within our product.  We are ",[25,220,223],{"href":221,"rel":222},"https://gitlab.com/gitlab-org/gitlab/-/issues/273480",[],"exploring alternate options for captcha"," to improve user experience and ",[25,226,229],{"href":227,"rel":228},"https://gitlab.com/gitlab-org/gitlab/-/issues/273618",[],"options to prevent bots posting URLs followed by crawlers"," to prevent spam.  In addition, our security team is in the process of developing new automation to detect and prevent the creation of spam and are aiming to begin testing a first iteration on GitLab.com within the next 3 months. If successful, this is something we’ll look to incorporate into the product so all customers can benefit.  For current, working product improvements to detect and mitigate spam, see our ",[25,232,235],{"href":233,"rel":234},"https://gitlab.com/gitlab-org/gitlab/-/merge_requests?scope=all&utf8=%E2%9C%93&state=merged&label_name%5B%5D=spam%20fighting",[],"active merge requests",[38,237,239],{"id":238},"suggestions-and-feature-requests","Suggestions and feature requests",[13,241,242,243,246,247,252,253,166],{},"If you have any suggestions or requests to improve abuse prevention on GitLab CE and EE, feel free to create a ",[89,244,245],{},"feature proposal"," issue from the provided templates in the ",[25,248,251],{"href":249,"rel":250},"https://gitlab.com/gitlab-org/gitlab/-/issues",[],"GitLab Project"," and add the ~\"Abuse Prevention\" label. For more information on how to contact our Trust & Safety Team, see our ",[25,254,257],{"href":255,"rel":256},"https://handbook.gitlab.com/handbook/security/security-operations/trustandsafety/#contact-us",[],"handbook",[13,259,260,261,266,267,166],{},"Photo by ",[25,262,265],{"href":263,"rel":264},"https://unsplash.com/@ranurte",[],"Ranurte"," from ",[25,268,271],{"href":269,"rel":270},"https://www.unsplash.com",[],"Unsplash",{"title":273,"searchDepth":274,"depth":274,"links":275},"",2,[276,281,288],{"id":19,"depth":274,"text":20,"children":277},[278,280],{"id":40,"depth":279,"text":41},3,{"id":58,"depth":279,"text":59},{"id":80,"depth":274,"text":81,"children":282},[283,284,285,286,287],{"id":94,"depth":279,"text":95},{"id":106,"depth":279,"text":107},{"id":157,"depth":279,"text":158},{"id":169,"depth":279,"text":170},{"id":190,"depth":279,"text":191},{"id":214,"depth":274,"text":215,"children":289},[290],{"id":238,"depth":279,"text":239},"unfiltered","2020-10-29","Working to fight spam and abuse can be a full time job.  Here's how we do that for gitlab.com and some tips for self-managed users.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667172/Blog/Hero%20Images/ranurte-unsplash.jpg",{},true,"/en-us/blog/how-we-work-to-detect-and-mitigate-spam",{"title":5,"description":293,"ogTitle":5,"ogDescription":293,"noIndex":296,"ogImage":297,"ogUrl":302,"ogSiteName":303,"ogType":304,"canonicalUrls":302},"https://about.gitlab.com/blog/how-we-work-to-detect-and-mitigate-spam","https://about.gitlab.com","article","how-we-work-to-detect-and-mitigate-spam","en-us/blog/how-we-work-to-detect-and-mitigate-spam",[308],"security","BlogPost","4WWpPIHd4wkJhCPzoMiDPkkegQG1IfbgZaGWN9dp8nY",{"logo":312,"freeTrial":317,"sales":322,"login":327,"items":332,"search":658,"minimal":689,"duo":708,"switchNav":717,"pricingDeployment":728},{"config":313},{"href":314,"dataGaName":315,"dataGaLocation":316},"/","gitlab logo","header",{"text":318,"config":319},"Get free trial",{"href":320,"dataGaName":321,"dataGaLocation":316},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":323,"config":324},"Request a demo",{"href":325,"dataGaName":326,"dataGaLocation":316},"/sales/?contact-topic=request-demo","sales",{"text":328,"config":329},"Sign in",{"href":330,"dataGaName":331,"dataGaLocation":316},"https://gitlab.com/users/sign_in/","sign in",[333,362,462,467,581,636],{"text":334,"config":335,"menu":337},"Platform",{"dataNavLevelOne":336},"platform",{"type":338,"columns":339},"cards",[340,346,354],{"title":334,"description":341,"link":342},"The intelligent orchestration platform for DevSecOps",{"text":343,"config":344},"Explore our Platform",{"href":345,"dataGaName":336,"dataGaLocation":316},"/platform/",{"title":347,"description":348,"link":349},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":350,"config":351},"Meet GitLab Duo",{"href":352,"dataGaName":353,"dataGaLocation":316},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":355,"description":356,"link":357},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":358,"config":359},"Learn more",{"href":360,"dataGaName":361,"dataGaLocation":316},"/why-gitlab/","why gitlab",{"text":363,"left":299,"config":364,"menu":366},"Product",{"dataNavLevelOne":365},"solutions",{"type":367,"link":368,"columns":372,"feature":441},"lists",{"text":369,"config":370},"View all Solutions",{"href":371,"dataGaName":365,"dataGaLocation":316},"/solutions/",[373,397,420],{"title":374,"description":375,"link":376,"items":381},"Automation","CI/CD and automation to accelerate deployment",{"config":377},{"icon":378,"href":379,"dataGaName":380,"dataGaLocation":316},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[382,386,389,393],{"text":383,"config":384},"CI/CD",{"href":385,"dataGaLocation":316,"dataGaName":383},"/solutions/continuous-integration/",{"text":347,"config":387},{"href":352,"dataGaLocation":316,"dataGaName":388},"gitlab duo agent platform - product menu",{"text":390,"config":391},"Source Code Management",{"href":392,"dataGaLocation":316,"dataGaName":390},"/solutions/source-code-management/",{"text":394,"config":395},"Automated Software Delivery",{"href":379,"dataGaLocation":316,"dataGaName":396},"Automated software delivery",{"title":398,"description":399,"link":400,"items":405},"Security","Deliver code faster without compromising security",{"config":401},{"href":402,"dataGaName":403,"dataGaLocation":316,"icon":404},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[406,410,415],{"text":407,"config":408},"Application Security Testing",{"href":402,"dataGaName":409,"dataGaLocation":316},"Application security testing",{"text":411,"config":412},"Software Supply Chain Security",{"href":413,"dataGaLocation":316,"dataGaName":414},"/solutions/supply-chain/","Software supply chain security",{"text":416,"config":417},"Software Compliance",{"href":418,"dataGaName":419,"dataGaLocation":316},"/solutions/software-compliance/","software compliance",{"title":421,"link":422,"items":427},"Measurement",{"config":423},{"icon":424,"href":425,"dataGaName":426,"dataGaLocation":316},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[428,432,436],{"text":429,"config":430},"Visibility & Measurement",{"href":425,"dataGaLocation":316,"dataGaName":431},"Visibility and Measurement",{"text":433,"config":434},"Value Stream Management",{"href":435,"dataGaLocation":316,"dataGaName":433},"/solutions/value-stream-management/",{"text":437,"config":438},"Analytics & Insights",{"href":439,"dataGaLocation":316,"dataGaName":440},"/solutions/analytics-and-insights/","Analytics and insights",{"title":442,"type":367,"items":443},"GitLab for",[444,450,456],{"text":445,"config":446},"Enterprise",{"icon":447,"href":448,"dataGaLocation":316,"dataGaName":449},"Building","/enterprise/","enterprise",{"text":451,"config":452},"Small Business",{"icon":453,"href":454,"dataGaLocation":316,"dataGaName":455},"Work","/small-business/","small business",{"text":457,"config":458},"Public Sector",{"icon":459,"href":460,"dataGaLocation":316,"dataGaName":461},"Organization","/solutions/public-sector/","public sector",{"text":463,"config":464},"Pricing",{"href":465,"dataGaName":466,"dataGaLocation":316,"dataNavLevelOne":466},"/pricing/","pricing",{"text":468,"config":469,"menu":471},"Resources",{"dataNavLevelOne":470},"resources",{"type":367,"link":472,"columns":476,"feature":570},{"text":473,"config":474},"View all resources",{"href":475,"dataGaName":470,"dataGaLocation":316},"/resources/",[477,510,537],{"title":478,"items":479},"Getting started",[480,485,490,495,500,505],{"text":481,"config":482},"Install",{"href":483,"dataGaName":484,"dataGaLocation":316},"/install/","install",{"text":486,"config":487},"Quick start guides",{"href":488,"dataGaName":489,"dataGaLocation":316},"/get-started/","quick setup checklists",{"text":491,"config":492},"Learn",{"href":493,"dataGaLocation":316,"dataGaName":494},"https://university.gitlab.com/","learn",{"text":496,"config":497},"Product documentation",{"href":498,"dataGaName":499,"dataGaLocation":316},"https://docs.gitlab.com/","product documentation",{"text":501,"config":502},"Best practice videos",{"href":503,"dataGaName":504,"dataGaLocation":316},"/getting-started-videos/","best practice videos",{"text":506,"config":507},"Integrations",{"href":508,"dataGaName":509,"dataGaLocation":316},"/integrations/","integrations",{"title":511,"items":512},"Discover",[513,518,523,528,532],{"text":514,"config":515},"Customer success stories",{"href":516,"dataGaName":517,"dataGaLocation":316},"/customers/","customer success stories",{"text":519,"config":520},"Blog",{"href":521,"dataGaName":522,"dataGaLocation":316},"/blog/","blog",{"text":524,"config":525},"Demo Hub",{"href":526,"dataGaName":527,"dataGaLocation":316},"/demo-hub/","demo hub",{"text":529,"config":530},"The Source",{"href":531,"dataGaName":522,"dataGaLocation":316},"/the-source/",{"text":533,"config":534},"Remote",{"href":535,"dataGaName":536,"dataGaLocation":316},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":538,"items":539},"Connect",[540,545,550,555,560,565],{"text":541,"config":542},"GitLab Services",{"href":543,"dataGaName":544,"dataGaLocation":316},"/services/","services",{"text":546,"config":547},"Contribute",{"href":548,"dataGaName":549,"dataGaLocation":316},"https://contributors.gitlab.com","contribute",{"text":551,"config":552},"Community",{"href":553,"dataGaName":554,"dataGaLocation":316},"/community/","community",{"text":556,"config":557},"Forum",{"href":558,"dataGaName":559,"dataGaLocation":316},"https://forum.gitlab.com/","forum",{"text":561,"config":562},"Events",{"href":563,"dataGaName":564,"dataGaLocation":316},"/events/","events",{"text":566,"config":567},"Partners",{"href":568,"dataGaName":569,"dataGaLocation":316},"/partners/","partners",{"config":571,"title":574,"text":575,"link":576},{"background":572,"textColor":573},"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":577,"config":578},"Read the latest",{"href":579,"dataGaName":580,"dataGaLocation":316},"/whats-new/","whats new",{"text":582,"config":583,"menu":585},"Company",{"dataNavLevelOne":584},"company",{"type":367,"columns":586},[587],{"items":588},[589,594,600,602,607,611,616,621,626,631],{"text":590,"config":591},"About",{"href":592,"dataGaName":593,"dataGaLocation":316},"/company/","about",{"text":595,"config":596,"footerGa":599},"Jobs",{"href":597,"dataGaName":598,"dataGaLocation":316},"/jobs/","jobs",{"dataGaName":598},{"text":561,"config":601},{"href":563,"dataGaName":564,"dataGaLocation":316},{"text":603,"config":604},"Leadership",{"href":605,"dataGaName":606,"dataGaLocation":316},"/company/team/e-group/","leadership",{"text":608,"config":609},"Handbook",{"href":610,"dataGaName":257,"dataGaLocation":316},"https://handbook.gitlab.com/",{"text":612,"config":613},"Investor relations",{"href":614,"dataGaName":615,"dataGaLocation":316},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":617,"config":618},"Trust Center",{"href":619,"dataGaName":620,"dataGaLocation":316},"/security/","trust center",{"text":622,"config":623},"AI Transparency Center",{"href":624,"dataGaName":625,"dataGaLocation":316},"/ai-transparency-center/","ai transparency center",{"text":627,"config":628},"Newsletter",{"href":629,"dataGaName":630,"dataGaLocation":316},"/company/contact/#contact-forms","newsletter",{"text":632,"config":633},"Press",{"href":634,"dataGaName":635,"dataGaLocation":316},"/press/","press",{"text":637,"config":638,"menu":639},"Contact us",{"dataNavLevelOne":584},{"type":367,"columns":640},[641],{"items":642},[643,648,653],{"text":644,"config":645},"Talk to sales",{"href":646,"dataGaName":647,"dataGaLocation":316},"/sales/","talk to sales",{"text":649,"config":650},"Support portal",{"href":651,"dataGaName":652,"dataGaLocation":316},"https://support.gitlab.com/hc/en-us","support portal",{"text":654,"config":655},"Customer portal",{"href":656,"dataGaName":657,"dataGaLocation":316},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":659,"login":660,"suggestions":667},"Close",{"text":661,"link":662},"To search repositories and projects, login to",{"text":663,"config":664},"gitlab.com",{"href":330,"dataGaName":665,"dataGaLocation":666},"search login","search",{"text":668,"default":669},"Suggestions",[670,672,676,678,682,686],{"text":347,"config":671},{"href":352,"dataGaName":347,"dataGaLocation":666},{"text":673,"config":674},"Code Suggestions (AI)",{"href":675,"dataGaName":673,"dataGaLocation":666},"/solutions/code-suggestions/",{"text":383,"config":677},{"href":385,"dataGaName":383,"dataGaLocation":666},{"text":679,"config":680},"GitLab on AWS",{"href":681,"dataGaName":679,"dataGaLocation":666},"/partners/technology-partners/aws/",{"text":683,"config":684},"GitLab on Google Cloud",{"href":685,"dataGaName":683,"dataGaLocation":666},"/partners/technology-partners/google-cloud-platform/",{"text":687,"config":688},"Why GitLab?",{"href":360,"dataGaName":687,"dataGaLocation":666},{"freeTrial":690,"mobileIcon":695,"desktopIcon":700,"secondaryButton":703},{"text":691,"config":692},"Start free trial",{"href":693,"dataGaName":321,"dataGaLocation":694},"https://gitlab.com/-/trials/new/","nav",{"altText":696,"config":697},"Gitlab Icon",{"src":698,"dataGaName":699,"dataGaLocation":694},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":696,"config":701},{"src":702,"dataGaName":699,"dataGaLocation":694},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":704,"config":705},"Get Started",{"href":706,"dataGaName":707,"dataGaLocation":694},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":709,"mobileIcon":713,"desktopIcon":715},{"text":710,"config":711},"Learn more about GitLab Duo",{"href":352,"dataGaName":712,"dataGaLocation":694},"gitlab duo",{"altText":696,"config":714},{"src":698,"dataGaName":699,"dataGaLocation":694},{"altText":696,"config":716},{"src":702,"dataGaName":699,"dataGaLocation":694},{"button":718,"mobileIcon":723,"desktopIcon":725},{"text":719,"config":720},"/switch",{"href":721,"dataGaName":722,"dataGaLocation":694},"#contact","switch",{"altText":696,"config":724},{"src":698,"dataGaName":699,"dataGaLocation":694},{"altText":696,"config":726},{"src":727,"dataGaName":699,"dataGaLocation":694},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":729,"mobileIcon":734,"desktopIcon":736},{"text":730,"config":731},"Back to pricing",{"href":465,"dataGaName":732,"dataGaLocation":694,"icon":733},"back to pricing","GoBack",{"altText":696,"config":735},{"src":698,"dataGaName":699,"dataGaLocation":694},{"altText":696,"config":737},{"src":702,"dataGaName":699,"dataGaLocation":694},{"title":739,"titleMobile":740,"button":741,"config":746},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":358,"config":742},{"href":743,"dataGaName":744,"dataGaLocation":745},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":747,"disabled":296},"release",{"data":749},{"text":750,"source":751,"edit":757,"contribute":762,"config":767,"items":772,"minimal":982},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":752,"config":753},"View page source",{"href":754,"dataGaName":755,"dataGaLocation":756},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":758,"config":759},"Edit this page",{"href":760,"dataGaName":761,"dataGaLocation":756},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":763,"config":764},"Please contribute",{"href":765,"dataGaName":766,"dataGaLocation":756},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":768,"facebook":769,"youtube":770,"linkedin":771},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[773,820,874,918,950],{"title":463,"links":774,"subMenu":789},[775,779,784],{"text":776,"config":777},"View plans",{"href":465,"dataGaName":778,"dataGaLocation":756},"view plans",{"text":780,"config":781},"Why Premium?",{"href":782,"dataGaName":783,"dataGaLocation":756},"/pricing/premium/","why premium",{"text":785,"config":786},"Why Ultimate?",{"href":787,"dataGaName":788,"dataGaLocation":756},"/pricing/ultimate/","why ultimate",[790],{"title":791,"links":792},"Contact Us",[793,796,798,800,805,810,815],{"text":794,"config":795},"Contact sales",{"href":646,"dataGaName":326,"dataGaLocation":756},{"text":649,"config":797},{"href":651,"dataGaName":652,"dataGaLocation":756},{"text":654,"config":799},{"href":656,"dataGaName":657,"dataGaLocation":756},{"text":801,"config":802},"Status",{"href":803,"dataGaName":804,"dataGaLocation":756},"https://status.gitlab.com/","status",{"text":806,"config":807},"Terms of use",{"href":808,"dataGaName":809,"dataGaLocation":756},"/terms/","terms of use",{"text":811,"config":812},"Privacy statement",{"href":813,"dataGaName":814,"dataGaLocation":756},"/privacy/","privacy statement",{"text":816,"config":817},"Cookie preferences",{"dataGaName":818,"dataGaLocation":756,"id":819,"isOneTrustButton":299},"cookie preferences","ot-sdk-btn",{"title":363,"links":821,"subMenu":830},[822,826],{"text":823,"config":824},"DevSecOps platform",{"href":345,"dataGaName":825,"dataGaLocation":756},"devsecops platform",{"text":827,"config":828},"AI-Assisted Development",{"href":352,"dataGaName":829,"dataGaLocation":756},"ai-assisted development",[831],{"title":832,"links":833},"Topics",[834,839,844,849,854,859,864,869],{"text":835,"config":836},"CICD",{"href":837,"dataGaName":838,"dataGaLocation":756},"/topics/ci-cd/","cicd",{"text":840,"config":841},"GitOps",{"href":842,"dataGaName":843,"dataGaLocation":756},"/topics/gitops/","gitops",{"text":845,"config":846},"DevOps",{"href":847,"dataGaName":848,"dataGaLocation":756},"/topics/devops/","devops",{"text":850,"config":851},"Version Control",{"href":852,"dataGaName":853,"dataGaLocation":756},"/topics/version-control/","version control",{"text":855,"config":856},"DevSecOps",{"href":857,"dataGaName":858,"dataGaLocation":756},"/topics/devsecops/","devsecops",{"text":860,"config":861},"Cloud Native",{"href":862,"dataGaName":863,"dataGaLocation":756},"/topics/cloud-native/","cloud native",{"text":865,"config":866},"AI for Coding",{"href":867,"dataGaName":868,"dataGaLocation":756},"/topics/devops/ai-for-coding/","ai for coding",{"text":870,"config":871},"Agentic AI",{"href":872,"dataGaName":873,"dataGaLocation":756},"/topics/agentic-ai/","agentic ai",{"title":875,"links":876},"Solutions",[877,879,881,886,890,893,897,900,902,905,908,913],{"text":407,"config":878},{"href":402,"dataGaName":407,"dataGaLocation":756},{"text":396,"config":880},{"href":379,"dataGaName":380,"dataGaLocation":756},{"text":882,"config":883},"Agile development",{"href":884,"dataGaName":885,"dataGaLocation":756},"/solutions/agile-delivery/","agile delivery",{"text":887,"config":888},"SCM",{"href":392,"dataGaName":889,"dataGaLocation":756},"source code management",{"text":835,"config":891},{"href":385,"dataGaName":892,"dataGaLocation":756},"continuous integration & delivery",{"text":894,"config":895},"Value stream management",{"href":435,"dataGaName":896,"dataGaLocation":756},"value stream management",{"text":840,"config":898},{"href":899,"dataGaName":843,"dataGaLocation":756},"/solutions/gitops/",{"text":445,"config":901},{"href":448,"dataGaName":449,"dataGaLocation":756},{"text":903,"config":904},"Small business",{"href":454,"dataGaName":455,"dataGaLocation":756},{"text":906,"config":907},"Public sector",{"href":460,"dataGaName":461,"dataGaLocation":756},{"text":909,"config":910},"Education",{"href":911,"dataGaName":912,"dataGaLocation":756},"/solutions/education/","education",{"text":914,"config":915},"Financial services",{"href":916,"dataGaName":917,"dataGaLocation":756},"/solutions/finance/","financial services",{"title":468,"links":919},[920,922,924,926,929,931,934,936,938,940,942,944,946,948],{"text":481,"config":921},{"href":483,"dataGaName":484,"dataGaLocation":756},{"text":486,"config":923},{"href":488,"dataGaName":489,"dataGaLocation":756},{"text":491,"config":925},{"href":493,"dataGaName":494,"dataGaLocation":756},{"text":496,"config":927},{"href":498,"dataGaName":928,"dataGaLocation":756},"docs",{"text":519,"config":930},{"href":521,"dataGaName":522,"dataGaLocation":756},{"text":932,"config":933},"What's new",{"href":579,"dataGaName":580,"dataGaLocation":756},{"text":514,"config":935},{"href":516,"dataGaName":517,"dataGaLocation":756},{"text":533,"config":937},{"href":535,"dataGaName":536,"dataGaLocation":756},{"text":541,"config":939},{"href":543,"dataGaName":544,"dataGaLocation":756},{"text":546,"config":941},{"href":548,"dataGaName":549,"dataGaLocation":756},{"text":551,"config":943},{"href":553,"dataGaName":554,"dataGaLocation":756},{"text":556,"config":945},{"href":558,"dataGaName":559,"dataGaLocation":756},{"text":561,"config":947},{"href":563,"dataGaName":564,"dataGaLocation":756},{"text":566,"config":949},{"href":568,"dataGaName":569,"dataGaLocation":756},{"title":582,"links":951},[952,954,956,958,960,962,966,971,973,975,977],{"text":590,"config":953},{"href":592,"dataGaName":584,"dataGaLocation":756},{"text":595,"config":955},{"href":597,"dataGaName":598,"dataGaLocation":756},{"text":603,"config":957},{"href":605,"dataGaName":606,"dataGaLocation":756},{"text":608,"config":959},{"href":610,"dataGaName":257,"dataGaLocation":756},{"text":612,"config":961},{"href":614,"dataGaName":615,"dataGaLocation":756},{"text":963,"config":964},"Sustainability",{"href":965,"dataGaName":963,"dataGaLocation":756},"/sustainability/",{"text":967,"config":968},"Diversity, inclusion and belonging (DIB)",{"href":969,"dataGaName":970,"dataGaLocation":756},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":617,"config":972},{"href":619,"dataGaName":620,"dataGaLocation":756},{"text":627,"config":974},{"href":629,"dataGaName":630,"dataGaLocation":756},{"text":632,"config":976},{"href":634,"dataGaName":635,"dataGaLocation":756},{"text":978,"config":979},"Modern Slavery Transparency Statement",{"href":980,"dataGaName":981,"dataGaLocation":756},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":983},[984,987,990],{"text":985,"config":986},"Terms",{"href":808,"dataGaName":809,"dataGaLocation":756},{"text":988,"config":989},"Cookies",{"dataGaName":818,"dataGaLocation":756,"id":819,"isOneTrustButton":299},{"text":991,"config":992},"Privacy",{"href":813,"dataGaName":814,"dataGaLocation":756},[994,1009],{"id":995,"title":996,"body":295,"config":997,"content":999,"description":295,"extension":1003,"meta":1004,"navigation":299,"path":1005,"seo":1006,"stem":1007,"__hash__":1008},"blogAuthors/en-us/blog/authors/charl-de-wit.yml","Charl De Wit",{"template":998},"BlogAuthor",{"name":7,"config":1000},{"headshot":1001,"ctfId":1002},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","45mQeypQVLNvvTWMzserbR","yml",{},"/en-us/blog/authors/charl-de-wit",{},"en-us/blog/authors/charl-de-wit","Lv9L1S2YDSAM9kZCEc6zeIQLIWBkdmZTDZ2Bsla0YS0",{"id":1010,"title":8,"body":295,"config":1011,"content":1012,"description":295,"extension":1003,"meta":1016,"navigation":299,"path":1017,"seo":1018,"stem":1019,"__hash__":1020},"blogAuthors/en-us/blog/authors/greg-myers.yml",{"template":998},{"name":8,"config":1013},{"headshot":1014,"ctfId":1015},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665570/Blog/Author%20Headshots/greg_myers_headshot.png","2uUYKgdtszyGfoOHbakiQX",{},"/en-us/blog/authors/greg-myers",{},"en-us/blog/authors/greg-myers","71ixXd05cw2vJ4hKOIawb-rzoBO_xbVonS0Q7BITJF0",[1022,1030,1038],{"title":1023,"description":1024,"heroImage":1025,"category":291,"date":1026,"authors":1027,"slug":1029,"externalUrl":295},"CEO Shadow Takeaways from Jacie","Recap of my experience in the CEO Shadow Program.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664102/Blog/Hero%20Images/gitlab-values-cover.png","2021-05-18",[1028],"Jacie Bandur","ceo-shadow-recap",{"title":1031,"description":1032,"heroImage":1033,"category":291,"date":1034,"authors":1035,"slug":1037,"externalUrl":295},"Why I love contributing to GitLab","Making small meaningful changes is what it's all about.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679501/Blog/Hero%20Images/new-feature.png","2021-05-11",[1036],"Austin Regnery","why-i-love-contributing-to-gitlab",{"title":1039,"description":1040,"heroImage":1041,"category":291,"date":1034,"authors":1042,"slug":1044,"externalUrl":295},"Placebo Lines on the Pipeline Graph","Have you noticed the connecting lines missing on your pipelines lately? Here's why","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679507/Blog/Hero%20Images/ci-cd.png",[1043],"Sam Beckham","placebo-lines-on-the-pipeline-graph",{"promotions":1046},[1047,1061,1073,1084],{"id":1048,"categories":1049,"header":1051,"text":1052,"button":1053,"image":1058},"ai-modernization",[1050],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1054,"config":1055},"Get your AI maturity score",{"href":1056,"dataGaName":1057,"dataGaLocation":522},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1059},{"src":1060},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1062,"categories":1063,"header":1065,"text":1052,"button":1066,"image":1070},"devops-modernization",[1064,858],"product","Are you just managing tools or shipping innovation?",{"text":1067,"config":1068},"Get your DevOps maturity score",{"href":1069,"dataGaName":1057,"dataGaLocation":522},"/assessments/devops-modernization-assessment/",{"config":1071},{"src":1072},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1074,"categories":1075,"header":1076,"text":1052,"button":1077,"image":1081},"security-modernization",[308],"Are you trading speed for security?",{"text":1078,"config":1079},"Get your security maturity score",{"href":1080,"dataGaName":1057,"dataGaLocation":522},"/assessments/security-modernization-assessment/",{"config":1082},{"src":1083},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1085,"paths":1086,"header":1089,"text":1090,"button":1091,"image":1096},"github-azure-migration",[1087,1088],"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":1092,"config":1093},"See how GitLab compares to GitHub",{"href":1094,"dataGaName":1095,"dataGaLocation":522},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1097},{"src":1072},{"header":1099,"blurb":1100,"button":1101,"secondaryButton":1106},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1102,"config":1103},"Get your free trial",{"href":1104,"dataGaName":321,"dataGaLocation":1105},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":794,"config":1107},{"href":646,"dataGaName":326,"dataGaLocation":1105},1786803750190]