[{"data":1,"prerenderedAt":702},["ShallowReactive",2],{"/en-us/blog/exact-code-search-find-code-faster-across-repositories/":3,"navigation-en-us":31,"banner-en-us":448,"footer-en-us":463,"Dmitry Gruzd":674,"next-steps-en-us":687},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":11,"config":21,"_id":24,"_type":25,"title":26,"_source":27,"_file":28,"_stem":29,"_extension":30},"/en-us/blog/exact-code-search-find-code-faster-across-repositories","blog",false,"",{"noIndex":6,"title":9,"description":10},"Exact Code Search: Find code faster across repositories","Discover how this new GitLab feature can find exact matches, use regex patterns, and see contextual results across terabytes of codebases.",{"title":9,"description":10,"authors":12,"heroImage":14,"date":15,"body":16,"category":17,"tags":18},[13],"Dmitry Gruzd","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675154/Blog/Hero%20Images/blog-image-template-1800x945__8_.png","2025-06-25","**TL;DR:** What if you could find any line of code across 48 TB of repositories in milliseconds? GitLab's new [Exact Code Search](https://docs.gitlab.com/ee/user/search/exact_code_search.html) makes this possible, delivering pinpoint precision, powerful regex support, and contextual multi-line results that transform how teams work with large codebases.\n## Why traditional code search is challenging\n\nAnyone who works with code knows the frustration of searching across repositories. Whether you're a developer debugging an issue, a DevOps engineer examining configurations, a security analyst searching for vulnerabilities, a technical writer updating documentation, or a manager reviewing implementation, you know exactly what you need, but traditional search tools often fail you.\n\nThese conventional tools return dozens of false positives, lack the context needed to understand results, and slow to a crawl as codebases grow. The result? Valuable time spent hunting for needles in haystacks instead of building, securing, or improving your software.\n\nGitLab's code search functionality has historically been backed by Elasticsearch or OpenSearch. While these are excellent for searching issues, merge requests, comments, and other data containing natural language, they weren't specifically designed for code. After [evaluating numerous options](https://gitlab.com/groups/gitlab-org/-/epics/7404), we developed a better solution.\n\n## Introducing Exact Code Search: Three game-changing capabilities\n\nEnter GitLab's **[Exact Code Search](https://docs.gitlab.com/ee/user/search/exact_code_search.html)**, currently in beta testing and powered by [Zoekt](https://github.com/sourcegraph/zoekt) (pronounced \"zookt\", Dutch for \"search\"). Zoekt is an open-source code search engine originally created by Google and now maintained by Sourcegraph, specifically designed for fast, accurate code search at scale. We've enhanced it with GitLab-specific integrations, enterprise-scale improvements, and seamless permission system integration.\n\nThis feature revolutionizes how you find and understand code with three key capabilities:\n\n**1. Exact Match mode: Zero false positives**\n\nWhen toggled to **Exact Match mode**, the search engine returns only results that match your query exactly as entered, eliminating false positives. This precision is invaluable when:\n\n* Searching for specific error messages\n* Looking for particular function signatures\n* Finding instances of specific variable names\n\n**2. Regular Expression mode: Powerful pattern matching**\n\nFor complex search needs, Regular Expression mode allows you to craft sophisticated search patterns:\n\n* Find functions following specific naming patterns\n* Locate variables matching certain constraints\n* Identify potential security vulnerabilities using pattern matching\n\n**3. Multiple-line matches: See code in context**\n\n![Exact Code Search](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750704179/ttjuilkt3v7gtyywnchx.png)\n\nInstead of seeing just a single line with your matching term, you get the surrounding context that's crucial for understanding the code. This eliminates the need to click through to files for basic comprehension, significantly accelerating your workflow.\n\n## From features to workflows: Real-world use cases and impact\n\nLet's see how these capabilities translate to real productivity gains in everyday development scenarios:\n\n### Debugging: From error message to root cause in seconds\n\nBefore Exact Code Search:\nCopy an error message, search, wade through dozens of partial matches in comments and documentation, click through multiple files, and eventually find the actual code.\n\nWith Exact Code Search:\n\n1. Copy the exact error message\n2. Paste it into Exact Code Search with Exact Match mode\n3. Instantly find the precise location where the error is thrown, with surrounding context\n\n**Impact:** Reduce debugging time from minutes to seconds, eliminating the frustration of false positives.\n\n### Code exploration: Master unfamiliar codebases quickly\n\nBefore Exact Code Search:\nBrowse through directories, make educated guesses about file locations, open dozens of files, and slowly build a mental map of the codebase.\n\nWith Exact Code Search:\n\n* Search for key methods or classes with Exact Match mode\n* Review multiple line matches to understand implementation details\n* Use Regular Expression mode to find similar patterns across the codebase\n\n**Impact:** Build a mental map of code structure in minutes rather than hours, dramatically accelerating onboarding and cross-team collaboration.\n\n### Refactoring with confidence\n\nBefore Exact Code Search:\nAttempt to find all instances of a method, miss some occurrences, and introduce bugs through incomplete refactoring.\n\nWith Exact Code Search:\n\n* Use Exact Match mode to find all occurrences of methods or variables\n* Review context to understand usage patterns\n* Plan your refactoring with complete information about impact\n\n**Impact:** Eliminate the \"missed instance\" bugs that often plague refactoring efforts, improving code quality and reducing rework.\n\n### Security auditing: Finding vulnerable patterns\n\nSecurity teams can:\n\n* Create regex patterns matching known vulnerable code\n* Search across all repositories in a namespace\n* Quickly identify potential security issues with context that helps assess risk\n\n**Impact:** Transform security audits from manual, error-prone processes to systematic, comprehensive reviews.\n\n### Cross-repository insights\n\nSearch across your entire namespace or instance to:\n\n* Identify similar implementations across different projects\n* Discover opportunities for shared libraries or standardization\n\n**Impact:** Break down silos between projects and identify opportunities for code reuse and standardization.\n\n## The technical foundation: How Zoekt delivers speed and precision\n\nBefore diving into our scale achievements, let's explore what makes Zoekt fundamentally different from traditional search engines — and why it can find exact matches so incredibly fast.\n\n### Positional trigrams: The secret to lightning-fast exact matches\n\nZoekt's speed comes from its use of **positional trigrams** — a technique that indexes every sequence of three characters along with their exact positions in files. This approach solves one of the biggest pain points developers have had with Elasticsearch-based code search: false positives.\n\nHere's how it works:\n\n**Traditional full-text search engines** like Elasticsearch tokenize code into words and lose positional information. When you search for `getUserId()`, they might return results containing **user**, **get**, and **Id** scattered throughout a file — leading to those frustrating false positives for GitLab users.\n\n**Zoekt's positional trigrams** maintain exact character sequences and their positions. When you search for `getUserId()`, Zoekt looks for the exact trigrams like **get**, **etU**, **tUs**, **Use**, **ser**, **erI**, **rId**, **Id(\", \"d()**, all in the correct sequence and position. This ensures that only exact matches are returned.\n\nThe result? Search queries that previously returned hundreds of irrelevant results now return only the precise matches you're looking for. This was [one of our most requested features](https://gitlab.com/gitlab-org/gitlab/-/issues/325234) for good reason - developers were losing significant time sifting through false positives.\n\n### Regular expression performance at scale\n\nZoekt excels at exact matches and is optimized for regular expression searches. The engine uses sophisticated algorithms to convert regex patterns into efficient trigram queries when possible, maintaining speed even for complex patterns across terabytes of code.\n\n## Built for enterprise scale\n\nExact Code Search is powerful and built to handle massive scale with impressive performance. This is not just a new UI feature — it's powered by a completely reimagined backend architecture.\n\n### Handling terabytes of code with ease\n\nOn GitLab.com alone, our Exact Code Search infrastructure indexes and searches over **48 TB** of code data while maintaining lightning-fast response times. This scale represents millions of repositories across thousands of namespaces, all searchable within milliseconds. To put this in perspective: This scale represents more code than the entire Linux kernel, Android, and Chromium projects combined. Yet Exact Code Search can find a specific line across this massive codebase in milliseconds.\n\n### Self-registering node architecture\n\nOur innovative implementation features:\n\n* **Automatic node registration:** Zoekt nodes register themselves with GitLab\n* **Dynamic shard assignment:** The system automatically assigns namespaces to nodes\n* **Health monitoring:** Nodes that don't check in are automatically marked offline\n\nThis self-configuring architecture dramatically simplifies scaling. When more capacity is needed, administrators can simply add more nodes without complex reconfiguration.\n\n### Distributed system with intelligent load balancing\n\nBehind the scenes, Exact Code Search operates as a distributed system with these key components:\n\n* **Specialized search nodes:** Purpose-built servers that handle indexing and searching\n* **Smart sharding:** Code is distributed across nodes based on namespaces\n* **Automatic load balancing:** The system intelligently distributes work based on capacity\n* **High availability:** Multiple replicas ensure continuous operation even if nodes fail\n\n*Note: High availability is built into the architecture but not yet fully enabled. See [Issue 514736](https://gitlab.com/gitlab-org/gitlab/-/issues/514736) for updates.*\n\n### Seamless security integration\n\nExact Code Search automatically integrates with GitLab's permission system:\n\n* Search results are filtered based on the user's access rights\n* Only code from projects the user has access to is displayed\n* Security is built into the core architecture, not added as an afterthought\n\n### Optimized performance\n\n* **Efficient indexing:** Large repositories are indexed in tens of seconds\n* **Fast query execution:** Most searches return results with sub-second response times\n* **Streaming results:** The new gRPC-based federated search streams results as they're found\n* **Early termination:** Once enough results are collected, the system pauses searching\n\n## From library to distributed system: Engineering challenges we solved\n\nWhile Zoekt provided the core search technology, it was originally designed as a minimal library for managing `.zoekt` index files - not a distributed database or enterprise-scale service. Here are the key engineering challenges we overcame to make it work at GitLab's scale\"\n\n### Challenge 1: Building an orchestration layer\n\n**The problem:** Zoekt was designed to work with local index files, not distributed across multiple nodes serving many concurrent users.\n\n**Our solution:** We built a comprehensive orchestration layer that:\n\n* Creates and manages database models to track nodes, indices, repositories, and tasks\n* Implements a self-registering node architecture (inspired by GitLab Runner)\n* Handles automatic shard assignment and load balancing across nodes\n* Provides bidirectional API communication between GitLab Rails and Zoekt nodes\n\n### Challenge 2: Scaling storage and indexing\n\n**The problem:** How do you efficiently manage terabytes of index data across multiple nodes while ensuring fast updates?\n\n**Our solution:** We implemented:\n\n* Intelligent sharding: Namespaces are distributed across nodes based on capacity and load\n* Independent replication: Each node independently indexes from [Gitaly](https://gitlab.com/gitlab-org/gitaly) (our Git storage service), eliminating complex synchronization\n* Watermark management: Sophisticated storage allocation that prevents nodes from running out of space\n* Unified binary architecture: A single `gitlab-zoekt` binary that can operate in both indexer and webserver modes\n\n### Challenge 3: Permission Integration\n\n**The problem:** Zoekt had no concept of GitLab's complex permission system - users should only see results from projects they can access.\n\n**Our solution:** We built native permission filtering directly into the search flow:\n\n* Search requests include user permission context\n* Results are filtered to include only those the user can access in case permissions change before indexing completes\n\n### Challenge 4: Operational simplicity\n\n**The problem:** Managing a distributed search system shouldn't require a dedicated team.\n\n**Our solution:**\n\n* Auto-scaling: Adding capacity is as simple as deploying more nodes - they automatically register and start handling work\n* Self-healing: Nodes that don't check in are automatically marked offline and their work redistributed\n* Zero-configuration sharding: The system automatically determines optimal shard assignments\n\n## Gradual rollout: Minimizing risk at scale\n\nRolling out a completely new search backend to millions of users required careful planning. Here's how we minimized customer impact while ensuring reliability:\n\n### Phase 1: Controlled testing (gitlab-org group)\n\nWe started by enabling Exact Code Search only for the `gitlab-org` group - our own internal repositories. This allowed us to:\n\n* Test the system with real production workloads\n* Identify and fix performance bottlenecks\n* Streamline the deployment process\n* Learn from real users' workflows and feedback\n\n### Phase 2: Performance validation and optimization\n\nBefore expanding, we focused on ensuring the system could handle GitLab.com's scale:\n\n* Implemented comprehensive monitoring and alerting\n* Validated storage management with real production data growth\n\n### Phase 3: Incremental customer expansion\n\nWe gradually expanded to customers interested in testing Exact Code Search:\n\n* Gathered feedback on performance and user experience\n* Refined the search UI based on real user workflows\n* Optimized indexing performance (large repositories like `gitlab-org/gitlab` now index in ~10 seconds)\n* Refined the architecture based on operational learnings\n* Massively increased indexing throughput and improved state transition livecycle\n\n### Phase 4: Broad rollout\n\nToday, over 99% of Premium and Ultimate licensed groups on GitLab.com have access to Exact Code Search. Users can:\n\n* Toggle between regex and exact search modes\n* Experience the benefits without any configuration changes\n* Fall back to the previous search if needed (though few choose to)\n\nRolling this out gradually meant users didn't experience service disruptions, performance degradation, or feature gaps during the transition. We've already received positive feedback from users as they notice their results becoming more relevant and faster.\n\n> **For technical deep dive:** Interested in the detailed architecture and implementation? Check out our comprehensive [design document](https://handbook.gitlab.com/handbook/engineering/architecture/design-documents/code_search_with_zoekt/) for in-depth technical details about how we built this distributed search system.\n\n## Getting started with Exact Code Search\n\nGetting started with Exact Code Search is simple because it's already enabled by default for Premium and Ultimate groups on GitLab.com (over 99% of eligible groups currently have access).\n\n### Quickstart guide\n\n1. Navigate to the Advanced Search in your GitLab project or group\n2. Enter your search term in the code tab\n3. Toggle between Exact Match and Regular Expression modes\n4. Use filters to refine your search\n\n### Basic search syntax\n\nWhether using Exact Match or Regular Expression mode, you can refine your search with modifiers:\n\n| Query Example | What It Does                                             |\n| ------------- | -------------------------------------------------------- |\n| `file:js`     | Searches only in files containing \"js\" in their name     |\n| `foo -bar`    | Finds \"foo\" but excludes results with \"bar\"              |\n| `lang:ruby`   | Searches only in Ruby files                              |\n| `sym:process` | Finds \"process\" in symbols (methods, classes, variables) |\n\n> **Pro Tip:** For the most efficient searches, start specific and then broaden if needed. Using `file:` and `lang:` filters dramatically increases relevance.\n\n### Advanced search techniques\n\nStack multiple filters for precision:\n\n```\nis_expected file:rb -file:spec\n```\n\nThis finds \"is_expected\" in Ruby files that don't have \"spec\" in their name.\n\nUse regular expressions for powerful patterns:\n\n```\ntoken.*=.*[\\\"']\n```\n\n[Watch this search performed against the GitLab Zoekt repository.](https://gitlab.com/search?search=token.*%3D.*%5B%5C%22'%5D&nav_source=navbar&project_id=46649240&group_id=9970&search_code=true&repository_ref=main&regex=true)\n\nThe search helps find hardcoded passwords, which, if not found, can be a security issue.\n\nFor more detailed syntax information, check the [Exact Code Search documentation](https://docs.gitlab.com/user/search/exact_code_search/#syntax).\n\n## Availability and deployment\n\n### Current availability\n\nExact Code Search is currently in Beta for GitLab.com users with Premium and Ultimate licenses:\n\n* Available for over 99% of licensed groups\n* Search in the UI automatically uses Zoekt when available, Exact Code Search in Search API is behind a feature flag\n\n### Self-managed deployment options\n\nFor self-managed instances, we offer several deployment methods:\n\n* Kubernetes/Helm: Our most well-supported method, using our [`gitlab-zoekt` Helm chart](https://gitlab.com/gitlab-org/cloud-native/charts/gitlab-zoekt)\n* Other deployment options: We're working on streamlining deployment for Omnibus and other installation methods\n\nSystem requirements depend on your codebase size, but the architecture is designed to scale horizontally and/or vertically as your needs grow.\n\n## What's coming next\n\nWhile Exact Code Search is already powerful, we're continuously improving it:\n\n* **Scale optimizations** to support instances with hundreds of thousands of repositories\n* **Improved self-managed deployment** options, including streamlined Omnibus support\n* **Full high availability support** with automatic failover and load balancing\n\nStay tuned for updates as we move from Beta to General Availability.\n\n## Transform how you work with code\n\nGitLab's Exact Code Search represents a fundamental rethinking of code discovery. By delivering exact matches, powerful regex support, and contextual results, it solves the most frustrating aspects of code search:\n\n* No more wasting time with irrelevant results\n* No more missing important matches\n* No more clicking through files just to understand basic context\n* No more performance issues as codebases grow\n\nThe impact extends beyond individual productivity:\n\n* **Teams collaborate better** with easy code referencing\n* **Knowledge sharing accelerates** when patterns are discoverable\n* **Onboarding becomes faster** with quick codebase comprehension\n* **Security improves** with effective pattern auditing\n* **Technical debt reduction** becomes more feasible\n\nExact Code Search isn't just a feature, it's a better way to understand and work with code. Stop searching and start finding.\n\n**We'd love to hear from you!** Share your experiences, questions, or feedback about Exact Code Search in our [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/420920). Your input helps us prioritize improvements and new features.\n\n> #### Ready to experience smarter code search? Learn more in our [documentation](https://docs.gitlab.com/ee/user/search/exact_code_search.html) or try it now by performing a search in your Premium or Ultimate licensed namespaces or projects. Not a GitLab user yet? Try [a free, 60-day trial of GitLab Ultimate with Duo](https://about.gitlab.com/free-trial/)!","product",[17,19,20],"tutorial","open source",{"featured":6,"template":22,"slug":23},"BlogPost","exact-code-search-find-code-faster-across-repositories","content:en-us:blog:exact-code-search-find-code-faster-across-repositories.yml","yaml","Exact Code Search Find Code Faster Across Repositories","content","en-us/blog/exact-code-search-find-code-faster-across-repositories.yml","en-us/blog/exact-code-search-find-code-faster-across-repositories","yml",{"_path":32,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"data":34,"_id":444,"_type":25,"title":445,"_source":27,"_file":446,"_stem":447,"_extension":30},"/shared/en-us/main-navigation","en-us",{"logo":35,"freeTrial":40,"sales":45,"login":50,"items":55,"search":385,"minimal":416,"duo":435},{"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,196,201,306,366],{"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":178},"Product",true,{"dataNavLevelOne":104},"solutions",{"text":106,"config":107},"View all Solutions",{"href":108,"dataGaName":104,"dataGaLocation":39},"/solutions/",[110,135,157],{"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,147,152],{"text":145,"config":146},"Security & Compliance",{"href":140,"dataGaLocation":39,"dataGaName":145},{"text":148,"config":149},"Software Supply Chain Security",{"href":150,"dataGaLocation":39,"dataGaName":151},"/solutions/supply-chain/","Software supply chain security",{"text":153,"config":154},"Compliance & Governance",{"href":155,"dataGaLocation":39,"dataGaName":156},"/solutions/continuous-software-compliance/","Compliance and governance",{"title":158,"link":159,"items":164},"Measurement",{"config":160},{"icon":161,"href":162,"dataGaName":163,"dataGaLocation":39},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[165,169,173],{"text":166,"config":167},"Visibility & Measurement",{"href":162,"dataGaLocation":39,"dataGaName":168},"Visibility and Measurement",{"text":170,"config":171},"Value Stream Management",{"href":172,"dataGaLocation":39,"dataGaName":170},"/solutions/value-stream-management/",{"text":174,"config":175},"Analytics & Insights",{"href":176,"dataGaLocation":39,"dataGaName":177},"/solutions/analytics-and-insights/","Analytics and insights",{"title":179,"items":180},"GitLab for",[181,186,191],{"text":182,"config":183},"Enterprise",{"href":184,"dataGaLocation":39,"dataGaName":185},"/enterprise/","enterprise",{"text":187,"config":188},"Small Business",{"href":189,"dataGaLocation":39,"dataGaName":190},"/small-business/","small business",{"text":192,"config":193},"Public Sector",{"href":194,"dataGaLocation":39,"dataGaName":195},"/solutions/public-sector/","public sector",{"text":197,"config":198},"Pricing",{"href":199,"dataGaName":200,"dataGaLocation":39,"dataNavLevelOne":200},"/pricing/","pricing",{"text":202,"config":203,"link":205,"lists":209,"feature":293},"Resources",{"dataNavLevelOne":204},"resources",{"text":206,"config":207},"View all resources",{"href":208,"dataGaName":204,"dataGaLocation":39},"/resources/",[210,243,265],{"title":211,"items":212},"Getting started",[213,218,223,228,233,238],{"text":214,"config":215},"Install",{"href":216,"dataGaName":217,"dataGaLocation":39},"/install/","install",{"text":219,"config":220},"Quick start guides",{"href":221,"dataGaName":222,"dataGaLocation":39},"/get-started/","quick setup checklists",{"text":224,"config":225},"Learn",{"href":226,"dataGaLocation":39,"dataGaName":227},"https://university.gitlab.com/","learn",{"text":229,"config":230},"Product documentation",{"href":231,"dataGaName":232,"dataGaLocation":39},"https://docs.gitlab.com/","product documentation",{"text":234,"config":235},"Best practice videos",{"href":236,"dataGaName":237,"dataGaLocation":39},"/getting-started-videos/","best practice videos",{"text":239,"config":240},"Integrations",{"href":241,"dataGaName":242,"dataGaLocation":39},"/integrations/","integrations",{"title":244,"items":245},"Discover",[246,251,255,260],{"text":247,"config":248},"Customer success stories",{"href":249,"dataGaName":250,"dataGaLocation":39},"/customers/","customer success stories",{"text":252,"config":253},"Blog",{"href":254,"dataGaName":5,"dataGaLocation":39},"/blog/",{"text":256,"config":257},"Remote",{"href":258,"dataGaName":259,"dataGaLocation":39},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":261,"config":262},"TeamOps",{"href":263,"dataGaName":264,"dataGaLocation":39},"/teamops/","teamops",{"title":266,"items":267},"Connect",[268,273,278,283,288],{"text":269,"config":270},"GitLab Services",{"href":271,"dataGaName":272,"dataGaLocation":39},"/services/","services",{"text":274,"config":275},"Community",{"href":276,"dataGaName":277,"dataGaLocation":39},"/community/","community",{"text":279,"config":280},"Forum",{"href":281,"dataGaName":282,"dataGaLocation":39},"https://forum.gitlab.com/","forum",{"text":284,"config":285},"Events",{"href":286,"dataGaName":287,"dataGaLocation":39},"/events/","events",{"text":289,"config":290},"Partners",{"href":291,"dataGaName":292,"dataGaLocation":39},"/partners/","partners",{"backgroundColor":294,"textColor":295,"text":296,"image":297,"link":301},"#2f2a6b","#fff","Insights for the future of software development",{"altText":298,"config":299},"the source promo card",{"src":300},"/images/navigation/the-source-promo-card.svg",{"text":302,"config":303},"Read the latest",{"href":304,"dataGaName":305,"dataGaLocation":39},"/the-source/","the source",{"text":307,"config":308,"lists":310},"Company",{"dataNavLevelOne":309},"company",[311],{"items":312},[313,318,324,326,331,336,341,346,351,356,361],{"text":314,"config":315},"About",{"href":316,"dataGaName":317,"dataGaLocation":39},"/company/","about",{"text":319,"config":320,"footerGa":323},"Jobs",{"href":321,"dataGaName":322,"dataGaLocation":39},"/jobs/","jobs",{"dataGaName":322},{"text":284,"config":325},{"href":286,"dataGaName":287,"dataGaLocation":39},{"text":327,"config":328},"Leadership",{"href":329,"dataGaName":330,"dataGaLocation":39},"/company/team/e-group/","leadership",{"text":332,"config":333},"Team",{"href":334,"dataGaName":335,"dataGaLocation":39},"/company/team/","team",{"text":337,"config":338},"Handbook",{"href":339,"dataGaName":340,"dataGaLocation":39},"https://handbook.gitlab.com/","handbook",{"text":342,"config":343},"Investor relations",{"href":344,"dataGaName":345,"dataGaLocation":39},"https://ir.gitlab.com/","investor relations",{"text":347,"config":348},"Trust Center",{"href":349,"dataGaName":350,"dataGaLocation":39},"/security/","trust center",{"text":352,"config":353},"AI Transparency Center",{"href":354,"dataGaName":355,"dataGaLocation":39},"/ai-transparency-center/","ai transparency center",{"text":357,"config":358},"Newsletter",{"href":359,"dataGaName":360,"dataGaLocation":39},"/company/contact/","newsletter",{"text":362,"config":363},"Press",{"href":364,"dataGaName":365,"dataGaLocation":39},"/press/","press",{"text":367,"config":368,"lists":369},"Contact us",{"dataNavLevelOne":309},[370],{"items":371},[372,375,380],{"text":46,"config":373},{"href":48,"dataGaName":374,"dataGaLocation":39},"talk to sales",{"text":376,"config":377},"Get help",{"href":378,"dataGaName":379,"dataGaLocation":39},"/support/","get help",{"text":381,"config":382},"Customer portal",{"href":383,"dataGaName":384,"dataGaLocation":39},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":386,"login":387,"suggestions":394},"Close",{"text":388,"link":389},"To search repositories and projects, login to",{"text":390,"config":391},"gitlab.com",{"href":53,"dataGaName":392,"dataGaLocation":393},"search login","search",{"text":395,"default":396},"Suggestions",[397,399,403,405,409,413],{"text":68,"config":398},{"href":73,"dataGaName":68,"dataGaLocation":393},{"text":400,"config":401},"Code Suggestions (AI)",{"href":402,"dataGaName":400,"dataGaLocation":393},"/solutions/code-suggestions/",{"text":120,"config":404},{"href":122,"dataGaName":120,"dataGaLocation":393},{"text":406,"config":407},"GitLab on AWS",{"href":408,"dataGaName":406,"dataGaLocation":393},"/partners/technology-partners/aws/",{"text":410,"config":411},"GitLab on Google Cloud",{"href":412,"dataGaName":410,"dataGaLocation":393},"/partners/technology-partners/google-cloud-platform/",{"text":414,"config":415},"Why GitLab?",{"href":81,"dataGaName":414,"dataGaLocation":393},{"freeTrial":417,"mobileIcon":422,"desktopIcon":427,"secondaryButton":430},{"text":418,"config":419},"Start free trial",{"href":420,"dataGaName":44,"dataGaLocation":421},"https://gitlab.com/-/trials/new/","nav",{"altText":423,"config":424},"Gitlab Icon",{"src":425,"dataGaName":426,"dataGaLocation":421},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":423,"config":428},{"src":429,"dataGaName":426,"dataGaLocation":421},"/images/brand/gitlab-logo-type.svg",{"text":431,"config":432},"Get Started",{"href":433,"dataGaName":434,"dataGaLocation":421},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":436,"mobileIcon":440,"desktopIcon":442},{"text":437,"config":438},"Learn more about GitLab Duo",{"href":73,"dataGaName":439,"dataGaLocation":421},"gitlab duo",{"altText":423,"config":441},{"src":425,"dataGaName":426,"dataGaLocation":421},{"altText":423,"config":443},{"src":429,"dataGaName":426,"dataGaLocation":421},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":449,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"title":450,"button":451,"image":455,"config":458,"_id":460,"_type":25,"_source":27,"_file":461,"_stem":462,"_extension":30},"/shared/en-us/banner","is now in public beta!",{"text":79,"config":452},{"href":453,"dataGaName":454,"dataGaLocation":39},"/gitlab-duo/agent-platform/","duo banner",{"config":456},{"src":457},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":459},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":464,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"data":465,"_id":670,"_type":25,"title":671,"_source":27,"_file":672,"_stem":673,"_extension":30},"/shared/en-us/main-footer",{"text":466,"source":467,"edit":473,"contribute":478,"config":483,"items":488,"minimal":662},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":468,"config":469},"View page source",{"href":470,"dataGaName":471,"dataGaLocation":472},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":474,"config":475},"Edit this page",{"href":476,"dataGaName":477,"dataGaLocation":472},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":479,"config":480},"Please contribute",{"href":481,"dataGaName":482,"dataGaLocation":472},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":484,"facebook":485,"youtube":486,"linkedin":487},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[489,512,569,598,632],{"title":57,"links":490,"subMenu":495},[491],{"text":492,"config":493},"DevSecOps platform",{"href":66,"dataGaName":494,"dataGaLocation":472},"devsecops platform",[496],{"title":197,"links":497},[498,502,507],{"text":499,"config":500},"View plans",{"href":199,"dataGaName":501,"dataGaLocation":472},"view plans",{"text":503,"config":504},"Why Premium?",{"href":505,"dataGaName":506,"dataGaLocation":472},"/pricing/premium/","why premium",{"text":508,"config":509},"Why Ultimate?",{"href":510,"dataGaName":511,"dataGaLocation":472},"/pricing/ultimate/","why ultimate",{"title":513,"links":514},"Solutions",[515,520,523,525,530,535,539,542,546,551,553,556,559,564],{"text":516,"config":517},"Digital transformation",{"href":518,"dataGaName":519,"dataGaLocation":472},"/topics/digital-transformation/","digital transformation",{"text":145,"config":521},{"href":140,"dataGaName":522,"dataGaLocation":472},"security & compliance",{"text":134,"config":524},{"href":116,"dataGaName":117,"dataGaLocation":472},{"text":526,"config":527},"Agile development",{"href":528,"dataGaName":529,"dataGaLocation":472},"/solutions/agile-delivery/","agile delivery",{"text":531,"config":532},"Cloud transformation",{"href":533,"dataGaName":534,"dataGaLocation":472},"/topics/cloud-native/","cloud transformation",{"text":536,"config":537},"SCM",{"href":130,"dataGaName":538,"dataGaLocation":472},"source code management",{"text":120,"config":540},{"href":122,"dataGaName":541,"dataGaLocation":472},"continuous integration & delivery",{"text":543,"config":544},"Value stream management",{"href":172,"dataGaName":545,"dataGaLocation":472},"value stream management",{"text":547,"config":548},"GitOps",{"href":549,"dataGaName":550,"dataGaLocation":472},"/solutions/gitops/","gitops",{"text":182,"config":552},{"href":184,"dataGaName":185,"dataGaLocation":472},{"text":554,"config":555},"Small business",{"href":189,"dataGaName":190,"dataGaLocation":472},{"text":557,"config":558},"Public sector",{"href":194,"dataGaName":195,"dataGaLocation":472},{"text":560,"config":561},"Education",{"href":562,"dataGaName":563,"dataGaLocation":472},"/solutions/education/","education",{"text":565,"config":566},"Financial services",{"href":567,"dataGaName":568,"dataGaLocation":472},"/solutions/finance/","financial services",{"title":202,"links":570},[571,573,575,577,580,582,584,586,588,590,592,594,596],{"text":214,"config":572},{"href":216,"dataGaName":217,"dataGaLocation":472},{"text":219,"config":574},{"href":221,"dataGaName":222,"dataGaLocation":472},{"text":224,"config":576},{"href":226,"dataGaName":227,"dataGaLocation":472},{"text":229,"config":578},{"href":231,"dataGaName":579,"dataGaLocation":472},"docs",{"text":252,"config":581},{"href":254,"dataGaName":5,"dataGaLocation":472},{"text":247,"config":583},{"href":249,"dataGaName":250,"dataGaLocation":472},{"text":256,"config":585},{"href":258,"dataGaName":259,"dataGaLocation":472},{"text":269,"config":587},{"href":271,"dataGaName":272,"dataGaLocation":472},{"text":261,"config":589},{"href":263,"dataGaName":264,"dataGaLocation":472},{"text":274,"config":591},{"href":276,"dataGaName":277,"dataGaLocation":472},{"text":279,"config":593},{"href":281,"dataGaName":282,"dataGaLocation":472},{"text":284,"config":595},{"href":286,"dataGaName":287,"dataGaLocation":472},{"text":289,"config":597},{"href":291,"dataGaName":292,"dataGaLocation":472},{"title":307,"links":599},[600,602,604,606,608,610,612,616,621,623,625,627],{"text":314,"config":601},{"href":316,"dataGaName":309,"dataGaLocation":472},{"text":319,"config":603},{"href":321,"dataGaName":322,"dataGaLocation":472},{"text":327,"config":605},{"href":329,"dataGaName":330,"dataGaLocation":472},{"text":332,"config":607},{"href":334,"dataGaName":335,"dataGaLocation":472},{"text":337,"config":609},{"href":339,"dataGaName":340,"dataGaLocation":472},{"text":342,"config":611},{"href":344,"dataGaName":345,"dataGaLocation":472},{"text":613,"config":614},"Sustainability",{"href":615,"dataGaName":613,"dataGaLocation":472},"/sustainability/",{"text":617,"config":618},"Diversity, inclusion and belonging (DIB)",{"href":619,"dataGaName":620,"dataGaLocation":472},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":347,"config":622},{"href":349,"dataGaName":350,"dataGaLocation":472},{"text":357,"config":624},{"href":359,"dataGaName":360,"dataGaLocation":472},{"text":362,"config":626},{"href":364,"dataGaName":365,"dataGaLocation":472},{"text":628,"config":629},"Modern Slavery Transparency Statement",{"href":630,"dataGaName":631,"dataGaLocation":472},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":633,"links":634},"Contact Us",[635,638,640,642,647,652,657],{"text":636,"config":637},"Contact an expert",{"href":48,"dataGaName":49,"dataGaLocation":472},{"text":376,"config":639},{"href":378,"dataGaName":379,"dataGaLocation":472},{"text":381,"config":641},{"href":383,"dataGaName":384,"dataGaLocation":472},{"text":643,"config":644},"Status",{"href":645,"dataGaName":646,"dataGaLocation":472},"https://status.gitlab.com/","status",{"text":648,"config":649},"Terms of use",{"href":650,"dataGaName":651,"dataGaLocation":472},"/terms/","terms of use",{"text":653,"config":654},"Privacy statement",{"href":655,"dataGaName":656,"dataGaLocation":472},"/privacy/","privacy statement",{"text":658,"config":659},"Cookie preferences",{"dataGaName":660,"dataGaLocation":472,"id":661,"isOneTrustButton":102},"cookie preferences","ot-sdk-btn",{"items":663},[664,666,668],{"text":648,"config":665},{"href":650,"dataGaName":651,"dataGaLocation":472},{"text":653,"config":667},{"href":655,"dataGaName":656,"dataGaLocation":472},{"text":658,"config":669},{"dataGaName":660,"dataGaLocation":472,"id":661,"isOneTrustButton":102},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",[675],{"_path":676,"_dir":677,"_draft":6,"_partial":6,"_locale":7,"content":678,"config":682,"_id":684,"_type":25,"title":13,"_source":27,"_file":685,"_stem":686,"_extension":30},"/en-us/blog/authors/dmitry-gruzd","authors",{"name":13,"config":679},{"headshot":680,"ctfId":681},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682014/Blog/Author%20Headshots/dgruzd-headshot.jpg","dgruzd",{"template":683},"BlogAuthor","content:en-us:blog:authors:dmitry-gruzd.yml","en-us/blog/authors/dmitry-gruzd.yml","en-us/blog/authors/dmitry-gruzd",{"_path":688,"_dir":33,"_draft":6,"_partial":6,"_locale":7,"header":689,"eyebrow":690,"blurb":691,"button":692,"secondaryButton":696,"_id":698,"_type":25,"title":699,"_source":27,"_file":700,"_stem":701,"_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":693},{"href":694,"dataGaName":44,"dataGaLocation":695},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":46,"config":697},{"href":48,"dataGaName":49,"dataGaLocation":695},"content:shared:en-us:next-steps.yml","Next Steps","shared/en-us/next-steps.yml","shared/en-us/next-steps",1753733176339]