[{"data":1,"prerenderedAt":977},["ShallowReactive",2],{"/blog/fine-grained-pats":3,"navigation-en-us":191,"banner-en-us":619,"footer-en-us":629,"blog-post-authors-en-us-Nelly Vahab":874,"blog-related-posts-en-us-fine-grained-pats":890,"blog-promotions-en-us":915,"next-steps-en-us":967},{"id":4,"title":5,"authors":6,"body":8,"category":170,"date":171,"description":172,"extension":173,"externalUrl":174,"faq":174,"featured":175,"heroImage":176,"meta":177,"navigation":178,"path":179,"seo":180,"slug":184,"stem":185,"tags":186,"template":189,"updatedDate":174,"__hash__":190},"blogPosts/en-us/blog/fine-grained-pats.md","Limit credential exposure with fine-grained personal access tokens",[7],"Nelly Vahab",{"type":9,"value":10,"toc":162},"minimark",[11,24,29,32,35,39,42,75,87,94,97,101,111,114,118,121,144,153],[12,13,14,15,19,20,23],"p",{},"Personal access tokens (PATs) authenticate most of the automation that runs in GitLab. When a token is issued with a broad scope like ",[16,17,18],"code",{},"api"," or ",[16,21,22],{},"read_api",", it extends permissions across many projects and groups. Fine-grained permissions for PATs, now in beta, let you scope a token to exactly the privileges the job requires — read access to one project's code, say, instead of read access across every project the user can reach.",[25,26,28],"h2",{"id":27},"the-case-for-narrowing-pat-privileges","The case for narrowing PAT privileges",[12,30,31],{},"A maintainer on 20 projects might carry a single token that can read source, modify pipelines, pull from the container registry, and decrypt CI/CD variables across all those projects. The token is scoped to the user, not a specific task, so if it leaks, it exposes every project the user can touch.",[12,33,34],{},"Fine-grained PATs let teams ensure that scope follows the task: A read-only token issued for one project is read-only on that project alone. When exposed, investigation and remediation start and end there. Fine-grained PATs join safeguards like lifetime limits and automatic revocation, which limit how long an attacker can misuse a stolen token.",[25,36,38],{"id":37},"whats-new","What’s new",[12,40,41],{},"You can define a fine-grained PAT along two dimensions:",[43,44,45,53],"ul",{},[46,47,48,52],"li",{},[49,50,51],"strong",{},"Where it can reach:"," personal projects only, all projects and groups you’re a member of, or only the projects and groups you select.",[46,54,55,58,59,63,64,63,67,70,71,74],{},[49,56,57],{},"What it can do there:"," per‑resource permissions across the things developers automate against (Issues, Merge Requests, Pipelines, Repositories, Container Registry, and more), with ",[60,61,62],"em",{},"Create",", ",[60,65,66],{},"Read",[60,68,69],{},"Update",", and ",[60,72,73],{},"Delete"," assigned independently for each resource.",[12,76,77,78,80,81,83,84,86],{},"Instead of one PAT that can do everything you can do, you issue one PAT per job, carrying exactly that job's permission set. A pipeline that pushes container images doesn't get an ",[16,79,18],{},"-scoped token; it gets a token scoped to the Container Registry on a single project, with ",[60,82,62],{}," and ",[60,85,66],{}," and nothing else. If that token leaks, the blast radius is one registry on one project, not your entire footprint.",[12,88,89],{},[90,91],"img",{"alt":92,"src":93,"title":92},"Define a fine-grained PAT's scope by selecting which groups or projects it can reach, then assigning per-resource permissions.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778165319/xd7h7xets7s2muovbpwe.png",[12,95,96],{},"The tokens table has been updated to make this auditable at a glance. Every token you’ve created (coarse or fine-grained) shows the exact scopes and per-resource permissions, so over-privileged tokens are easier to spot during reviews.",[25,98,100],{"id":99},"todays-coverage-and-future-roadmap","Today’s coverage and future roadmap",[12,102,103,104,110],{},"We advise against using fine-grained PATs in production workloads until general availability. Fine-grained PATs currently cover about 75% of ",[105,106,109],"a",{"href":107,"rel":108},"https://docs.gitlab.com/auth/tokens/fine_grained_access_tokens/#available-fine-grained-permissions",[],"REST API endpoints",". In the months ahead, we're adding support for the remaining REST endpoints and expanding GraphQL coverage.",[12,112,113],{},"Existing PATs continue working as before. During the beta, you can create traditional and fine-grained PATs side by side as you evaluate the new model.",[25,115,117],{"id":116},"learn-more-and-share-feedback","Learn more and share feedback",[12,119,120],{},"To create a fine-grained personal access token:",[122,123,124,130,141],"ol",{},[46,125,126,127],{},"Navigate to ",[49,128,129],{},"User Settings → Personal Access Tokens.",[46,131,132,133,136,137,140],{},"Choose ",[49,134,135],{},"Fine-grained token"," from the ",[49,138,139],{},"Generate token"," dropdown.",[46,142,143],{},"Define the scope.",[12,145,146,147,152],{},"To view administrative controls and the full list of supported resources and permissions, check out access the ",[105,148,151],{"href":149,"rel":150},"https://docs.gitlab.com/auth/tokens/fine_grained_access_tokens/",[],"fine-grained personal access tokens documentation",".",[12,154,155,156,161],{},"We’d love to hear how fine-grained permissions for PATs work in your environment, and what else you need to fully adopt least-privilege token patterns. Please share your feedback in this ",[105,157,160],{"href":158,"rel":159},"https://gitlab.com/gitlab-org/gitlab/-/work_items/553887",[],"roadmap epic"," to help shape our next iterations.",{"title":163,"searchDepth":164,"depth":164,"links":165},"",2,[166,167,168,169],{"id":27,"depth":164,"text":28},{"id":37,"depth":164,"text":38},{"id":99,"depth":164,"text":100},{"id":116,"depth":164,"text":117},"security","2026-05-07","Explore tokens that carry only the permissions they need, and nothing more. Then join the beta program.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772029801/qk75nu1eezxa6aiefpup.png",{},true,"/en-us/blog/fine-grained-pats",{"config":181,"title":182,"ogTitle":183,"description":172},{"noIndex":175},"Limit token exposure with fine-grained PATs","A leaked personal access token shouldn't expose every project its owner can reach. Fine-grained PATs scope each token’s permissions to the job.","fine-grained-pats","en-us/blog/fine-grained-pats",[170,187,188],"product","features","BlogPost","Uoi_am61uG439ADOGdigtZrJPjzD9I9NUxhDyh_zt1U",{"logo":192,"freeTrial":197,"sales":202,"login":207,"items":212,"search":539,"minimal":570,"duo":589,"switchNav":598,"pricingDeployment":609},{"config":193},{"href":194,"dataGaName":195,"dataGaLocation":196},"/","gitlab logo","header",{"text":198,"config":199},"Get free trial",{"href":200,"dataGaName":201,"dataGaLocation":196},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":203,"config":204},"Request a demo",{"href":205,"dataGaName":206,"dataGaLocation":196},"/sales/?contact-topic=request-demo","sales",{"text":208,"config":209},"Sign in",{"href":210,"dataGaName":211,"dataGaLocation":196},"https://gitlab.com/users/sign_in/","sign in",[213,242,342,347,461,517],{"text":214,"config":215,"menu":217},"Platform",{"dataNavLevelOne":216},"platform",{"type":218,"columns":219},"cards",[220,226,234],{"title":214,"description":221,"link":222},"The intelligent orchestration platform for DevSecOps",{"text":223,"config":224},"Explore our Platform",{"href":225,"dataGaName":216,"dataGaLocation":196},"/platform/",{"title":227,"description":228,"link":229},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":230,"config":231},"Meet GitLab Duo",{"href":232,"dataGaName":233,"dataGaLocation":196},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":235,"description":236,"link":237},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":238,"config":239},"Learn more",{"href":240,"dataGaName":241,"dataGaLocation":196},"/why-gitlab/","why gitlab",{"text":243,"left":178,"config":244,"menu":246},"Product",{"dataNavLevelOne":245},"solutions",{"type":247,"link":248,"columns":252,"feature":321},"lists",{"text":249,"config":250},"View all Solutions",{"href":251,"dataGaName":245,"dataGaLocation":196},"/solutions/",[253,277,300],{"title":254,"description":255,"link":256,"items":261},"Automation","CI/CD and automation to accelerate deployment",{"config":257},{"icon":258,"href":259,"dataGaName":260,"dataGaLocation":196},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[262,266,269,273],{"text":263,"config":264},"CI/CD",{"href":265,"dataGaLocation":196,"dataGaName":263},"/solutions/continuous-integration/",{"text":227,"config":267},{"href":232,"dataGaLocation":196,"dataGaName":268},"gitlab duo agent platform - product menu",{"text":270,"config":271},"Source Code Management",{"href":272,"dataGaLocation":196,"dataGaName":270},"/solutions/source-code-management/",{"text":274,"config":275},"Automated Software Delivery",{"href":259,"dataGaLocation":196,"dataGaName":276},"Automated software delivery",{"title":278,"description":279,"link":280,"items":285},"Security","Deliver code faster without compromising security",{"config":281},{"href":282,"dataGaName":283,"dataGaLocation":196,"icon":284},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[286,290,295],{"text":287,"config":288},"Application Security Testing",{"href":282,"dataGaName":289,"dataGaLocation":196},"Application security testing",{"text":291,"config":292},"Software Supply Chain Security",{"href":293,"dataGaLocation":196,"dataGaName":294},"/solutions/supply-chain/","Software supply chain security",{"text":296,"config":297},"Software Compliance",{"href":298,"dataGaName":299,"dataGaLocation":196},"/solutions/software-compliance/","software compliance",{"title":301,"link":302,"items":307},"Measurement",{"config":303},{"icon":304,"href":305,"dataGaName":306,"dataGaLocation":196},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[308,312,316],{"text":309,"config":310},"Visibility & Measurement",{"href":305,"dataGaLocation":196,"dataGaName":311},"Visibility and Measurement",{"text":313,"config":314},"Value Stream Management",{"href":315,"dataGaLocation":196,"dataGaName":313},"/solutions/value-stream-management/",{"text":317,"config":318},"Analytics & Insights",{"href":319,"dataGaLocation":196,"dataGaName":320},"/solutions/analytics-and-insights/","Analytics and insights",{"title":322,"type":247,"items":323},"GitLab for",[324,330,336],{"text":325,"config":326},"Enterprise",{"icon":327,"href":328,"dataGaLocation":196,"dataGaName":329},"Building","/enterprise/","enterprise",{"text":331,"config":332},"Small Business",{"icon":333,"href":334,"dataGaLocation":196,"dataGaName":335},"Work","/small-business/","small business",{"text":337,"config":338},"Public Sector",{"icon":339,"href":340,"dataGaLocation":196,"dataGaName":341},"Organization","/solutions/public-sector/","public sector",{"text":343,"config":344},"Pricing",{"href":345,"dataGaName":346,"dataGaLocation":196,"dataNavLevelOne":346},"/pricing/","pricing",{"text":348,"config":349,"menu":351},"Resources",{"dataNavLevelOne":350},"resources",{"type":247,"link":352,"columns":356,"feature":450},{"text":353,"config":354},"View all resources",{"href":355,"dataGaName":350,"dataGaLocation":196},"/resources/",[357,390,417],{"title":358,"items":359},"Getting started",[360,365,370,375,380,385],{"text":361,"config":362},"Install",{"href":363,"dataGaName":364,"dataGaLocation":196},"/install/","install",{"text":366,"config":367},"Quick start guides",{"href":368,"dataGaName":369,"dataGaLocation":196},"/get-started/","quick setup checklists",{"text":371,"config":372},"Learn",{"href":373,"dataGaLocation":196,"dataGaName":374},"https://university.gitlab.com/","learn",{"text":376,"config":377},"Product documentation",{"href":378,"dataGaName":379,"dataGaLocation":196},"https://docs.gitlab.com/","product documentation",{"text":381,"config":382},"Best practice videos",{"href":383,"dataGaName":384,"dataGaLocation":196},"/getting-started-videos/","best practice videos",{"text":386,"config":387},"Integrations",{"href":388,"dataGaName":389,"dataGaLocation":196},"/integrations/","integrations",{"title":391,"items":392},"Discover",[393,398,403,408,412],{"text":394,"config":395},"Customer success stories",{"href":396,"dataGaName":397,"dataGaLocation":196},"/customers/","customer success stories",{"text":399,"config":400},"Blog",{"href":401,"dataGaName":402,"dataGaLocation":196},"/blog/","blog",{"text":404,"config":405},"Demo Hub",{"href":406,"dataGaName":407,"dataGaLocation":196},"/demo-hub/","demo hub",{"text":409,"config":410},"The Source",{"href":411,"dataGaName":402,"dataGaLocation":196},"/the-source/",{"text":413,"config":414},"Remote",{"href":415,"dataGaName":416,"dataGaLocation":196},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":418,"items":419},"Connect",[420,425,430,435,440,445],{"text":421,"config":422},"GitLab Services",{"href":423,"dataGaName":424,"dataGaLocation":196},"/services/","services",{"text":426,"config":427},"Contribute",{"href":428,"dataGaName":429,"dataGaLocation":196},"https://contributors.gitlab.com","contribute",{"text":431,"config":432},"Community",{"href":433,"dataGaName":434,"dataGaLocation":196},"/community/","community",{"text":436,"config":437},"Forum",{"href":438,"dataGaName":439,"dataGaLocation":196},"https://forum.gitlab.com/","forum",{"text":441,"config":442},"Events",{"href":443,"dataGaName":444,"dataGaLocation":196},"/events/","events",{"text":446,"config":447},"Partners",{"href":448,"dataGaName":449,"dataGaLocation":196},"/partners/","partners",{"config":451,"title":454,"text":455,"link":456},{"background":452,"textColor":453},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":457,"config":458},"Read the latest",{"href":459,"dataGaName":460,"dataGaLocation":196},"/whats-new/","whats new",{"text":462,"config":463,"menu":465},"Company",{"dataNavLevelOne":464},"company",{"type":247,"columns":466},[467],{"items":468},[469,474,480,482,487,492,497,502,507,512],{"text":470,"config":471},"About",{"href":472,"dataGaName":473,"dataGaLocation":196},"/company/","about",{"text":475,"config":476,"footerGa":479},"Jobs",{"href":477,"dataGaName":478,"dataGaLocation":196},"/jobs/","jobs",{"dataGaName":478},{"text":441,"config":481},{"href":443,"dataGaName":444,"dataGaLocation":196},{"text":483,"config":484},"Leadership",{"href":485,"dataGaName":486,"dataGaLocation":196},"/company/team/e-group/","leadership",{"text":488,"config":489},"Handbook",{"href":490,"dataGaName":491,"dataGaLocation":196},"https://handbook.gitlab.com/","handbook",{"text":493,"config":494},"Investor relations",{"href":495,"dataGaName":496,"dataGaLocation":196},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":498,"config":499},"Trust Center",{"href":500,"dataGaName":501,"dataGaLocation":196},"/security/","trust center",{"text":503,"config":504},"AI Transparency Center",{"href":505,"dataGaName":506,"dataGaLocation":196},"/ai-transparency-center/","ai transparency center",{"text":508,"config":509},"Newsletter",{"href":510,"dataGaName":511,"dataGaLocation":196},"/company/contact/#contact-forms","newsletter",{"text":513,"config":514},"Press",{"href":515,"dataGaName":516,"dataGaLocation":196},"/press/","press",{"text":518,"config":519,"menu":520},"Contact us",{"dataNavLevelOne":464},{"type":247,"columns":521},[522],{"items":523},[524,529,534],{"text":525,"config":526},"Talk to sales",{"href":527,"dataGaName":528,"dataGaLocation":196},"/sales/","talk to sales",{"text":530,"config":531},"Support portal",{"href":532,"dataGaName":533,"dataGaLocation":196},"https://support.gitlab.com/hc/en-us","support portal",{"text":535,"config":536},"Customer portal",{"href":537,"dataGaName":538,"dataGaLocation":196},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":540,"login":541,"suggestions":548},"Close",{"text":542,"link":543},"To search repositories and projects, login to",{"text":544,"config":545},"gitlab.com",{"href":210,"dataGaName":546,"dataGaLocation":547},"search login","search",{"text":549,"default":550},"Suggestions",[551,553,557,559,563,567],{"text":227,"config":552},{"href":232,"dataGaName":227,"dataGaLocation":547},{"text":554,"config":555},"Code Suggestions (AI)",{"href":556,"dataGaName":554,"dataGaLocation":547},"/solutions/code-suggestions/",{"text":263,"config":558},{"href":265,"dataGaName":263,"dataGaLocation":547},{"text":560,"config":561},"GitLab on AWS",{"href":562,"dataGaName":560,"dataGaLocation":547},"/partners/technology-partners/aws/",{"text":564,"config":565},"GitLab on Google Cloud",{"href":566,"dataGaName":564,"dataGaLocation":547},"/partners/technology-partners/google-cloud-platform/",{"text":568,"config":569},"Why GitLab?",{"href":240,"dataGaName":568,"dataGaLocation":547},{"freeTrial":571,"mobileIcon":576,"desktopIcon":581,"secondaryButton":584},{"text":572,"config":573},"Start free trial",{"href":574,"dataGaName":201,"dataGaLocation":575},"https://gitlab.com/-/trials/new/","nav",{"altText":577,"config":578},"Gitlab Icon",{"src":579,"dataGaName":580,"dataGaLocation":575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":577,"config":582},{"src":583,"dataGaName":580,"dataGaLocation":575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":585,"config":586},"Get Started",{"href":587,"dataGaName":588,"dataGaLocation":575},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":590,"mobileIcon":594,"desktopIcon":596},{"text":591,"config":592},"Learn more about GitLab Duo",{"href":232,"dataGaName":593,"dataGaLocation":575},"gitlab duo",{"altText":577,"config":595},{"src":579,"dataGaName":580,"dataGaLocation":575},{"altText":577,"config":597},{"src":583,"dataGaName":580,"dataGaLocation":575},{"button":599,"mobileIcon":604,"desktopIcon":606},{"text":600,"config":601},"/switch",{"href":602,"dataGaName":603,"dataGaLocation":575},"#contact","switch",{"altText":577,"config":605},{"src":579,"dataGaName":580,"dataGaLocation":575},{"altText":577,"config":607},{"src":608,"dataGaName":580,"dataGaLocation":575},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":610,"mobileIcon":615,"desktopIcon":617},{"text":611,"config":612},"Back to pricing",{"href":345,"dataGaName":613,"dataGaLocation":575,"icon":614},"back to pricing","GoBack",{"altText":577,"config":616},{"src":579,"dataGaName":580,"dataGaLocation":575},{"altText":577,"config":618},{"src":583,"dataGaName":580,"dataGaLocation":575},{"title":620,"titleMobile":621,"button":622,"config":627},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":238,"config":623},{"href":624,"dataGaName":625,"dataGaLocation":626},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":628,"disabled":175},"release",{"data":630},{"text":631,"source":632,"edit":638,"contribute":643,"config":648,"items":653,"minimal":863},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":633,"config":634},"View page source",{"href":635,"dataGaName":636,"dataGaLocation":637},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":639,"config":640},"Edit this page",{"href":641,"dataGaName":642,"dataGaLocation":637},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":644,"config":645},"Please contribute",{"href":646,"dataGaName":647,"dataGaLocation":637},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":649,"facebook":650,"youtube":651,"linkedin":652},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[654,701,755,799,831],{"title":343,"links":655,"subMenu":670},[656,660,665],{"text":657,"config":658},"View plans",{"href":345,"dataGaName":659,"dataGaLocation":637},"view plans",{"text":661,"config":662},"Why Premium?",{"href":663,"dataGaName":664,"dataGaLocation":637},"/pricing/premium/","why premium",{"text":666,"config":667},"Why Ultimate?",{"href":668,"dataGaName":669,"dataGaLocation":637},"/pricing/ultimate/","why ultimate",[671],{"title":672,"links":673},"Contact Us",[674,677,679,681,686,691,696],{"text":675,"config":676},"Contact sales",{"href":527,"dataGaName":206,"dataGaLocation":637},{"text":530,"config":678},{"href":532,"dataGaName":533,"dataGaLocation":637},{"text":535,"config":680},{"href":537,"dataGaName":538,"dataGaLocation":637},{"text":682,"config":683},"Status",{"href":684,"dataGaName":685,"dataGaLocation":637},"https://status.gitlab.com/","status",{"text":687,"config":688},"Terms of use",{"href":689,"dataGaName":690,"dataGaLocation":637},"/terms/","terms of use",{"text":692,"config":693},"Privacy statement",{"href":694,"dataGaName":695,"dataGaLocation":637},"/privacy/","privacy statement",{"text":697,"config":698},"Cookie preferences",{"dataGaName":699,"dataGaLocation":637,"id":700,"isOneTrustButton":178},"cookie preferences","ot-sdk-btn",{"title":243,"links":702,"subMenu":711},[703,707],{"text":704,"config":705},"DevSecOps platform",{"href":225,"dataGaName":706,"dataGaLocation":637},"devsecops platform",{"text":708,"config":709},"AI-Assisted Development",{"href":232,"dataGaName":710,"dataGaLocation":637},"ai-assisted development",[712],{"title":713,"links":714},"Topics",[715,720,725,730,735,740,745,750],{"text":716,"config":717},"CICD",{"href":718,"dataGaName":719,"dataGaLocation":637},"/topics/ci-cd/","cicd",{"text":721,"config":722},"GitOps",{"href":723,"dataGaName":724,"dataGaLocation":637},"/topics/gitops/","gitops",{"text":726,"config":727},"DevOps",{"href":728,"dataGaName":729,"dataGaLocation":637},"/topics/devops/","devops",{"text":731,"config":732},"Version Control",{"href":733,"dataGaName":734,"dataGaLocation":637},"/topics/version-control/","version control",{"text":736,"config":737},"DevSecOps",{"href":738,"dataGaName":739,"dataGaLocation":637},"/topics/devsecops/","devsecops",{"text":741,"config":742},"Cloud Native",{"href":743,"dataGaName":744,"dataGaLocation":637},"/topics/cloud-native/","cloud native",{"text":746,"config":747},"AI for Coding",{"href":748,"dataGaName":749,"dataGaLocation":637},"/topics/devops/ai-for-coding/","ai for coding",{"text":751,"config":752},"Agentic AI",{"href":753,"dataGaName":754,"dataGaLocation":637},"/topics/agentic-ai/","agentic ai",{"title":756,"links":757},"Solutions",[758,760,762,767,771,774,778,781,783,786,789,794],{"text":287,"config":759},{"href":282,"dataGaName":287,"dataGaLocation":637},{"text":276,"config":761},{"href":259,"dataGaName":260,"dataGaLocation":637},{"text":763,"config":764},"Agile development",{"href":765,"dataGaName":766,"dataGaLocation":637},"/solutions/agile-delivery/","agile delivery",{"text":768,"config":769},"SCM",{"href":272,"dataGaName":770,"dataGaLocation":637},"source code management",{"text":716,"config":772},{"href":265,"dataGaName":773,"dataGaLocation":637},"continuous integration & delivery",{"text":775,"config":776},"Value stream management",{"href":315,"dataGaName":777,"dataGaLocation":637},"value stream management",{"text":721,"config":779},{"href":780,"dataGaName":724,"dataGaLocation":637},"/solutions/gitops/",{"text":325,"config":782},{"href":328,"dataGaName":329,"dataGaLocation":637},{"text":784,"config":785},"Small business",{"href":334,"dataGaName":335,"dataGaLocation":637},{"text":787,"config":788},"Public sector",{"href":340,"dataGaName":341,"dataGaLocation":637},{"text":790,"config":791},"Education",{"href":792,"dataGaName":793,"dataGaLocation":637},"/solutions/education/","education",{"text":795,"config":796},"Financial services",{"href":797,"dataGaName":798,"dataGaLocation":637},"/solutions/finance/","financial services",{"title":348,"links":800},[801,803,805,807,810,812,815,817,819,821,823,825,827,829],{"text":361,"config":802},{"href":363,"dataGaName":364,"dataGaLocation":637},{"text":366,"config":804},{"href":368,"dataGaName":369,"dataGaLocation":637},{"text":371,"config":806},{"href":373,"dataGaName":374,"dataGaLocation":637},{"text":376,"config":808},{"href":378,"dataGaName":809,"dataGaLocation":637},"docs",{"text":399,"config":811},{"href":401,"dataGaName":402,"dataGaLocation":637},{"text":813,"config":814},"What's new",{"href":459,"dataGaName":460,"dataGaLocation":637},{"text":394,"config":816},{"href":396,"dataGaName":397,"dataGaLocation":637},{"text":413,"config":818},{"href":415,"dataGaName":416,"dataGaLocation":637},{"text":421,"config":820},{"href":423,"dataGaName":424,"dataGaLocation":637},{"text":426,"config":822},{"href":428,"dataGaName":429,"dataGaLocation":637},{"text":431,"config":824},{"href":433,"dataGaName":434,"dataGaLocation":637},{"text":436,"config":826},{"href":438,"dataGaName":439,"dataGaLocation":637},{"text":441,"config":828},{"href":443,"dataGaName":444,"dataGaLocation":637},{"text":446,"config":830},{"href":448,"dataGaName":449,"dataGaLocation":637},{"title":462,"links":832},[833,835,837,839,841,843,847,852,854,856,858],{"text":470,"config":834},{"href":472,"dataGaName":464,"dataGaLocation":637},{"text":475,"config":836},{"href":477,"dataGaName":478,"dataGaLocation":637},{"text":483,"config":838},{"href":485,"dataGaName":486,"dataGaLocation":637},{"text":488,"config":840},{"href":490,"dataGaName":491,"dataGaLocation":637},{"text":493,"config":842},{"href":495,"dataGaName":496,"dataGaLocation":637},{"text":844,"config":845},"Sustainability",{"href":846,"dataGaName":844,"dataGaLocation":637},"/sustainability/",{"text":848,"config":849},"Diversity, inclusion and belonging (DIB)",{"href":850,"dataGaName":851,"dataGaLocation":637},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":498,"config":853},{"href":500,"dataGaName":501,"dataGaLocation":637},{"text":508,"config":855},{"href":510,"dataGaName":511,"dataGaLocation":637},{"text":513,"config":857},{"href":515,"dataGaName":516,"dataGaLocation":637},{"text":859,"config":860},"Modern Slavery Transparency Statement",{"href":861,"dataGaName":862,"dataGaLocation":637},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":864},[865,868,871],{"text":866,"config":867},"Terms",{"href":689,"dataGaName":690,"dataGaLocation":637},{"text":869,"config":870},"Cookies",{"dataGaName":699,"dataGaLocation":637,"id":700,"isOneTrustButton":178},{"text":872,"config":873},"Privacy",{"href":694,"dataGaName":695,"dataGaLocation":637},[875],{"id":876,"title":7,"body":174,"config":877,"content":879,"description":174,"extension":884,"meta":885,"navigation":178,"path":886,"seo":887,"stem":888,"__hash__":889},"blogAuthors/en-us/blog/authors/nelly-vahab.yml",{"template":878},"BlogAuthor",{"name":7,"config":880},{"headshot":881,"socialProof":882},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1778164986/ahjkssshimei2id1aztu.png",{"gitlabHandle":883},"NellyVahab","yml",{},"/en-us/blog/authors/nelly-vahab",{},"en-us/blog/authors/nelly-vahab","3k8cjh4irYsV6IH_Yz2aztdO6ugtn72iGhYnoPsmdlk",[891,899,907],{"title":892,"description":893,"heroImage":894,"category":170,"date":895,"authors":896,"slug":898,"externalUrl":174},"How GitLab tracks vulnerabilities through refactors and reformatting","Learn how GitLab's improved Scope+Offset fingerprinting keeps vulnerability tracking stable across comments, blank lines, and reformatting.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png","2026-08-12",[897],"Julian Thome","improved-scope-offset-fingerprinting",{"title":900,"description":901,"heroImage":894,"category":170,"date":902,"authors":903,"slug":906,"externalUrl":174},"GitLab Secrets Manager adds ESO, Terraform, API support","Simplify credential management across your stack. GitLab Secrets Manager provides secure retrieval in Kubernetes, Terraform, and external workflows.","2026-08-06",[904,905],"Erick Bajao","Joe Randazzo","gitlab-secrets-manager-add-eso-terraform-api-support",{"title":908,"description":909,"heroImage":910,"category":170,"date":911,"authors":912,"slug":914,"externalUrl":174},"Secure every commit to production with Claude and GitLab","Claude Security catches vulnerabilities inside a coding session. GitLab picks up from there, scanning, enforcing policy, and producing audit evidence for the software lifecycle. ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756122536/akivvcnafog9c4dhhzkp.png","2026-08-03",[913],"Alisa Ho","claude-security-and-gitlab",{"promotions":916},[917,931,942,953],{"id":918,"categories":919,"header":921,"text":922,"button":923,"image":928},"ai-modernization",[920],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":924,"config":925},"Get your AI maturity score",{"href":926,"dataGaName":927,"dataGaLocation":402},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":929},{"src":930},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":932,"categories":933,"header":934,"text":922,"button":935,"image":939},"devops-modernization",[187,739],"Are you just managing tools or shipping innovation?",{"text":936,"config":937},"Get your DevOps maturity score",{"href":938,"dataGaName":927,"dataGaLocation":402},"/assessments/devops-modernization-assessment/",{"config":940},{"src":941},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":943,"categories":944,"header":945,"text":922,"button":946,"image":950},"security-modernization",[170],"Are you trading speed for security?",{"text":947,"config":948},"Get your security maturity score",{"href":949,"dataGaName":927,"dataGaLocation":402},"/assessments/security-modernization-assessment/",{"config":951},{"src":952},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":954,"paths":955,"header":958,"text":959,"button":960,"image":965},"github-azure-migration",[956,957],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":961,"config":962},"See how GitLab compares to GitHub",{"href":963,"dataGaName":964,"dataGaLocation":402},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":966},{"src":941},{"header":968,"blurb":969,"button":970,"secondaryButton":975},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":971,"config":972},"Get your free trial",{"href":973,"dataGaName":201,"dataGaLocation":974},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":675,"config":976},{"href":527,"dataGaName":206,"dataGaLocation":974},1786803749121]