[{"data":1,"prerenderedAt":716},["ShallowReactive",2],{"/en-us/blog/secure-rust-development-with-gitlab/":3,"navigation-en-us":34,"banner-en-us":461,"footer-en-us":478,"Fernando Diaz":688,"next-steps-en-us":701},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"config":12,"content":16,"_id":27,"_type":28,"title":29,"_source":30,"_file":31,"_stem":32,"_extension":33},"/en-us/blog/secure-rust-development-with-gitlab","blog",false,"",{"config":9,"title":10,"description":11},{"noIndex":6},"Secure Rust development with GitLab","Learn how GitLab supports Rust development through its CI/CD capabilities, security scanning, dedicated Rust integrations, AI features, and more.",{"slug":13,"featured":14,"template":15},"secure-rust-development-with-gitlab",true,"BlogPost",{"title":10,"description":11,"authors":17,"tags":19,"heroImage":23,"category":24,"date":25,"body":26},[18],"Fernando Diaz",[20,21,22],"community","open source","tutorial","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314674/tct6zf6evw0xgddd2vo3.png","engineering","2025-09-02","Rust has emerged as one of the most beloved programming languages due to its performance,\nmemory safety, and concurrency features. As Rust adoption continues to grow, many developers\nare looking for robust CI/CD platforms to support their Rust projects.\n\nGitLab's appeal to Rust developers extends beyond simple code hosting. The platform offers\nrobust [CI/CD](https://about.gitlab.com/topics/ci-cd/) capabilities that align perfectly with Rust's emphasis on safety, performance, and reliability. GitLab makes it easy to create repositories and use off-the-shelf Docker\ncontainers to put together custom CI jobs. Developers can easily set up automated testing,\ncross-platform builds, and documentation generation. The platform's integrated approach to\nDevSecOps resonates with Rust's philosophy of providing comprehensive tooling out of the box.\n\n## About the demo application\n\nBeing interested in how mortgage rates affect monthly payments and how hard it is to\nto afford a house in the current times, I decided to write a [mortgage calculator](https://gitlab.com/gitlab-da/tutorials/security-and-governance/devsecops/rust/mortgage-calculator) in Rust,\nwhich I will use as an example throughout this tutorial. Feel free to [import this project](https://docs.gitlab.com/user/project/import/repo_by_url/) and follow along.\n\nThe mortgage calculator will help users calculate monthly mortgage payments,\nincluding principal, interest, property taxes, insurance, PMI, and HOA fees. It provides a\nmodern, intuitive GUI using the [egui](https://www.egui.rs/) framework, as well as a CLI for running it in the terminal.\n\n![Mortgage calculator GUI](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314538/l5bjnzqvpoyikuyxpx2a.png)\n\nThis application contains a [`.gitlab-ci.yml`](https://gitlab.com/gitlab-da/tutorials/security-and-governance/devsecops/rust/mortgage-calculator/-/blob/main/.gitlab-ci.yml?ref_type=heads) that generates a pipeline, which will build, test,\npackage, scan, and deploy the software. We will go over this pipeline definition in detail in the\nsections below.\n\n![Mortgage Calculator Pipeline](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314540/llmsfoaupedhkem0hjqp.png)\n\n## Building and testing Rust applications\n\nGitLab's Docker-based CI/CD system excels at Rust development workflows, providing a robust\nfoundation for compilation, testing, and code quality checks. The platform's caching mechanisms\nare particularly valuable for Rust projects, which can have lengthy compilation times due to the\nlanguage's thorough optimization and safety checking processes.\n\n### Building\n\nRust's excellent cross-compilation capabilities combined with GitLab's flexible CI/CD system\ncreate a powerful solution for building applications across multiple platforms. This is particularly\nvaluable for Rust applications that need to run on various operating systems and architectures without\nsacrificing performance or requiring platform-specific code.\n\n**Note:** You can learn more about the `.gitlab-ci.yml` by reading the [CI/CD YAML syntax reference](https://docs.gitlab.com/ci/yaml/).\n\n```yaml\n# Cache configuration to speed up builds by reusing dependencies\ncache:\n  key: $CI_COMMIT_REF_SLUG                               # Use branch name as cache key\n  paths:\n    - .cargo/                                            # Cache Cargo registry and git dependencies\n    - target/                                            # Cache compiled artifacts\n\n# Base template for Rust jobs - shared configuration\n.rust-template:\n  image: rust:$RUST_VERSION-slim                         # Use slim Rust image for faster downloads\n  before_script:\n    # Install system dependencies required for building the Rust application\n    - apt-get update && apt-get install -y pkg-config libssl-dev libgtk-3-dev libxcb-shape0-dev libxcb-xfixes0-dev\n\n# Template for cross-compilation build jobs\n.build-template:\n  extends: .rust-template                                # Inherit from rust-template\n  stage: build                                           # Execute during build stage\n  script:\n    - rustup target add $TARGET                          # Add the target platform for cross-compilation\n    - cargo build --release --target $TARGET             # Build optimized release binary for target platform\n\n# Build for Linux x86_64 (primary target platform)\nbuild-linux:\n  extends: .build-template                               # Use build template configuration\n  variables:\n    TARGET: x86_64-unknown-linux-gnu                     # Linux 64-bit target\n  artifacts:\n    paths:\n      - target/$TARGET/release/mortgage-calculator       # Save the compiled binary\n    expire_in: 1 week                                    # Keep artifacts for 1 week\n  allow_failure: false                                   # This build must succeed\n\n# Build for Windows x86_64 (cross-compilation)\nbuild-windows:\n  extends: .build-template                               # Use build template configuration\n  variables:\n    TARGET: x86_64-pc-windows-gnu                        # Windows 64-bit target\n  artifacts:\n    paths:\n      - target/$TARGET/release/mortgage-calculator       # Save the compiled binary\n    expire_in: 1 week                                    # Keep artifacts for 1 week\n  allow_failure: true                                    # Allow this build to fail (cross-compilation can be tricky)\n\n# Build for macOS x86_64 (cross-compilation)\nbuild-macos:\n  extends: .build-template                               # Use build template configuration\n  variables:\n    TARGET: x86_64-apple-darwin                          # macOS 64-bit target\n  artifacts:\n    paths:\n      - target/$TARGET/release/mortgage-calculator       # Save the compiled binary\n    expire_in: 1 week                                    # Keep artifacts for 1 week\n  allow_failure: true                                    # Allow this build to fail (cross-compilation can be tricky)\n```\n\nThis GitLab CI configuration defines three build jobs that cross-compile a Rust mortgage calculator\napplication for different platforms:\n\n* `build-linux` creates a Linux x86_64 binary (required to pass)\n* `build-windows` creates Windows binaries (allowed to fail)\n* `build-macos` creates macOS x86_64 binaries (allowed to fail)\n\nAll builds use shared templates for dependency caching and consistent build environments.\n\n### Testing\n\nGitLab CI/CD streamlines code testing through its integrated pipeline system that automatically\ntriggers test suites whenever code is pushed to the repository. Developers can define multiple\ntypes of tests — unit tests, integration tests, linting, and formatting checks — all within a single\n`.gitlab-ci.yml` configuration file, with each test running in isolated Docker containers to ensure\nconsistent environments.\n\n```yaml\n# Run unit tests\ntest:unit:\n  extends: .rust-template                                # Use Rust template configuration\n  stage: test                                            # Execute during test stage\n  script:\n    - cargo test --verbose                               # Run all unit tests with verbose output\n\n# Run integration tests using the compiled binary\ntest:integration:\n  extends: .rust-template                                # Use Rust template configuration\n  stage: test                                            # Execute during test stage\n  script:\n    # Test the compiled binary with sample inputs and verify expected output\n    - target/x86_64-unknown-linux-gnu/release/mortgage-calculator --cli calculate --property-value 350000 --down-payment 70000 --interest-rate 5.0 | grep -q \"TOTAL MONTHLY PAYMENT\"\n  needs:\n    - build-linux                                        # Depends on Linux build job completing\n\n# Run Clippy linter for code quality checks\ntest:clippy:\n  extends: .rust-template                                # Use Rust template configuration\n  stage: test                                            # Execute during test stage\n  script:\n    - rustup component add clippy                        # Install Clippy linter\n    - cargo clippy -- -D warnings                       # Run Clippy and treat warnings as errors\n  allow_failure: true                                    # Allow linting failures (can be improved over time)\n\n# Check code formatting\ntest:format:\n  extends: .rust-template                                # Use Rust template configuration\n  stage: test                                            # Execute during test stage\n  script:\n    - rustup component add rustfmt                       # Install Rust formatter\n    - cargo fmt -- --check                              # Check if code is properly formatted\n  allow_failure: true                                    # Allow formatting failures (can be improved over time)\n```\n\nThis GitLab CI configuration creates four test jobs that validate a Rust mortgage calculator application:\n\n* `test:unit` runs unit tests\n* `test:integration` executes the compiled Linux binary with sample inputs to verify functionality\n* `test:clippy` performs code quality linting (allowed to fail)\n* `test:format` checks code formatting compliance (allowed to fail)\n\n## Package and Container Registries\n\nGitLab's [Package Registry](https://docs.gitlab.com/user/packages/package_registry/) provides a secure solution to the common challenge of sharing\ninternal libraries and proprietary code within organizations. This capability is essential\nfor enterprises and teams that need to maintain artifacts while leveraging the broader\nRust ecosystem.\n\nThe registry supports [generic artifacts](https://docs.gitlab.com/user/packages/generic_packages/) with fine-grained access controls that\nalign with GitLab's project permissions. This means teams can share libraries securely across\nprojects while maintaining intellectual property protection and compliance requirements.\n\nAdditonally, we can containerize our application and store the container images in\nGitLab's built-in [Container Registry](https://docs.gitlab.com/user/packages/container_registry/).\n\n### Publishing to GitLab Package Registry\n\nThis section of our `.gitlab-ci.yml` demonstrates how to package and publish Rust applications\nas tar archives to GitLab's generic package registry using CI/CD automation.\n\n```yaml\n# Package application as tar archive\npackage:tar:\n  image: alpine/curl:8.12.1                             # Lightweight image with curl for uploading\n  stage: package                                         # Execute during package stage\n  variables:\n    PACKAGE_NAME: mortgage-calculator.tar.gz             # Name of the archive file\n  script:\n    # Create tar archive of the Linux binary\n    - tar -czvf $PACKAGE_NAME target/x86_64-unknown-linux-gnu/release/mortgage-calculator\n    # Upload archive to GitLab Package Registry using API\n    - |\n      curl -v --location --header \"JOB-TOKEN: $CI_JOB_TOKEN\" \\\n      --upload-file $PACKAGE_NAME \\\n      \"$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic/tar/$CI_COMMIT_BRANCH/$PACKAGE_NAME\"\n  artifacts:\n    paths:\n      - target/x86_64-unknown-linux-gnu/release/mortgage-calculator  # Save binary\n      - mortgage-calculator.tar.gz                      # Save archive\n    expire_in: 1 week                                    # Keep artifacts for 1 week\n  needs:\n    - build-linux                                        # Depends on Linux build completing\n```\n\nThis GitLab CI configuration defines one packaging job `package:tar` that creates a compressed tar archive\nof the Linux mortgage calculator binary and uploads it to GitLab's Package Registry, while also saving\nboth the binary and archive as pipeline artifacts.\n\n![Package Registry](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314541/uqnejcipnge3r1dngotm.png)\n\n### Publishing to GitLab Container Registry\n\nThe below shows the process of building Dockerfiles and publishing Docker images to GitLab's\nContainer Registry with proper tagging and authentication.\n\n```yaml\n# Package application as Docker image\npackage:docker:\n  image: docker:24.0                                     # Use Docker image for building containers\n  stage: package                                         # Execute during package stage\n  services:\n    - docker:24.0-dind                                   # Docker-in-Docker service for building images\n  before_script:\n    # Login to GitLab Container Registry\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n  script:\n    - docker build -t $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG .  # Build Docker image with commit SHA tag\n    - docker tag $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG $DOCKER_IMAGE_NAME:latest  # Also tag as latest\n    - docker push $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG  # Push tagged image to registry\n    - docker push $DOCKER_IMAGE_NAME:latest             # Push latest image to registry\n```\n\nThis GitLab CI configuration defines one Docker packaging job `package:docker` that builds a Docker\nimage of the mortgage calculator application, tags it with both the commit SHA and \"latest,\" and\nthen pushes both tagged versions to  GitLab's Container Registry.\n\n![Container Registry](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314537/nlodhvdnpqccf0cryfqu.png)\n\n## Security scanning\n\nGitLab security scanning provides comprehensive protection that goes beyond Rust's built-in memory\nsafety guarantees. While Rust prevents many common security vulnerabilities at compile time,\napplications still need protection against dependency vulnerabilities, unsafe code blocks, and\nlogical security issues.\n\nThe platform's Static Application Security Testing (SAST) integrates seamlessly with\nRust's toolchain, providing automated security analysis as part of the CI/CD pipeline\nThis proactive approach catches security issues before they reach production, supporting\nboth compliance requirements and secure development practices.\n\nGitLab's comprehensive security features including SAST, dependency scanning, secret detection\nand more can easily be implemented via templates, as seen below. **Note:** Additional configuration is\nrequired to [enable SAST for Rust](https://docs.gitlab.com/user/application_security/sast/#scan-a-rust-application).\n\n```yaml\n# Include GitLab's security scanning templates for DevSecOps\ninclude:\n  - template: Jobs/SAST.gitlab-ci.yml                    # Static Application Security Testing\n  - template: Jobs/Dependency-Scanning.latest.gitlab-ci.yml  # Scan dependencies for vulnerabilities\n  - template: Jobs/Container-Scanning.gitlab-ci.yml      # Scan Docker containers for vulnerabilities\n  - template: Jobs/SAST-IaC.gitlab-ci.yml               # Infrastructure as Code security scanning\n  - template: Jobs/Secret-Detection.gitlab-ci.yml        # Detect secrets in source code\n```\n\nSecurity scanners can be configured similar to how you would configure any GitLab job:\n\n```yaml\n# Configure Semgrep SAST scanning for Rust files\nsemgrep-sast:\n  rules:\n    - if: $CI_COMMIT_BRANCH                              # Run on any branch\n      exists:\n        - \"**/*.rs\"                                      # Only if Rust files exist\n  variables:\n    SAST_EXCLUDED_PATHS: \".cargo/**\"                     # Exclude Cargo cache from scanning\n\n# Scan Docker container for security vulnerabilities\ncontainer_scanning:\n  stage: container-security                              # Execute during container-security stage\n  variables:\n    CS_IMAGE: $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG      # Image to scan\n    CS_DOCKERFILE_PATH: Dockerfile                       # Path to Dockerfile for context\n  needs:\n    - package:docker                                     # Depends on Docker image being built\n```\n\nWhen vulnerabilites are detected in a merge request (MR), you can see all the vulnerabilites detected\nand use the provided information to either resolve or dismiss vulnerabilities.\n\n![Vulnerability MR view](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314544/gcicke3ltvbcv57mr8zr.png)\n\nYou also can add [Security Policies](http://docs.gitlab.com/user/application_security/policies/) to require approval before vulnerable code can be merged, or to force scanners to run regardless of what is in the `.gitlab-ci.yml`.\n\n![Merge Request Approval Policy](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314538/c95nwocol03lonrr6r4n.png)\n\nYou can triage all the vulnerabilities found in your default branch by using the\n[Vulnerability Report](https://docs.gitlab.com/user/application_security/vulnerability_report/):\n\n![Vulnerability Report](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314544/b0nctigbv1ddpzizkp9x.png)\n\n## Documentation with GitLab Pages\n\n[GitLab Pages](https://docs.gitlab.com/user/project/pages/) provides an excellent platform for\nhosting Rust documentation, integrating seamlessly with Cargo's built-in documentation generation.\nThis creates a powerful workflow where API documentation, project guides, and examples are automatically\ngenerated and deployed with every code change.\n\nThe combination of `cargo doc` and GitLab Pages enables teams to maintain up-to-date documentation\nwithout manual intervention, ensuring that documentation stays synchronized with code changes.\nThis is particularly valuable for Rust projects where comprehensive documentation is essential\nto understand complex APIs and safety contracts.\n\n### Automated documentation deployment\n\nThe following code shows the CI/CD configuration for automatically generating and deploying Rust documentation using\n`cargo doc` and GitLab Pages.\n\n```yaml\n# Generate and publish documentation using GitLab Pages\nbuild-documentation:\n  extends: .rust-template                                # Use Rust template configuration\n  stage: build                                           # Execute during build stage\n  variables:\n    GIT_SUBMODULE_STRATEGY: recursive                    # Clone submodules recursively if needed\n  pages: true                                            # Enable GitLab Pages deployment\n  script:\n    - cargo doc --no-deps                                # Generate documentation without dependencies\n    - mv target/doc public                               # Move docs to public directory for Pages\n  artifacts:\n    paths:\n      - public                                           # GitLab Pages serves from public directory\n  rules:\n    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH     # Only run on default branch (main/master)\n  environment:\n    name: documentation                                  # Environment name for tracking\n    url: $CI_PAGES_URL/mortgage_calculator/index.html   # Documentation URL\n  allow_failure: true                                    # Allow documentation build to fail\n```\n\nOnce the job is complete, you can see the deployed documentation by visiting the [GitLab Environment](https://docs.gitlab.com/ci/environments/) it has been deployed to.\n\n![Pages environment](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314541/aofa6wwjugeyeshuwg9r.png)\n\nThis allows you to manage multiple versions of the documentation in different envrionments.\nThe documentation will be deployed consistent with the `cargo doc` output:\n\n![Pages build](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314541/go0tmljjzoxq5bujsdbv.png)\n\n## Deploy anywhere\n\nOne of GitLab's greatest strengths is its infrastructure-agnostic approach to deployment.\nWhether your organization runs on traditional on-premises servers, modern cloud platforms,\nhybrid environments, or edge computing infrastructure, GitLab's CI/CD system can deploy Rust\napplications seamlessly across any target environment.\n\nGitLab's deployment flexibility stems from its container-first approach and extensive integration\necosystem. The platform supports deployment to virtually any infrastructure that can run\ncontainers, virtual machines, or bare-metal applications. This versatility is particularly\nvaluable for Rust applications, which often need to run in diverse environments ranging from\nresource-constrained embedded systems to high-performance cloud clusters.\n\n### Kubernetes deployment\n\nGitLab simplifies Kubernetes deployments by providing built-in cluster integration and\npre-configured Docker images that include essential tools like Helm and kubectl, eliminating\nthe need for developers to set up complex deployment environments.\n\n```yaml\n# Deploy application to Kubernetes cluster\ndeploy:kubernetes:\n  stage: deploy                                          # Execute during deploy stage\n  image: registry.gitlab.com/gitlab-org/cluster-integration/helm-install-image:helm-3.10.0-kube-1.24.6-alpine-3.15  # Image with Helm and kubectl\n  variables:\n    HELM_HOST: \"localhost:44134\"                         # Helm host configuration\n    HELM_DEPLOY_NAME: mortgage-calc-$CI_COMMIT_REF_NAME  # Deployment name based on branch\n    HELM_DEPLOY_NAMESPACE: calc-app                      # Kubernetes namespace for deployment\n    KUBE_CONTEXT: $CI_PROJECT_PATH:rust-mortgage-calculator  # Kubernetes context to use\n  script:\n    - kubectl config use-context $KUBE_CONTEXT          # Set the kubectl context\n    # Deploy using Helm with custom values and Docker image\n    - helm upgrade --install $HELM_DEPLOY_NAME chart -f chart/values.yaml\n      --namespace $HELM_DEPLOY_NAMESPACE\n      --create-namespace\n      --set image=$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG\n      --set calc.name=$HELM_DEPLOY_NAME \n  needs:\n    - package:docker                                     # Depends on Docker image being available\n```\n\nThis GitLab CI configuration defines one deployment job `deploy:kubernetes` that uses Helm to deploy the\nmortgage calculator application to a Kubernetes cluster, creating or upgrading the deployment in a\ndedicated namespace while using the Docker image built in the previous packaging stage.\n\n![Kubernetes output](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314538/bgmbh4qyfxcnnlqvsitc.png)\n\n## GitLab Duo AI features\n\n[GitLab Duo](https://about.gitlab.com/gitlab-duo/) AI features provide significant advantages for Rust development by offering intelligent code\nsuggestions and explanations specifically tailored to the language's unique syntax and patterns.\n\nThe GitLab platform supports Rust as one of its [directly-supported languages](https://docs.gitlab.com/user/project/repository/code_suggestions/supported_extensions/#supported-languages-by-ide) for every IDE, ensuring high-quality code completion and generation\nthat understands Rust's ownership model, memory safety principles, and idiomatic patterns. \n\n### GitLab Duo Code Suggestions\n\nGitLab Duo's ability to provide contextual code suggestions while typing helps developers navigate Rust's\nsometimes complex syntax more efficiently, reducing the learning curve for newcomers and accelerating\nproductivity for experienced developers.\n\n![Code Suggestions](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314538/uvy6hmzvyd0mnqeic9tq.png)\n\n### GitLab Duo Chat\n\n[GitLab Duo Chat](https://about.gitlab.com/blog/gitlab-duo-chat-gets-agentic-ai-makeover/) complements the code suggestions by offering conversational assistance for explaining\nRust code sections, debugging compiler errors, and providing guidance on best practices. This is\nparticularly valuable in Rust development where compiler error messages, while helpful, can\nsometimes be overwhelming for developers transitioning from other languages. The AI can help interpret\nRust's detailed error messages and suggest fixes, making the development process more efficient by\nreducing the time spent deciphering compilation issues.\n\n![GitLab Duo Chat](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314537/depxztu1h89bez3ylwk3.png)\n\nGitLab Duo Chat can also be used directly from Vulnerability Report to explain a vulnerability. GitLab Duo [Vulnerability Explanation](https://about.gitlab.com/the-source/ai/understand-and-resolve-vulnerabilities-with-ai-powered-gitlab-duo/) represents a\nsignificant advancement in making application security more accessible and actionable for development teams. Rather than simply flagging potential issues with\ncryptic error codes. or technical jargon, AI breaks down each vulnerability's nature, potential impact, and remediation steps in terms that developers at\nall skill levels can quickly grasp. This democratization of security knowledge accelerates the remediation process, reduces the back-and-forth between security\nand development teams, and ultimately helps organizations ship more secure code faster:\n\n![Vulnerability Explain 1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405091/rrcenbfazhhulmrp99yx.png)\n\u003Cp>\u003C/p>\n\n![Vulnerability Explain 2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405094/b3o4lkexyn9lp41ib8ye.png)\n\u003Cp>\u003C/p>\n\n![Vulnerability Explain 3](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405095/y56wq8j5tg10t4dgbgfq.png)\n\u003Cp>\u003C/p>\n\n![Vulnerability Explain 4](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405090/mpc1mst4ydijpqdtlljm.png)\n\u003Cp>\u003C/p>\n\nGitLab Duo also provides [Agentic Chat](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/), which serves as an intelligent development companion for Rust\napplications, offering context-aware assistance throughout the entire development lifecycle. Developers\ncan leverage its conversational interface to generate Rust code snippets, scaffold new Rust projects with\nappropriate `Cargo.toml` configurations, and much more.\n\n### GitLab Duo Vulnerability Resolution\n\nGitLab Duo [Vulnerability Resolution](https://docs.gitlab.com/user/application_security/vulnerabilities/#vulnerability-resolution) uses AI to automatically generate specific code fixes for detected\nsecurity issues, dramatically reducing remediation time from hours to minutes. AI analyzes vulnerable code patterns\nand proposes precise patches tailored to the project's context, language, and dependencies while maintaining code\nfunctionality and style consistency. This automation is particularly effective for common vulnerabilities like SQL\ninjection and cross-site scripting, enabling development teams to maintain velocity while significantly improving their\nsecurity posture without disrupting the development workflow.\n\n![Duo Remediate Example 1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405090/blpwclp68igekkecbyna.png)\n\u003Cp>\u003C/p>\n\n![Duo Remediate Example 2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405090/avvncsspwyirtk14jdbe.png)\n\u003Cp>\u003C/p>\n\n### GitLab Duo Code Review\n\nGitLab Duo's [AI-powered code review](https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/#have-gitlab-duo-review-your-code) enhances the development process by providing intelligent, automated feedback on\nMRs before human reviewers engage. AI analyzes code changes for potential bugs, security vulnerabilities,\nperformance issues, and adherence to coding standards, offering contextual suggestions and explanations that help developers\ncatch issues early. By augmenting traditional peer reviews with consistent, immediate AI insights, this feature reduces\nthe burden on senior developers, accelerates the review cycle, and ensures that basic quality checks are consistently\napplied across all code contributions, ultimately improving code quality while allowing human reviewers to focus on\nhigher-level architectural and business logic concerns.\n\n![Duo Code Review 1](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405090/hewxrp2f22mf2fe4daaa.png)\n\u003Cp>\u003C/p>\n\n![Duo Code Review 2](https://res.cloudinary.com/about-gitlab-com/image/upload/v1756405091/qbw1gi0l4ngysnyjwoy8.png)\n\u003Cp>\u003C/p>\n\nThese are just some of the AI feautures that can be used to allow you to ship more secure Rust software faster than ever.\nTo learn about all the GitLab AI features provided, visit the [GitLab Duo solution page](https://about.gitlab.com/gitlab-duo/).\n\n## The GitLab advantage for Rust\n\nGitLab provides a complete development platform that matches Rust's comprehensive approach:\n\n**Integrated Workflow:**\n- **Single Platform:** Code, CI/CD, security, and deployment in one place\n- **Rust-optimized:** Docker-based builds perfect for Rust's toolchain\n- **Security First:** Built-in security scanning\n- **Enterprise-ready:** Scalable infrastructure for large teams\n\n**Performance Benefits:**\n- **Efficient Caching:** Speeds up Rust's longer compilation times\n- **Parallel Builds:** Maximizes GitLab Runner efficiency\n- **Artifact Management:** Streamlined binary distribution\n\n**Developer Experience:**\n- **Familiar Tools:** Leverage standard Rust tooling (Cargo, Clippy, rustfmt)\n- **Visual Feedback:** Comprehensive dashboards and reporting\n- **Automation:** Reduces manual deployment and testing overhead\n- **GitLab Duo AI:** Ship more secure software faster with AI throughout the entire software development lifecycle\n\nGitLab's platform capabilities perfectly complement Rust's strengths, creating an ecosystem\nwhere safety, performance, and developer productivity converge. Rust applications on GitLab\nrepresent the cutting edge of software development—powered by a platform that understands and\nenhances the Rust development experience.\n\nTo learn more about the benefits of GitLab, sign up for a [free trial of GitLab Ultimate with Duo Enterprise](https://about.gitlab.com/free-trial/).\n","content:en-us:blog:secure-rust-development-with-gitlab.yml","yaml","Secure Rust Development With Gitlab","content","en-us/blog/secure-rust-development-with-gitlab.yml","en-us/blog/secure-rust-development-with-gitlab","yml",{"_path":35,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":37,"_id":457,"_type":28,"title":458,"_source":30,"_file":459,"_stem":460,"_extension":33},"/shared/en-us/main-navigation","en-us",{"logo":38,"freeTrial":43,"sales":48,"login":53,"items":58,"search":388,"minimal":419,"duo":438,"pricingDeployment":447},{"config":39},{"href":40,"dataGaName":41,"dataGaLocation":42},"/","gitlab logo","header",{"text":44,"config":45},"Get free trial",{"href":46,"dataGaName":47,"dataGaLocation":42},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":49,"config":50},"Talk to sales",{"href":51,"dataGaName":52,"dataGaLocation":42},"/sales/","sales",{"text":54,"config":55},"Sign in",{"href":56,"dataGaName":57,"dataGaLocation":42},"https://gitlab.com/users/sign_in/","sign in",[59,103,200,205,309,369],{"text":60,"config":61,"cards":63,"footer":86},"Platform",{"dataNavLevelOne":62},"platform",[64,70,78],{"title":60,"description":65,"link":66},"The most comprehensive AI-powered DevSecOps Platform",{"text":67,"config":68},"Explore our Platform",{"href":69,"dataGaName":62,"dataGaLocation":42},"/platform/",{"title":71,"description":72,"link":73},"GitLab Duo (AI)","Build software faster with AI at every stage of development",{"text":74,"config":75},"Meet GitLab Duo",{"href":76,"dataGaName":77,"dataGaLocation":42},"/gitlab-duo/","gitlab duo ai",{"title":79,"description":80,"link":81},"Why GitLab","10 reasons why Enterprises choose GitLab",{"text":82,"config":83},"Learn more",{"href":84,"dataGaName":85,"dataGaLocation":42},"/why-gitlab/","why gitlab",{"title":87,"items":88},"Get started with",[89,94,99],{"text":90,"config":91},"Platform Engineering",{"href":92,"dataGaName":93,"dataGaLocation":42},"/solutions/platform-engineering/","platform engineering",{"text":95,"config":96},"Developer Experience",{"href":97,"dataGaName":98,"dataGaLocation":42},"/developer-experience/","Developer experience",{"text":100,"config":101},"MLOps",{"href":102,"dataGaName":100,"dataGaLocation":42},"/topics/devops/the-role-of-ai-in-devops/",{"text":104,"left":14,"config":105,"link":107,"lists":111,"footer":182},"Product",{"dataNavLevelOne":106},"solutions",{"text":108,"config":109},"View all Solutions",{"href":110,"dataGaName":106,"dataGaLocation":42},"/solutions/",[112,137,161],{"title":113,"description":114,"link":115,"items":120},"Automation","CI/CD and automation to accelerate deployment",{"config":116},{"icon":117,"href":118,"dataGaName":119,"dataGaLocation":42},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[121,125,129,133],{"text":122,"config":123},"CI/CD",{"href":124,"dataGaLocation":42,"dataGaName":122},"/solutions/continuous-integration/",{"text":126,"config":127},"AI-Assisted Development",{"href":76,"dataGaLocation":42,"dataGaName":128},"AI assisted development",{"text":130,"config":131},"Source Code Management",{"href":132,"dataGaLocation":42,"dataGaName":130},"/solutions/source-code-management/",{"text":134,"config":135},"Automated Software Delivery",{"href":118,"dataGaLocation":42,"dataGaName":136},"Automated software delivery",{"title":138,"description":139,"link":140,"items":145},"Security","Deliver code faster without compromising security",{"config":141},{"href":142,"dataGaName":143,"dataGaLocation":42,"icon":144},"/solutions/security-compliance/","security and compliance","ShieldCheckLight",[146,151,156],{"text":147,"config":148},"Application Security Testing",{"href":149,"dataGaName":150,"dataGaLocation":42},"/solutions/application-security-testing/","Application security testing",{"text":152,"config":153},"Software Supply Chain Security",{"href":154,"dataGaLocation":42,"dataGaName":155},"/solutions/supply-chain/","Software supply chain security",{"text":157,"config":158},"Software Compliance",{"href":159,"dataGaName":160,"dataGaLocation":42},"/solutions/software-compliance/","software compliance",{"title":162,"link":163,"items":168},"Measurement",{"config":164},{"icon":165,"href":166,"dataGaName":167,"dataGaLocation":42},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[169,173,177],{"text":170,"config":171},"Visibility & Measurement",{"href":166,"dataGaLocation":42,"dataGaName":172},"Visibility and Measurement",{"text":174,"config":175},"Value Stream Management",{"href":176,"dataGaLocation":42,"dataGaName":174},"/solutions/value-stream-management/",{"text":178,"config":179},"Analytics & Insights",{"href":180,"dataGaLocation":42,"dataGaName":181},"/solutions/analytics-and-insights/","Analytics and insights",{"title":183,"items":184},"GitLab for",[185,190,195],{"text":186,"config":187},"Enterprise",{"href":188,"dataGaLocation":42,"dataGaName":189},"/enterprise/","enterprise",{"text":191,"config":192},"Small Business",{"href":193,"dataGaLocation":42,"dataGaName":194},"/small-business/","small business",{"text":196,"config":197},"Public Sector",{"href":198,"dataGaLocation":42,"dataGaName":199},"/solutions/public-sector/","public sector",{"text":201,"config":202},"Pricing",{"href":203,"dataGaName":204,"dataGaLocation":42,"dataNavLevelOne":204},"/pricing/","pricing",{"text":206,"config":207,"link":209,"lists":213,"feature":296},"Resources",{"dataNavLevelOne":208},"resources",{"text":210,"config":211},"View all resources",{"href":212,"dataGaName":208,"dataGaLocation":42},"/resources/",[214,247,269],{"title":215,"items":216},"Getting started",[217,222,227,232,237,242],{"text":218,"config":219},"Install",{"href":220,"dataGaName":221,"dataGaLocation":42},"/install/","install",{"text":223,"config":224},"Quick start guides",{"href":225,"dataGaName":226,"dataGaLocation":42},"/get-started/","quick setup checklists",{"text":228,"config":229},"Learn",{"href":230,"dataGaLocation":42,"dataGaName":231},"https://university.gitlab.com/","learn",{"text":233,"config":234},"Product documentation",{"href":235,"dataGaName":236,"dataGaLocation":42},"https://docs.gitlab.com/","product documentation",{"text":238,"config":239},"Best practice videos",{"href":240,"dataGaName":241,"dataGaLocation":42},"/getting-started-videos/","best practice videos",{"text":243,"config":244},"Integrations",{"href":245,"dataGaName":246,"dataGaLocation":42},"/integrations/","integrations",{"title":248,"items":249},"Discover",[250,255,259,264],{"text":251,"config":252},"Customer success stories",{"href":253,"dataGaName":254,"dataGaLocation":42},"/customers/","customer success stories",{"text":256,"config":257},"Blog",{"href":258,"dataGaName":5,"dataGaLocation":42},"/blog/",{"text":260,"config":261},"Remote",{"href":262,"dataGaName":263,"dataGaLocation":42},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":265,"config":266},"TeamOps",{"href":267,"dataGaName":268,"dataGaLocation":42},"/teamops/","teamops",{"title":270,"items":271},"Connect",[272,277,281,286,291],{"text":273,"config":274},"GitLab Services",{"href":275,"dataGaName":276,"dataGaLocation":42},"/services/","services",{"text":278,"config":279},"Community",{"href":280,"dataGaName":20,"dataGaLocation":42},"/community/",{"text":282,"config":283},"Forum",{"href":284,"dataGaName":285,"dataGaLocation":42},"https://forum.gitlab.com/","forum",{"text":287,"config":288},"Events",{"href":289,"dataGaName":290,"dataGaLocation":42},"/events/","events",{"text":292,"config":293},"Partners",{"href":294,"dataGaName":295,"dataGaLocation":42},"/partners/","partners",{"backgroundColor":297,"textColor":298,"text":299,"image":300,"link":304},"#2f2a6b","#fff","Insights for the future of software development",{"altText":301,"config":302},"the source promo card",{"src":303},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":305,"config":306},"Read the latest",{"href":307,"dataGaName":308,"dataGaLocation":42},"/the-source/","the source",{"text":310,"config":311,"lists":313},"Company",{"dataNavLevelOne":312},"company",[314],{"items":315},[316,321,327,329,334,339,344,349,354,359,364],{"text":317,"config":318},"About",{"href":319,"dataGaName":320,"dataGaLocation":42},"/company/","about",{"text":322,"config":323,"footerGa":326},"Jobs",{"href":324,"dataGaName":325,"dataGaLocation":42},"/jobs/","jobs",{"dataGaName":325},{"text":287,"config":328},{"href":289,"dataGaName":290,"dataGaLocation":42},{"text":330,"config":331},"Leadership",{"href":332,"dataGaName":333,"dataGaLocation":42},"/company/team/e-group/","leadership",{"text":335,"config":336},"Team",{"href":337,"dataGaName":338,"dataGaLocation":42},"/company/team/","team",{"text":340,"config":341},"Handbook",{"href":342,"dataGaName":343,"dataGaLocation":42},"https://handbook.gitlab.com/","handbook",{"text":345,"config":346},"Investor relations",{"href":347,"dataGaName":348,"dataGaLocation":42},"https://ir.gitlab.com/","investor relations",{"text":350,"config":351},"Trust Center",{"href":352,"dataGaName":353,"dataGaLocation":42},"/security/","trust center",{"text":355,"config":356},"AI Transparency Center",{"href":357,"dataGaName":358,"dataGaLocation":42},"/ai-transparency-center/","ai transparency center",{"text":360,"config":361},"Newsletter",{"href":362,"dataGaName":363,"dataGaLocation":42},"/company/contact/","newsletter",{"text":365,"config":366},"Press",{"href":367,"dataGaName":368,"dataGaLocation":42},"/press/","press",{"text":370,"config":371,"lists":372},"Contact us",{"dataNavLevelOne":312},[373],{"items":374},[375,378,383],{"text":49,"config":376},{"href":51,"dataGaName":377,"dataGaLocation":42},"talk to sales",{"text":379,"config":380},"Get help",{"href":381,"dataGaName":382,"dataGaLocation":42},"/support/","get help",{"text":384,"config":385},"Customer portal",{"href":386,"dataGaName":387,"dataGaLocation":42},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":389,"login":390,"suggestions":397},"Close",{"text":391,"link":392},"To search repositories and projects, login to",{"text":393,"config":394},"gitlab.com",{"href":56,"dataGaName":395,"dataGaLocation":396},"search login","search",{"text":398,"default":399},"Suggestions",[400,402,406,408,412,416],{"text":71,"config":401},{"href":76,"dataGaName":71,"dataGaLocation":396},{"text":403,"config":404},"Code Suggestions (AI)",{"href":405,"dataGaName":403,"dataGaLocation":396},"/solutions/code-suggestions/",{"text":122,"config":407},{"href":124,"dataGaName":122,"dataGaLocation":396},{"text":409,"config":410},"GitLab on AWS",{"href":411,"dataGaName":409,"dataGaLocation":396},"/partners/technology-partners/aws/",{"text":413,"config":414},"GitLab on Google Cloud",{"href":415,"dataGaName":413,"dataGaLocation":396},"/partners/technology-partners/google-cloud-platform/",{"text":417,"config":418},"Why GitLab?",{"href":84,"dataGaName":417,"dataGaLocation":396},{"freeTrial":420,"mobileIcon":425,"desktopIcon":430,"secondaryButton":433},{"text":421,"config":422},"Start free trial",{"href":423,"dataGaName":47,"dataGaLocation":424},"https://gitlab.com/-/trials/new/","nav",{"altText":426,"config":427},"Gitlab Icon",{"src":428,"dataGaName":429,"dataGaLocation":424},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":426,"config":431},{"src":432,"dataGaName":429,"dataGaLocation":424},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":434,"config":435},"Get Started",{"href":436,"dataGaName":437,"dataGaLocation":424},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":439,"mobileIcon":443,"desktopIcon":445},{"text":440,"config":441},"Learn more about GitLab Duo",{"href":76,"dataGaName":442,"dataGaLocation":424},"gitlab duo",{"altText":426,"config":444},{"src":428,"dataGaName":429,"dataGaLocation":424},{"altText":426,"config":446},{"src":432,"dataGaName":429,"dataGaLocation":424},{"freeTrial":448,"mobileIcon":453,"desktopIcon":455},{"text":449,"config":450},"Back to pricing",{"href":203,"dataGaName":451,"dataGaLocation":424,"icon":452},"back to pricing","GoBack",{"altText":426,"config":454},{"src":428,"dataGaName":429,"dataGaLocation":424},{"altText":426,"config":456},{"src":432,"dataGaName":429,"dataGaLocation":424},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":462,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"title":463,"button":464,"image":469,"config":473,"_id":475,"_type":28,"_source":30,"_file":476,"_stem":477,"_extension":33},"/shared/en-us/banner","is now in public beta!",{"text":465,"config":466},"Try the Beta",{"href":467,"dataGaName":468,"dataGaLocation":42},"/gitlab-duo/agent-platform/","duo banner",{"altText":470,"config":471},"GitLab Duo Agent Platform",{"src":472},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":474},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":479,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":480,"_id":684,"_type":28,"title":685,"_source":30,"_file":686,"_stem":687,"_extension":33},"/shared/en-us/main-footer",{"text":481,"source":482,"edit":488,"contribute":493,"config":498,"items":503,"minimal":676},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":483,"config":484},"View page source",{"href":485,"dataGaName":486,"dataGaLocation":487},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":489,"config":490},"Edit this page",{"href":491,"dataGaName":492,"dataGaLocation":487},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":494,"config":495},"Please contribute",{"href":496,"dataGaName":497,"dataGaLocation":487},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":499,"facebook":500,"youtube":501,"linkedin":502},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[504,527,583,612,646],{"title":60,"links":505,"subMenu":510},[506],{"text":507,"config":508},"DevSecOps platform",{"href":69,"dataGaName":509,"dataGaLocation":487},"devsecops platform",[511],{"title":201,"links":512},[513,517,522],{"text":514,"config":515},"View plans",{"href":203,"dataGaName":516,"dataGaLocation":487},"view plans",{"text":518,"config":519},"Why Premium?",{"href":520,"dataGaName":521,"dataGaLocation":487},"/pricing/premium/","why premium",{"text":523,"config":524},"Why Ultimate?",{"href":525,"dataGaName":526,"dataGaLocation":487},"/pricing/ultimate/","why ultimate",{"title":528,"links":529},"Solutions",[530,535,537,539,544,549,553,556,560,565,567,570,573,578],{"text":531,"config":532},"Digital transformation",{"href":533,"dataGaName":534,"dataGaLocation":487},"/topics/digital-transformation/","digital transformation",{"text":147,"config":536},{"href":149,"dataGaName":147,"dataGaLocation":487},{"text":136,"config":538},{"href":118,"dataGaName":119,"dataGaLocation":487},{"text":540,"config":541},"Agile development",{"href":542,"dataGaName":543,"dataGaLocation":487},"/solutions/agile-delivery/","agile delivery",{"text":545,"config":546},"Cloud transformation",{"href":547,"dataGaName":548,"dataGaLocation":487},"/topics/cloud-native/","cloud transformation",{"text":550,"config":551},"SCM",{"href":132,"dataGaName":552,"dataGaLocation":487},"source code management",{"text":122,"config":554},{"href":124,"dataGaName":555,"dataGaLocation":487},"continuous integration & delivery",{"text":557,"config":558},"Value stream management",{"href":176,"dataGaName":559,"dataGaLocation":487},"value stream management",{"text":561,"config":562},"GitOps",{"href":563,"dataGaName":564,"dataGaLocation":487},"/solutions/gitops/","gitops",{"text":186,"config":566},{"href":188,"dataGaName":189,"dataGaLocation":487},{"text":568,"config":569},"Small business",{"href":193,"dataGaName":194,"dataGaLocation":487},{"text":571,"config":572},"Public sector",{"href":198,"dataGaName":199,"dataGaLocation":487},{"text":574,"config":575},"Education",{"href":576,"dataGaName":577,"dataGaLocation":487},"/solutions/education/","education",{"text":579,"config":580},"Financial services",{"href":581,"dataGaName":582,"dataGaLocation":487},"/solutions/finance/","financial services",{"title":206,"links":584},[585,587,589,591,594,596,598,600,602,604,606,608,610],{"text":218,"config":586},{"href":220,"dataGaName":221,"dataGaLocation":487},{"text":223,"config":588},{"href":225,"dataGaName":226,"dataGaLocation":487},{"text":228,"config":590},{"href":230,"dataGaName":231,"dataGaLocation":487},{"text":233,"config":592},{"href":235,"dataGaName":593,"dataGaLocation":487},"docs",{"text":256,"config":595},{"href":258,"dataGaName":5,"dataGaLocation":487},{"text":251,"config":597},{"href":253,"dataGaName":254,"dataGaLocation":487},{"text":260,"config":599},{"href":262,"dataGaName":263,"dataGaLocation":487},{"text":273,"config":601},{"href":275,"dataGaName":276,"dataGaLocation":487},{"text":265,"config":603},{"href":267,"dataGaName":268,"dataGaLocation":487},{"text":278,"config":605},{"href":280,"dataGaName":20,"dataGaLocation":487},{"text":282,"config":607},{"href":284,"dataGaName":285,"dataGaLocation":487},{"text":287,"config":609},{"href":289,"dataGaName":290,"dataGaLocation":487},{"text":292,"config":611},{"href":294,"dataGaName":295,"dataGaLocation":487},{"title":310,"links":613},[614,616,618,620,622,624,626,630,635,637,639,641],{"text":317,"config":615},{"href":319,"dataGaName":312,"dataGaLocation":487},{"text":322,"config":617},{"href":324,"dataGaName":325,"dataGaLocation":487},{"text":330,"config":619},{"href":332,"dataGaName":333,"dataGaLocation":487},{"text":335,"config":621},{"href":337,"dataGaName":338,"dataGaLocation":487},{"text":340,"config":623},{"href":342,"dataGaName":343,"dataGaLocation":487},{"text":345,"config":625},{"href":347,"dataGaName":348,"dataGaLocation":487},{"text":627,"config":628},"Sustainability",{"href":629,"dataGaName":627,"dataGaLocation":487},"/sustainability/",{"text":631,"config":632},"Diversity, inclusion and belonging (DIB)",{"href":633,"dataGaName":634,"dataGaLocation":487},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":350,"config":636},{"href":352,"dataGaName":353,"dataGaLocation":487},{"text":360,"config":638},{"href":362,"dataGaName":363,"dataGaLocation":487},{"text":365,"config":640},{"href":367,"dataGaName":368,"dataGaLocation":487},{"text":642,"config":643},"Modern Slavery Transparency Statement",{"href":644,"dataGaName":645,"dataGaLocation":487},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":647,"links":648},"Contact Us",[649,652,654,656,661,666,671],{"text":650,"config":651},"Contact an expert",{"href":51,"dataGaName":52,"dataGaLocation":487},{"text":379,"config":653},{"href":381,"dataGaName":382,"dataGaLocation":487},{"text":384,"config":655},{"href":386,"dataGaName":387,"dataGaLocation":487},{"text":657,"config":658},"Status",{"href":659,"dataGaName":660,"dataGaLocation":487},"https://status.gitlab.com/","status",{"text":662,"config":663},"Terms of use",{"href":664,"dataGaName":665,"dataGaLocation":487},"/terms/","terms of use",{"text":667,"config":668},"Privacy statement",{"href":669,"dataGaName":670,"dataGaLocation":487},"/privacy/","privacy statement",{"text":672,"config":673},"Cookie preferences",{"dataGaName":674,"dataGaLocation":487,"id":675,"isOneTrustButton":14},"cookie preferences","ot-sdk-btn",{"items":677},[678,680,682],{"text":662,"config":679},{"href":664,"dataGaName":665,"dataGaLocation":487},{"text":667,"config":681},{"href":669,"dataGaName":670,"dataGaLocation":487},{"text":672,"config":683},{"dataGaName":674,"dataGaLocation":487,"id":675,"isOneTrustButton":14},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",[689],{"_path":690,"_dir":691,"_draft":6,"_partial":6,"_locale":7,"content":692,"config":696,"_id":698,"_type":28,"title":18,"_source":30,"_file":699,"_stem":700,"_extension":33},"/en-us/blog/authors/fernando-diaz","authors",{"name":18,"config":693},{"headshot":694,"ctfId":695},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659556/Blog/Author%20Headshots/fern_diaz.png","fjdiaz",{"template":697},"BlogAuthor","content:en-us:blog:authors:fernando-diaz.yml","en-us/blog/authors/fernando-diaz.yml","en-us/blog/authors/fernando-diaz",{"_path":702,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"header":703,"eyebrow":704,"blurb":705,"button":706,"secondaryButton":710,"_id":712,"_type":28,"title":713,"_source":30,"_file":714,"_stem":715,"_extension":33},"/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":44,"config":707},{"href":708,"dataGaName":47,"dataGaLocation":709},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":49,"config":711},{"href":51,"dataGaName":52,"dataGaLocation":709},"content:shared:en-us:next-steps.yml","Next Steps","shared/en-us/next-steps.yml","shared/en-us/next-steps",1759347828893]