[{"data":1,"prerenderedAt":1014},["ShallowReactive",2],{"/blog/wrapping-text":3,"navigation-en-us":227,"banner-en-us":655,"footer-en-us":665,"blog-post-authors-en-us-Marcia Ramos":909,"blog-related-posts-en-us-wrapping-text":924,"blog-promotions-en-us":950,"next-steps-en-us":1004},{"id":4,"title":5,"authors":6,"body":8,"category":190,"date":191,"description":192,"extension":193,"externalUrl":194,"faq":194,"featured":195,"heroImage":196,"meta":197,"navigation":217,"path":218,"seo":219,"slug":223,"stem":224,"tags":194,"template":225,"updatedDate":194,"__hash__":226},"blogPosts/en-us/blog/wrapping-text.md","To Wrap or Not to Wrap: One of Life's Greatest Questions",[7],"Marcia Ramos",{"type":9,"value":10,"toc":182},"minimark",[11,28,43,46,49,59,64,67,70,77,80,86,90,101,104,110,114,117,123,126,132,135,141,144,150,153,157,160,163,166,169],[12,13,14,15,21,22,27],"p",{},"Whether and how we should be making line breaks is currently a\ncontroversial topic amongst the GitLab folks;\nit's an issue of style as well as ease of use.\nIn this post, we’re presenting the two current views held, and\ngiving you the opportunity to speak your mind\n(in the comments or ",[16,17,20],"a",{"href":18,"rel":19},"https://twitter.com/gitlab",[],"on Twitter",") about how we should\nhandle this in our ",[16,23,26],{"href":24,"rel":25},"https://docs.gitlab.com/development/documentation/styleguide/#text",[],"style guide",".\nThe current policy laid out in the style guide is that you should:",[29,30,31],"blockquote",{},[12,32,33],{},[34,35,36,37,42],"em",{},"Split up long lines, this makes it much easier to review and edit.\nOnly double line breaks are shown as a full line break in\n",[16,38,41],{"href":39,"rel":40},"https://docs.gitlab.com/user/markdown/",[],"GitLab markdown",". 80-100 characters is a good line length.",[12,44,45],{},"The understanding is that you if you create a line break after\n80 characters, the text becomes easier to review.",[12,47,48],{},"However, quite a few people feel that this isn't helpful\nand creates stylistic and/or visual messiness when,\nfor example, edits are made which cause the line breaks to go amok.\nBasically, there are two options if your line exceeds 80 characters:",[50,51,52,56],"ol",{},[53,54,55],"li",{},"Wrap the text as the author of the code.",[53,57,58],{},"Rely on the reviewer to wrap the text with their\nlocal editor, and insert a new line for every sentence.",[60,61,63],"h2",{"id":62},"dont-wrap-it","DON'T WRAP IT.",[12,65,66],{},"Some of us at GitLab are in the don’t-wrap camp, positioning\nthat it’s better to rely on the reviewer. If you modify text,\nyou don’t want to have to realign the rest of the text when\nedits are made because the line breaks are uneven. Rewrapping\nrequires a feature that some editors (including GitLab)\ndon’t have. Some people might have it but not know they\nhave it, or not know where to find it in their editor.\nIf you do rewrap with your editor, the diff might get messy\nand make it hard to work out what's visually changed.\nPlus, that 80- to 100-character limit is more of a guess\nthan an exact limit. It can be different depending on your\neditor/screen size.",[12,68,69],{},"This is how a paragraph looks like after a few reviews when\nyou choose to wrap the text. It's odd, as it has long lines\nand short lines distributed unevenly:",[12,71,72],{},[73,74],"img",{"alt":75,"src":76},"wrapped text - uneven view","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/wrapped-text-after-reviews.png",[12,78,79],{},"However, when you don't wrap it, a collaborator needs to\npoint to the portion of the text before explaining the change,\nwhich can be very time consuming. For example, in the paragraph\nbelow, the collaborator needs to identify the link first, and\nrepeat the section with the proposed changes:",[12,81,82],{},[73,83],{"alt":84,"src":85},"change link - non-wrapped text","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/unwrapped-text-worse-to-review.png",[60,87,89],{"id":88},"do-wrap-it","DO WRAP IT.",[12,91,92,93,96,97,100],{},"The company's official position is of the ",[34,94,95],{},"do-wrap variety",",\nwith the main reason that when people view and edit the text,\nthey can do so without scrolling horizontally ",[34,98,99],{},"ad infinitum",",\nwhich drives some people nuts. As a result, the comment\nbox sometimes extends beyond the edge of the viewport, making\nit difficult to use any of the buttons on the right-hand side.",[12,102,103],{},"To compare to the last example, the following screenshot\nof a text already wrapped, it's easy to comment inline directly,\nwithout having to identify what you're talking about first\nand commenting afterwards.",[12,105,106],{},[73,107],{"alt":108,"src":109},"change link - wrapped text","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/wrapped-text-easier-to-review.png",[60,111,113],{"id":112},"comparing-similar-views","Comparing Similar Views",[12,115,116],{},"When editing a file in the GitLab UI, this is how wrapped text\nlooks like:",[12,118,119],{},[73,120],{"alt":121,"src":122},"wrapped text, GitLab UI view","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/gitlab-ui-wrapped-text.png",[12,124,125],{},"And this is how an unwrapped code looks like:",[12,127,128],{},[73,129],{"alt":130,"src":131},"non-wrapped text, GitLab UI view","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/gitlab-ui-non-wrapped-text.png",[12,133,134],{},"Even when you're reviewing locally, check how a wrapped\ntext looks like on Sublime:",[12,136,137],{},[73,138],{"alt":139,"src":140},"Sublime text view - wrapped","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/wrapped-text-easier-to-read.png",[12,142,143],{},"And how it looks when unwrapped:",[12,145,146],{},[73,147],{"alt":148,"src":149},"Sublime text view - non-wrapped","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399348/blog/Content%20Images/wrapping-text/unwrapped-text-scroll-horizontally.png",[12,151,152],{},"Clearly, wrapped text can be considered better for both reading\nand reviewing through inline comments. But it can also be annoying\nwhen writing and editing the file.",[60,154,156],{"id":155},"going-forward","Going forward",[12,158,159],{},"Particularly, while I'm writing, I don't wrap the text. I'll\ndo that just when it's ready for review. This way, I save myself\nsome time when writing and editing, but I still leave it wrapped\nfor facilitating the reviewers to add inline comments in my\nmerge request.",[12,161,162],{},"But yes, there are pros and cons for both cases, of course. The\nquestion is, what can we do to make it less painful for everyone?",[12,164,165],{},"One of the possible actions we could take going forward is to set\na max-width both on the comment box container, and on the editor,\nso that it remains in a usable state, regardless of code length.",[12,167,168],{},"Other ideas? We’re open to them. Let us know what you think, and\nhow you do that with your team.",[12,170,171,175,176,181],{},[172,173,174],"strong",{},"Note",": Currently for blog post technical articles we follow the\nStyle Guide, but the ",[16,177,180],{"href":178,"rel":179},"https://handbook.gitlab.com/handbook/marketing/blog/#styles-guidelines",[],"Blog Post Style Guide"," is\nan override or addendum to that. The consensus has been that wrapped\ntext facilitates review. We have a lot of guest writers and many\nreviewers, and this seems to be their preference, so we’ve tried\nto honor that.",{"title":183,"searchDepth":184,"depth":184,"links":185},"",2,[186,187,188,189],{"id":62,"depth":184,"text":63},{"id":88,"depth":184,"text":89},{"id":112,"depth":184,"text":113},{"id":155,"depth":184,"text":156},"engineering","2016-10-11","Breaking lines: useful or painful?","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683906/Blog/Hero%20Images/wrap-not-to-wrap-text.png",{"excerpt":198},{"type":9,"value":199},[200,208],[12,201,14,202,21,205,27],{},[16,203,20],{"href":18,"rel":204},[],[16,206,26],{"href":24,"rel":207},[],[29,209,210],{},[12,211,212],{},[34,213,36,214,42],{},[16,215,41],{"href":39,"rel":216},[],true,"/en-us/blog/wrapping-text",{"title":5,"description":192,"ogTitle":5,"ogDescription":192,"noIndex":195,"ogImage":196,"ogUrl":220,"ogSiteName":221,"ogType":222,"canonicalUrls":220},"https://about.gitlab.com/blog/wrapping-text","https://about.gitlab.com","article","wrapping-text","en-us/blog/wrapping-text","BlogPost","95SbkEZ4v2Tf3e9uSGucOK9MvLr08lUFofa6oXa1AUs",{"logo":228,"freeTrial":233,"sales":238,"login":243,"items":248,"search":575,"minimal":606,"duo":625,"switchNav":634,"pricingDeployment":645},{"config":229},{"href":230,"dataGaName":231,"dataGaLocation":232},"/","gitlab logo","header",{"text":234,"config":235},"Get free trial",{"href":236,"dataGaName":237,"dataGaLocation":232},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":239,"config":240},"Request a demo",{"href":241,"dataGaName":242,"dataGaLocation":232},"/sales/?contact-topic=request-demo","sales",{"text":244,"config":245},"Sign in",{"href":246,"dataGaName":247,"dataGaLocation":232},"https://gitlab.com/users/sign_in/","sign in",[249,278,378,383,497,553],{"text":250,"config":251,"menu":253},"Platform",{"dataNavLevelOne":252},"platform",{"type":254,"columns":255},"cards",[256,262,270],{"title":250,"description":257,"link":258},"The intelligent orchestration platform for DevSecOps",{"text":259,"config":260},"Explore our Platform",{"href":261,"dataGaName":252,"dataGaLocation":232},"/platform/",{"title":263,"description":264,"link":265},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":266,"config":267},"Meet GitLab Duo",{"href":268,"dataGaName":269,"dataGaLocation":232},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":271,"description":272,"link":273},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":274,"config":275},"Learn more",{"href":276,"dataGaName":277,"dataGaLocation":232},"/why-gitlab/","why gitlab",{"text":279,"left":217,"config":280,"menu":282},"Product",{"dataNavLevelOne":281},"solutions",{"type":283,"link":284,"columns":288,"feature":357},"lists",{"text":285,"config":286},"View all Solutions",{"href":287,"dataGaName":281,"dataGaLocation":232},"/solutions/",[289,313,336],{"title":290,"description":291,"link":292,"items":297},"Automation","CI/CD and automation to accelerate deployment",{"config":293},{"icon":294,"href":295,"dataGaName":296,"dataGaLocation":232},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[298,302,305,309],{"text":299,"config":300},"CI/CD",{"href":301,"dataGaLocation":232,"dataGaName":299},"/solutions/continuous-integration/",{"text":263,"config":303},{"href":268,"dataGaLocation":232,"dataGaName":304},"gitlab duo agent platform - product menu",{"text":306,"config":307},"Source Code Management",{"href":308,"dataGaLocation":232,"dataGaName":306},"/solutions/source-code-management/",{"text":310,"config":311},"Automated Software Delivery",{"href":295,"dataGaLocation":232,"dataGaName":312},"Automated software delivery",{"title":314,"description":315,"link":316,"items":321},"Security","Deliver code faster without compromising security",{"config":317},{"href":318,"dataGaName":319,"dataGaLocation":232,"icon":320},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[322,326,331],{"text":323,"config":324},"Application Security Testing",{"href":318,"dataGaName":325,"dataGaLocation":232},"Application security testing",{"text":327,"config":328},"Software Supply Chain Security",{"href":329,"dataGaLocation":232,"dataGaName":330},"/solutions/supply-chain/","Software supply chain security",{"text":332,"config":333},"Software Compliance",{"href":334,"dataGaName":335,"dataGaLocation":232},"/solutions/software-compliance/","software compliance",{"title":337,"link":338,"items":343},"Measurement",{"config":339},{"icon":340,"href":341,"dataGaName":342,"dataGaLocation":232},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[344,348,352],{"text":345,"config":346},"Visibility & Measurement",{"href":341,"dataGaLocation":232,"dataGaName":347},"Visibility and Measurement",{"text":349,"config":350},"Value Stream Management",{"href":351,"dataGaLocation":232,"dataGaName":349},"/solutions/value-stream-management/",{"text":353,"config":354},"Analytics & Insights",{"href":355,"dataGaLocation":232,"dataGaName":356},"/solutions/analytics-and-insights/","Analytics and insights",{"title":358,"type":283,"items":359},"GitLab for",[360,366,372],{"text":361,"config":362},"Enterprise",{"icon":363,"href":364,"dataGaLocation":232,"dataGaName":365},"Building","/enterprise/","enterprise",{"text":367,"config":368},"Small Business",{"icon":369,"href":370,"dataGaLocation":232,"dataGaName":371},"Work","/small-business/","small business",{"text":373,"config":374},"Public Sector",{"icon":375,"href":376,"dataGaLocation":232,"dataGaName":377},"Organization","/solutions/public-sector/","public sector",{"text":379,"config":380},"Pricing",{"href":381,"dataGaName":382,"dataGaLocation":232,"dataNavLevelOne":382},"/pricing/","pricing",{"text":384,"config":385,"menu":387},"Resources",{"dataNavLevelOne":386},"resources",{"type":283,"link":388,"columns":392,"feature":486},{"text":389,"config":390},"View all resources",{"href":391,"dataGaName":386,"dataGaLocation":232},"/resources/",[393,426,453],{"title":394,"items":395},"Getting started",[396,401,406,411,416,421],{"text":397,"config":398},"Install",{"href":399,"dataGaName":400,"dataGaLocation":232},"/install/","install",{"text":402,"config":403},"Quick start guides",{"href":404,"dataGaName":405,"dataGaLocation":232},"/get-started/","quick setup checklists",{"text":407,"config":408},"Learn",{"href":409,"dataGaLocation":232,"dataGaName":410},"https://university.gitlab.com/","learn",{"text":412,"config":413},"Product documentation",{"href":414,"dataGaName":415,"dataGaLocation":232},"https://docs.gitlab.com/","product documentation",{"text":417,"config":418},"Best practice videos",{"href":419,"dataGaName":420,"dataGaLocation":232},"/getting-started-videos/","best practice videos",{"text":422,"config":423},"Integrations",{"href":424,"dataGaName":425,"dataGaLocation":232},"/integrations/","integrations",{"title":427,"items":428},"Discover",[429,434,439,444,448],{"text":430,"config":431},"Customer success stories",{"href":432,"dataGaName":433,"dataGaLocation":232},"/customers/","customer success stories",{"text":435,"config":436},"Blog",{"href":437,"dataGaName":438,"dataGaLocation":232},"/blog/","blog",{"text":440,"config":441},"Demo Hub",{"href":442,"dataGaName":443,"dataGaLocation":232},"/demo-hub/","demo hub",{"text":445,"config":446},"The Source",{"href":447,"dataGaName":438,"dataGaLocation":232},"/the-source/",{"text":449,"config":450},"Remote",{"href":451,"dataGaName":452,"dataGaLocation":232},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":454,"items":455},"Connect",[456,461,466,471,476,481],{"text":457,"config":458},"GitLab Services",{"href":459,"dataGaName":460,"dataGaLocation":232},"/services/","services",{"text":462,"config":463},"Contribute",{"href":464,"dataGaName":465,"dataGaLocation":232},"https://contributors.gitlab.com","contribute",{"text":467,"config":468},"Community",{"href":469,"dataGaName":470,"dataGaLocation":232},"/community/","community",{"text":472,"config":473},"Forum",{"href":474,"dataGaName":475,"dataGaLocation":232},"https://forum.gitlab.com/","forum",{"text":477,"config":478},"Events",{"href":479,"dataGaName":480,"dataGaLocation":232},"/events/","events",{"text":482,"config":483},"Partners",{"href":484,"dataGaName":485,"dataGaLocation":232},"/partners/","partners",{"config":487,"title":490,"text":491,"link":492},{"background":488,"textColor":489},"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":493,"config":494},"Read the latest",{"href":495,"dataGaName":496,"dataGaLocation":232},"/whats-new/","whats new",{"text":498,"config":499,"menu":501},"Company",{"dataNavLevelOne":500},"company",{"type":283,"columns":502},[503],{"items":504},[505,510,516,518,523,528,533,538,543,548],{"text":506,"config":507},"About",{"href":508,"dataGaName":509,"dataGaLocation":232},"/company/","about",{"text":511,"config":512,"footerGa":515},"Jobs",{"href":513,"dataGaName":514,"dataGaLocation":232},"/jobs/","jobs",{"dataGaName":514},{"text":477,"config":517},{"href":479,"dataGaName":480,"dataGaLocation":232},{"text":519,"config":520},"Leadership",{"href":521,"dataGaName":522,"dataGaLocation":232},"/company/team/e-group/","leadership",{"text":524,"config":525},"Handbook",{"href":526,"dataGaName":527,"dataGaLocation":232},"https://handbook.gitlab.com/","handbook",{"text":529,"config":530},"Investor relations",{"href":531,"dataGaName":532,"dataGaLocation":232},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":534,"config":535},"Trust Center",{"href":536,"dataGaName":537,"dataGaLocation":232},"/security/","trust center",{"text":539,"config":540},"AI Transparency Center",{"href":541,"dataGaName":542,"dataGaLocation":232},"/ai-transparency-center/","ai transparency center",{"text":544,"config":545},"Newsletter",{"href":546,"dataGaName":547,"dataGaLocation":232},"/company/contact/#contact-forms","newsletter",{"text":549,"config":550},"Press",{"href":551,"dataGaName":552,"dataGaLocation":232},"/press/","press",{"text":554,"config":555,"menu":556},"Contact us",{"dataNavLevelOne":500},{"type":283,"columns":557},[558],{"items":559},[560,565,570],{"text":561,"config":562},"Talk to sales",{"href":563,"dataGaName":564,"dataGaLocation":232},"/sales/","talk to sales",{"text":566,"config":567},"Support portal",{"href":568,"dataGaName":569,"dataGaLocation":232},"https://support.gitlab.com/hc/en-us","support portal",{"text":571,"config":572},"Customer portal",{"href":573,"dataGaName":574,"dataGaLocation":232},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":576,"login":577,"suggestions":584},"Close",{"text":578,"link":579},"To search repositories and projects, login to",{"text":580,"config":581},"gitlab.com",{"href":246,"dataGaName":582,"dataGaLocation":583},"search login","search",{"text":585,"default":586},"Suggestions",[587,589,593,595,599,603],{"text":263,"config":588},{"href":268,"dataGaName":263,"dataGaLocation":583},{"text":590,"config":591},"Code Suggestions (AI)",{"href":592,"dataGaName":590,"dataGaLocation":583},"/solutions/code-suggestions/",{"text":299,"config":594},{"href":301,"dataGaName":299,"dataGaLocation":583},{"text":596,"config":597},"GitLab on AWS",{"href":598,"dataGaName":596,"dataGaLocation":583},"/partners/technology-partners/aws/",{"text":600,"config":601},"GitLab on Google Cloud",{"href":602,"dataGaName":600,"dataGaLocation":583},"/partners/technology-partners/google-cloud-platform/",{"text":604,"config":605},"Why GitLab?",{"href":276,"dataGaName":604,"dataGaLocation":583},{"freeTrial":607,"mobileIcon":612,"desktopIcon":617,"secondaryButton":620},{"text":608,"config":609},"Start free trial",{"href":610,"dataGaName":237,"dataGaLocation":611},"https://gitlab.com/-/trials/new/","nav",{"altText":613,"config":614},"Gitlab Icon",{"src":615,"dataGaName":616,"dataGaLocation":611},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":613,"config":618},{"src":619,"dataGaName":616,"dataGaLocation":611},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":621,"config":622},"Get Started",{"href":623,"dataGaName":624,"dataGaLocation":611},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":626,"mobileIcon":630,"desktopIcon":632},{"text":627,"config":628},"Learn more about GitLab Duo",{"href":268,"dataGaName":629,"dataGaLocation":611},"gitlab duo",{"altText":613,"config":631},{"src":615,"dataGaName":616,"dataGaLocation":611},{"altText":613,"config":633},{"src":619,"dataGaName":616,"dataGaLocation":611},{"button":635,"mobileIcon":640,"desktopIcon":642},{"text":636,"config":637},"/switch",{"href":638,"dataGaName":639,"dataGaLocation":611},"#contact","switch",{"altText":613,"config":641},{"src":615,"dataGaName":616,"dataGaLocation":611},{"altText":613,"config":643},{"src":644,"dataGaName":616,"dataGaLocation":611},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":646,"mobileIcon":651,"desktopIcon":653},{"text":647,"config":648},"Back to pricing",{"href":381,"dataGaName":649,"dataGaLocation":611,"icon":650},"back to pricing","GoBack",{"altText":613,"config":652},{"src":615,"dataGaName":616,"dataGaLocation":611},{"altText":613,"config":654},{"src":619,"dataGaName":616,"dataGaLocation":611},{"title":656,"titleMobile":657,"button":658,"config":663},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":274,"config":659},{"href":660,"dataGaName":661,"dataGaLocation":662},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":664,"disabled":195},"release",{"data":666},{"text":667,"source":668,"edit":674,"contribute":679,"config":684,"items":688,"minimal":898},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":669,"config":670},"View page source",{"href":671,"dataGaName":672,"dataGaLocation":673},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":675,"config":676},"Edit this page",{"href":677,"dataGaName":678,"dataGaLocation":673},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":680,"config":681},"Please contribute",{"href":682,"dataGaName":683,"dataGaLocation":673},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":18,"facebook":685,"youtube":686,"linkedin":687},"https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[689,736,790,834,866],{"title":379,"links":690,"subMenu":705},[691,695,700],{"text":692,"config":693},"View plans",{"href":381,"dataGaName":694,"dataGaLocation":673},"view plans",{"text":696,"config":697},"Why Premium?",{"href":698,"dataGaName":699,"dataGaLocation":673},"/pricing/premium/","why premium",{"text":701,"config":702},"Why Ultimate?",{"href":703,"dataGaName":704,"dataGaLocation":673},"/pricing/ultimate/","why ultimate",[706],{"title":707,"links":708},"Contact Us",[709,712,714,716,721,726,731],{"text":710,"config":711},"Contact sales",{"href":563,"dataGaName":242,"dataGaLocation":673},{"text":566,"config":713},{"href":568,"dataGaName":569,"dataGaLocation":673},{"text":571,"config":715},{"href":573,"dataGaName":574,"dataGaLocation":673},{"text":717,"config":718},"Status",{"href":719,"dataGaName":720,"dataGaLocation":673},"https://status.gitlab.com/","status",{"text":722,"config":723},"Terms of use",{"href":724,"dataGaName":725,"dataGaLocation":673},"/terms/","terms of use",{"text":727,"config":728},"Privacy statement",{"href":729,"dataGaName":730,"dataGaLocation":673},"/privacy/","privacy statement",{"text":732,"config":733},"Cookie preferences",{"dataGaName":734,"dataGaLocation":673,"id":735,"isOneTrustButton":217},"cookie preferences","ot-sdk-btn",{"title":279,"links":737,"subMenu":746},[738,742],{"text":739,"config":740},"DevSecOps platform",{"href":261,"dataGaName":741,"dataGaLocation":673},"devsecops platform",{"text":743,"config":744},"AI-Assisted Development",{"href":268,"dataGaName":745,"dataGaLocation":673},"ai-assisted development",[747],{"title":748,"links":749},"Topics",[750,755,760,765,770,775,780,785],{"text":751,"config":752},"CICD",{"href":753,"dataGaName":754,"dataGaLocation":673},"/topics/ci-cd/","cicd",{"text":756,"config":757},"GitOps",{"href":758,"dataGaName":759,"dataGaLocation":673},"/topics/gitops/","gitops",{"text":761,"config":762},"DevOps",{"href":763,"dataGaName":764,"dataGaLocation":673},"/topics/devops/","devops",{"text":766,"config":767},"Version Control",{"href":768,"dataGaName":769,"dataGaLocation":673},"/topics/version-control/","version control",{"text":771,"config":772},"DevSecOps",{"href":773,"dataGaName":774,"dataGaLocation":673},"/topics/devsecops/","devsecops",{"text":776,"config":777},"Cloud Native",{"href":778,"dataGaName":779,"dataGaLocation":673},"/topics/cloud-native/","cloud native",{"text":781,"config":782},"AI for Coding",{"href":783,"dataGaName":784,"dataGaLocation":673},"/topics/devops/ai-for-coding/","ai for coding",{"text":786,"config":787},"Agentic AI",{"href":788,"dataGaName":789,"dataGaLocation":673},"/topics/agentic-ai/","agentic ai",{"title":791,"links":792},"Solutions",[793,795,797,802,806,809,813,816,818,821,824,829],{"text":323,"config":794},{"href":318,"dataGaName":323,"dataGaLocation":673},{"text":312,"config":796},{"href":295,"dataGaName":296,"dataGaLocation":673},{"text":798,"config":799},"Agile development",{"href":800,"dataGaName":801,"dataGaLocation":673},"/solutions/agile-delivery/","agile delivery",{"text":803,"config":804},"SCM",{"href":308,"dataGaName":805,"dataGaLocation":673},"source code management",{"text":751,"config":807},{"href":301,"dataGaName":808,"dataGaLocation":673},"continuous integration & delivery",{"text":810,"config":811},"Value stream management",{"href":351,"dataGaName":812,"dataGaLocation":673},"value stream management",{"text":756,"config":814},{"href":815,"dataGaName":759,"dataGaLocation":673},"/solutions/gitops/",{"text":361,"config":817},{"href":364,"dataGaName":365,"dataGaLocation":673},{"text":819,"config":820},"Small business",{"href":370,"dataGaName":371,"dataGaLocation":673},{"text":822,"config":823},"Public sector",{"href":376,"dataGaName":377,"dataGaLocation":673},{"text":825,"config":826},"Education",{"href":827,"dataGaName":828,"dataGaLocation":673},"/solutions/education/","education",{"text":830,"config":831},"Financial services",{"href":832,"dataGaName":833,"dataGaLocation":673},"/solutions/finance/","financial services",{"title":384,"links":835},[836,838,840,842,845,847,850,852,854,856,858,860,862,864],{"text":397,"config":837},{"href":399,"dataGaName":400,"dataGaLocation":673},{"text":402,"config":839},{"href":404,"dataGaName":405,"dataGaLocation":673},{"text":407,"config":841},{"href":409,"dataGaName":410,"dataGaLocation":673},{"text":412,"config":843},{"href":414,"dataGaName":844,"dataGaLocation":673},"docs",{"text":435,"config":846},{"href":437,"dataGaName":438,"dataGaLocation":673},{"text":848,"config":849},"What's new",{"href":495,"dataGaName":496,"dataGaLocation":673},{"text":430,"config":851},{"href":432,"dataGaName":433,"dataGaLocation":673},{"text":449,"config":853},{"href":451,"dataGaName":452,"dataGaLocation":673},{"text":457,"config":855},{"href":459,"dataGaName":460,"dataGaLocation":673},{"text":462,"config":857},{"href":464,"dataGaName":465,"dataGaLocation":673},{"text":467,"config":859},{"href":469,"dataGaName":470,"dataGaLocation":673},{"text":472,"config":861},{"href":474,"dataGaName":475,"dataGaLocation":673},{"text":477,"config":863},{"href":479,"dataGaName":480,"dataGaLocation":673},{"text":482,"config":865},{"href":484,"dataGaName":485,"dataGaLocation":673},{"title":498,"links":867},[868,870,872,874,876,878,882,887,889,891,893],{"text":506,"config":869},{"href":508,"dataGaName":500,"dataGaLocation":673},{"text":511,"config":871},{"href":513,"dataGaName":514,"dataGaLocation":673},{"text":519,"config":873},{"href":521,"dataGaName":522,"dataGaLocation":673},{"text":524,"config":875},{"href":526,"dataGaName":527,"dataGaLocation":673},{"text":529,"config":877},{"href":531,"dataGaName":532,"dataGaLocation":673},{"text":879,"config":880},"Sustainability",{"href":881,"dataGaName":879,"dataGaLocation":673},"/sustainability/",{"text":883,"config":884},"Diversity, inclusion and belonging (DIB)",{"href":885,"dataGaName":886,"dataGaLocation":673},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":534,"config":888},{"href":536,"dataGaName":537,"dataGaLocation":673},{"text":544,"config":890},{"href":546,"dataGaName":547,"dataGaLocation":673},{"text":549,"config":892},{"href":551,"dataGaName":552,"dataGaLocation":673},{"text":894,"config":895},"Modern Slavery Transparency Statement",{"href":896,"dataGaName":897,"dataGaLocation":673},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":899},[900,903,906],{"text":901,"config":902},"Terms",{"href":724,"dataGaName":725,"dataGaLocation":673},{"text":904,"config":905},"Cookies",{"dataGaName":734,"dataGaLocation":673,"id":735,"isOneTrustButton":217},{"text":907,"config":908},"Privacy",{"href":729,"dataGaName":730,"dataGaLocation":673},[910],{"id":911,"title":7,"body":194,"config":912,"content":914,"description":194,"extension":918,"meta":919,"navigation":217,"path":920,"seo":921,"stem":922,"__hash__":923},"blogAuthors/en-us/blog/authors/marcia-ramos.yml",{"template":913},"BlogAuthor",{"name":7,"config":915},{"headshot":916,"ctfId":917},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Marcia-Ramos","yml",{},"/en-us/blog/authors/marcia-ramos",{},"en-us/blog/authors/marcia-ramos","UrFu-iLS1mEkxVCheaz27cAjfZXeLI9U1n5dGSOHXY4",[925,934,942],{"title":926,"description":927,"heroImage":928,"category":190,"date":929,"authors":930,"slug":933,"externalUrl":194},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[931,932],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":935,"description":936,"heroImage":937,"category":190,"date":938,"authors":939,"slug":941,"externalUrl":194},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[940],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":943,"description":944,"heroImage":945,"category":190,"date":946,"authors":947,"slug":949,"externalUrl":194},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[948],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":951},[952,966,978,990],{"id":953,"categories":954,"header":956,"text":957,"button":958,"image":963},"ai-modernization",[955],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":959,"config":960},"Get your AI maturity score",{"href":961,"dataGaName":962,"dataGaLocation":438},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":964},{"src":965},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":967,"categories":968,"header":970,"text":957,"button":971,"image":975},"devops-modernization",[969,774],"product","Are you just managing tools or shipping innovation?",{"text":972,"config":973},"Get your DevOps maturity score",{"href":974,"dataGaName":962,"dataGaLocation":438},"/assessments/devops-modernization-assessment/",{"config":976},{"src":977},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":979,"categories":980,"header":982,"text":957,"button":983,"image":987},"security-modernization",[981],"security","Are you trading speed for security?",{"text":984,"config":985},"Get your security maturity score",{"href":986,"dataGaName":962,"dataGaLocation":438},"/assessments/security-modernization-assessment/",{"config":988},{"src":989},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":991,"paths":992,"header":995,"text":996,"button":997,"image":1002},"github-azure-migration",[993,994],"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":998,"config":999},"See how GitLab compares to GitHub",{"href":1000,"dataGaName":1001,"dataGaLocation":438},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1003},{"src":977},{"header":1005,"blurb":1006,"button":1007,"secondaryButton":1012},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1008,"config":1009},"Get your free trial",{"href":1010,"dataGaName":237,"dataGaLocation":1011},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":710,"config":1013},{"href":563,"dataGaName":242,"dataGaLocation":1011},1786803756800]