[{"data":1,"prerenderedAt":952},["ShallowReactive",2],{"/en-us/blog/tags/frontend":3,"navigation-en-us":18,"banner-en-us":428,"footer-en-us":438,"frontend-tag-posts-en-us":680},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":9,"description":6,"extension":11,"meta":12,"navigation":13,"path":14,"seo":15,"slug":6,"stem":16,"testContent":6,"type":6,"__hash__":17},"blogTags/en-us/blog/tags/frontend.yml","Frontend",null,{"template":8},"BlogTag",{"tag":10,"tagSlug":10},"frontend","yml",{},true,"/en-us/blog/tags/frontend",{},"en-us/blog/tags/frontend","BdCHM9HovoGEgkvZWewxCY2b2fb287qNNRlOak86qFU",{"data":19},{"logo":20,"freeTrial":25,"sales":30,"login":35,"items":40,"search":348,"minimal":379,"duo":398,"switchNav":407,"pricingDeployment":418},{"config":21},{"href":22,"dataGaName":23,"dataGaLocation":24},"/","gitlab logo","header",{"text":26,"config":27},"Get free trial",{"href":28,"dataGaName":29,"dataGaLocation":24},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":31,"config":32},"Talk to sales",{"href":33,"dataGaName":34,"dataGaLocation":24},"/sales/","sales",{"text":36,"config":37},"Sign in",{"href":38,"dataGaName":39,"dataGaLocation":24},"https://gitlab.com/users/sign_in/","sign in",[41,68,163,168,269,329],{"text":42,"config":43,"cards":45},"Platform",{"dataNavLevelOne":44},"platform",[46,52,60],{"title":42,"description":47,"link":48},"The intelligent orchestration platform for DevSecOps",{"text":49,"config":50},"Explore our Platform",{"href":51,"dataGaName":44,"dataGaLocation":24},"/platform/",{"title":53,"description":54,"link":55},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":56,"config":57},"Meet GitLab Duo",{"href":58,"dataGaName":59,"dataGaLocation":24},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":61,"description":62,"link":63},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":64,"config":65},"Learn more",{"href":66,"dataGaName":67,"dataGaLocation":24},"/why-gitlab/","why gitlab",{"text":69,"left":13,"config":70,"link":72,"lists":76,"footer":145},"Product",{"dataNavLevelOne":71},"solutions",{"text":73,"config":74},"View all Solutions",{"href":75,"dataGaName":71,"dataGaLocation":24},"/solutions/",[77,101,124],{"title":78,"description":79,"link":80,"items":85},"Automation","CI/CD and automation to accelerate deployment",{"config":81},{"icon":82,"href":83,"dataGaName":84,"dataGaLocation":24},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[86,90,93,97],{"text":87,"config":88},"CI/CD",{"href":89,"dataGaLocation":24,"dataGaName":87},"/solutions/continuous-integration/",{"text":53,"config":91},{"href":58,"dataGaLocation":24,"dataGaName":92},"gitlab duo agent platform - product menu",{"text":94,"config":95},"Source Code Management",{"href":96,"dataGaLocation":24,"dataGaName":94},"/solutions/source-code-management/",{"text":98,"config":99},"Automated Software Delivery",{"href":83,"dataGaLocation":24,"dataGaName":100},"Automated software delivery",{"title":102,"description":103,"link":104,"items":109},"Security","Deliver code faster without compromising security",{"config":105},{"href":106,"dataGaName":107,"dataGaLocation":24,"icon":108},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[110,114,119],{"text":111,"config":112},"Application Security Testing",{"href":106,"dataGaName":113,"dataGaLocation":24},"Application security testing",{"text":115,"config":116},"Software Supply Chain Security",{"href":117,"dataGaLocation":24,"dataGaName":118},"/solutions/supply-chain/","Software supply chain security",{"text":120,"config":121},"Software Compliance",{"href":122,"dataGaName":123,"dataGaLocation":24},"/solutions/software-compliance/","software compliance",{"title":125,"link":126,"items":131},"Measurement",{"config":127},{"icon":128,"href":129,"dataGaName":130,"dataGaLocation":24},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[132,136,140],{"text":133,"config":134},"Visibility & Measurement",{"href":129,"dataGaLocation":24,"dataGaName":135},"Visibility and Measurement",{"text":137,"config":138},"Value Stream Management",{"href":139,"dataGaLocation":24,"dataGaName":137},"/solutions/value-stream-management/",{"text":141,"config":142},"Analytics & Insights",{"href":143,"dataGaLocation":24,"dataGaName":144},"/solutions/analytics-and-insights/","Analytics and insights",{"title":146,"items":147},"GitLab for",[148,153,158],{"text":149,"config":150},"Enterprise",{"href":151,"dataGaLocation":24,"dataGaName":152},"/enterprise/","enterprise",{"text":154,"config":155},"Small Business",{"href":156,"dataGaLocation":24,"dataGaName":157},"/small-business/","small business",{"text":159,"config":160},"Public Sector",{"href":161,"dataGaLocation":24,"dataGaName":162},"/solutions/public-sector/","public sector",{"text":164,"config":165},"Pricing",{"href":166,"dataGaName":167,"dataGaLocation":24,"dataNavLevelOne":167},"/pricing/","pricing",{"text":169,"config":170,"link":172,"lists":176,"feature":256},"Resources",{"dataNavLevelOne":171},"resources",{"text":173,"config":174},"View all resources",{"href":175,"dataGaName":171,"dataGaLocation":24},"/resources/",[177,210,228],{"title":178,"items":179},"Getting started",[180,185,190,195,200,205],{"text":181,"config":182},"Install",{"href":183,"dataGaName":184,"dataGaLocation":24},"/install/","install",{"text":186,"config":187},"Quick start guides",{"href":188,"dataGaName":189,"dataGaLocation":24},"/get-started/","quick setup checklists",{"text":191,"config":192},"Learn",{"href":193,"dataGaLocation":24,"dataGaName":194},"https://university.gitlab.com/","learn",{"text":196,"config":197},"Product documentation",{"href":198,"dataGaName":199,"dataGaLocation":24},"https://docs.gitlab.com/","product documentation",{"text":201,"config":202},"Best practice videos",{"href":203,"dataGaName":204,"dataGaLocation":24},"/getting-started-videos/","best practice videos",{"text":206,"config":207},"Integrations",{"href":208,"dataGaName":209,"dataGaLocation":24},"/integrations/","integrations",{"title":211,"items":212},"Discover",[213,218,223],{"text":214,"config":215},"Customer success stories",{"href":216,"dataGaName":217,"dataGaLocation":24},"/customers/","customer success stories",{"text":219,"config":220},"Blog",{"href":221,"dataGaName":222,"dataGaLocation":24},"/blog/","blog",{"text":224,"config":225},"Remote",{"href":226,"dataGaName":227,"dataGaLocation":24},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":229,"items":230},"Connect",[231,236,241,246,251],{"text":232,"config":233},"GitLab Services",{"href":234,"dataGaName":235,"dataGaLocation":24},"/services/","services",{"text":237,"config":238},"Community",{"href":239,"dataGaName":240,"dataGaLocation":24},"/community/","community",{"text":242,"config":243},"Forum",{"href":244,"dataGaName":245,"dataGaLocation":24},"https://forum.gitlab.com/","forum",{"text":247,"config":248},"Events",{"href":249,"dataGaName":250,"dataGaLocation":24},"/events/","events",{"text":252,"config":253},"Partners",{"href":254,"dataGaName":255,"dataGaLocation":24},"/partners/","partners",{"backgroundColor":257,"textColor":258,"text":259,"image":260,"link":264},"#2f2a6b","#fff","Insights for the future of software development",{"altText":261,"config":262},"the source promo card",{"src":263},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":265,"config":266},"Read the latest",{"href":267,"dataGaName":268,"dataGaLocation":24},"/the-source/","the source",{"text":270,"config":271,"lists":273},"Company",{"dataNavLevelOne":272},"company",[274],{"items":275},[276,281,287,289,294,299,304,309,314,319,324],{"text":277,"config":278},"About",{"href":279,"dataGaName":280,"dataGaLocation":24},"/company/","about",{"text":282,"config":283,"footerGa":286},"Jobs",{"href":284,"dataGaName":285,"dataGaLocation":24},"/jobs/","jobs",{"dataGaName":285},{"text":247,"config":288},{"href":249,"dataGaName":250,"dataGaLocation":24},{"text":290,"config":291},"Leadership",{"href":292,"dataGaName":293,"dataGaLocation":24},"/company/team/e-group/","leadership",{"text":295,"config":296},"Team",{"href":297,"dataGaName":298,"dataGaLocation":24},"/company/team/","team",{"text":300,"config":301},"Handbook",{"href":302,"dataGaName":303,"dataGaLocation":24},"https://handbook.gitlab.com/","handbook",{"text":305,"config":306},"Investor relations",{"href":307,"dataGaName":308,"dataGaLocation":24},"https://ir.gitlab.com/","investor relations",{"text":310,"config":311},"Trust Center",{"href":312,"dataGaName":313,"dataGaLocation":24},"/security/","trust center",{"text":315,"config":316},"AI Transparency Center",{"href":317,"dataGaName":318,"dataGaLocation":24},"/ai-transparency-center/","ai transparency center",{"text":320,"config":321},"Newsletter",{"href":322,"dataGaName":323,"dataGaLocation":24},"/company/contact/#contact-forms","newsletter",{"text":325,"config":326},"Press",{"href":327,"dataGaName":328,"dataGaLocation":24},"/press/","press",{"text":330,"config":331,"lists":332},"Contact us",{"dataNavLevelOne":272},[333],{"items":334},[335,338,343],{"text":31,"config":336},{"href":33,"dataGaName":337,"dataGaLocation":24},"talk to sales",{"text":339,"config":340},"Support portal",{"href":341,"dataGaName":342,"dataGaLocation":24},"https://support.gitlab.com","support portal",{"text":344,"config":345},"Customer portal",{"href":346,"dataGaName":347,"dataGaLocation":24},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":349,"login":350,"suggestions":357},"Close",{"text":351,"link":352},"To search repositories and projects, login to",{"text":353,"config":354},"gitlab.com",{"href":38,"dataGaName":355,"dataGaLocation":356},"search login","search",{"text":358,"default":359},"Suggestions",[360,362,366,368,372,376],{"text":53,"config":361},{"href":58,"dataGaName":53,"dataGaLocation":356},{"text":363,"config":364},"Code Suggestions (AI)",{"href":365,"dataGaName":363,"dataGaLocation":356},"/solutions/code-suggestions/",{"text":87,"config":367},{"href":89,"dataGaName":87,"dataGaLocation":356},{"text":369,"config":370},"GitLab on AWS",{"href":371,"dataGaName":369,"dataGaLocation":356},"/partners/technology-partners/aws/",{"text":373,"config":374},"GitLab on Google Cloud",{"href":375,"dataGaName":373,"dataGaLocation":356},"/partners/technology-partners/google-cloud-platform/",{"text":377,"config":378},"Why GitLab?",{"href":66,"dataGaName":377,"dataGaLocation":356},{"freeTrial":380,"mobileIcon":385,"desktopIcon":390,"secondaryButton":393},{"text":381,"config":382},"Start free trial",{"href":383,"dataGaName":29,"dataGaLocation":384},"https://gitlab.com/-/trials/new/","nav",{"altText":386,"config":387},"Gitlab Icon",{"src":388,"dataGaName":389,"dataGaLocation":384},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":386,"config":391},{"src":392,"dataGaName":389,"dataGaLocation":384},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":394,"config":395},"Get Started",{"href":396,"dataGaName":397,"dataGaLocation":384},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":399,"mobileIcon":403,"desktopIcon":405},{"text":400,"config":401},"Learn more about GitLab Duo",{"href":58,"dataGaName":402,"dataGaLocation":384},"gitlab duo",{"altText":386,"config":404},{"src":388,"dataGaName":389,"dataGaLocation":384},{"altText":386,"config":406},{"src":392,"dataGaName":389,"dataGaLocation":384},{"button":408,"mobileIcon":413,"desktopIcon":415},{"text":409,"config":410},"/switch",{"href":411,"dataGaName":412,"dataGaLocation":384},"#contact","switch",{"altText":386,"config":414},{"src":388,"dataGaName":389,"dataGaLocation":384},{"altText":386,"config":416},{"src":417,"dataGaName":389,"dataGaLocation":384},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":419,"mobileIcon":424,"desktopIcon":426},{"text":420,"config":421},"Back to pricing",{"href":166,"dataGaName":422,"dataGaLocation":384,"icon":423},"back to pricing","GoBack",{"altText":386,"config":425},{"src":388,"dataGaName":389,"dataGaLocation":384},{"altText":386,"config":427},{"src":392,"dataGaName":389,"dataGaLocation":384},{"title":429,"button":430,"config":435},"See how agentic AI transforms software delivery",{"text":431,"config":432},"Watch GitLab Transcend now",{"href":433,"dataGaName":434,"dataGaLocation":24},"/events/transcend/virtual/","transcend event",{"layout":436,"icon":437,"disabled":13},"release","AiStar",{"data":439},{"text":440,"source":441,"edit":447,"contribute":452,"config":457,"items":462,"minimal":669},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":442,"config":443},"View page source",{"href":444,"dataGaName":445,"dataGaLocation":446},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":448,"config":449},"Edit this page",{"href":450,"dataGaName":451,"dataGaLocation":446},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":453,"config":454},"Please contribute",{"href":455,"dataGaName":456,"dataGaLocation":446},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":458,"facebook":459,"youtube":460,"linkedin":461},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[463,510,564,608,635],{"title":164,"links":464,"subMenu":479},[465,469,474],{"text":466,"config":467},"View plans",{"href":166,"dataGaName":468,"dataGaLocation":446},"view plans",{"text":470,"config":471},"Why Premium?",{"href":472,"dataGaName":473,"dataGaLocation":446},"/pricing/premium/","why premium",{"text":475,"config":476},"Why Ultimate?",{"href":477,"dataGaName":478,"dataGaLocation":446},"/pricing/ultimate/","why ultimate",[480],{"title":481,"links":482},"Contact Us",[483,486,488,490,495,500,505],{"text":484,"config":485},"Contact sales",{"href":33,"dataGaName":34,"dataGaLocation":446},{"text":339,"config":487},{"href":341,"dataGaName":342,"dataGaLocation":446},{"text":344,"config":489},{"href":346,"dataGaName":347,"dataGaLocation":446},{"text":491,"config":492},"Status",{"href":493,"dataGaName":494,"dataGaLocation":446},"https://status.gitlab.com/","status",{"text":496,"config":497},"Terms of use",{"href":498,"dataGaName":499,"dataGaLocation":446},"/terms/","terms of use",{"text":501,"config":502},"Privacy statement",{"href":503,"dataGaName":504,"dataGaLocation":446},"/privacy/","privacy statement",{"text":506,"config":507},"Cookie preferences",{"dataGaName":508,"dataGaLocation":446,"id":509,"isOneTrustButton":13},"cookie preferences","ot-sdk-btn",{"title":69,"links":511,"subMenu":520},[512,516],{"text":513,"config":514},"DevSecOps platform",{"href":51,"dataGaName":515,"dataGaLocation":446},"devsecops platform",{"text":517,"config":518},"AI-Assisted Development",{"href":58,"dataGaName":519,"dataGaLocation":446},"ai-assisted development",[521],{"title":522,"links":523},"Topics",[524,529,534,539,544,549,554,559],{"text":525,"config":526},"CICD",{"href":527,"dataGaName":528,"dataGaLocation":446},"/topics/ci-cd/","cicd",{"text":530,"config":531},"GitOps",{"href":532,"dataGaName":533,"dataGaLocation":446},"/topics/gitops/","gitops",{"text":535,"config":536},"DevOps",{"href":537,"dataGaName":538,"dataGaLocation":446},"/topics/devops/","devops",{"text":540,"config":541},"Version Control",{"href":542,"dataGaName":543,"dataGaLocation":446},"/topics/version-control/","version control",{"text":545,"config":546},"DevSecOps",{"href":547,"dataGaName":548,"dataGaLocation":446},"/topics/devsecops/","devsecops",{"text":550,"config":551},"Cloud Native",{"href":552,"dataGaName":553,"dataGaLocation":446},"/topics/cloud-native/","cloud native",{"text":555,"config":556},"AI for Coding",{"href":557,"dataGaName":558,"dataGaLocation":446},"/topics/devops/ai-for-coding/","ai for coding",{"text":560,"config":561},"Agentic AI",{"href":562,"dataGaName":563,"dataGaLocation":446},"/topics/agentic-ai/","agentic ai",{"title":565,"links":566},"Solutions",[567,569,571,576,580,583,587,590,592,595,598,603],{"text":111,"config":568},{"href":106,"dataGaName":111,"dataGaLocation":446},{"text":100,"config":570},{"href":83,"dataGaName":84,"dataGaLocation":446},{"text":572,"config":573},"Agile development",{"href":574,"dataGaName":575,"dataGaLocation":446},"/solutions/agile-delivery/","agile delivery",{"text":577,"config":578},"SCM",{"href":96,"dataGaName":579,"dataGaLocation":446},"source code management",{"text":525,"config":581},{"href":89,"dataGaName":582,"dataGaLocation":446},"continuous integration & delivery",{"text":584,"config":585},"Value stream management",{"href":139,"dataGaName":586,"dataGaLocation":446},"value stream management",{"text":530,"config":588},{"href":589,"dataGaName":533,"dataGaLocation":446},"/solutions/gitops/",{"text":149,"config":591},{"href":151,"dataGaName":152,"dataGaLocation":446},{"text":593,"config":594},"Small business",{"href":156,"dataGaName":157,"dataGaLocation":446},{"text":596,"config":597},"Public sector",{"href":161,"dataGaName":162,"dataGaLocation":446},{"text":599,"config":600},"Education",{"href":601,"dataGaName":602,"dataGaLocation":446},"/solutions/education/","education",{"text":604,"config":605},"Financial services",{"href":606,"dataGaName":607,"dataGaLocation":446},"/solutions/finance/","financial services",{"title":169,"links":609},[610,612,614,616,619,621,623,625,627,629,631,633],{"text":181,"config":611},{"href":183,"dataGaName":184,"dataGaLocation":446},{"text":186,"config":613},{"href":188,"dataGaName":189,"dataGaLocation":446},{"text":191,"config":615},{"href":193,"dataGaName":194,"dataGaLocation":446},{"text":196,"config":617},{"href":198,"dataGaName":618,"dataGaLocation":446},"docs",{"text":219,"config":620},{"href":221,"dataGaName":222,"dataGaLocation":446},{"text":214,"config":622},{"href":216,"dataGaName":217,"dataGaLocation":446},{"text":224,"config":624},{"href":226,"dataGaName":227,"dataGaLocation":446},{"text":232,"config":626},{"href":234,"dataGaName":235,"dataGaLocation":446},{"text":237,"config":628},{"href":239,"dataGaName":240,"dataGaLocation":446},{"text":242,"config":630},{"href":244,"dataGaName":245,"dataGaLocation":446},{"text":247,"config":632},{"href":249,"dataGaName":250,"dataGaLocation":446},{"text":252,"config":634},{"href":254,"dataGaName":255,"dataGaLocation":446},{"title":270,"links":636},[637,639,641,643,645,647,649,653,658,660,662,664],{"text":277,"config":638},{"href":279,"dataGaName":272,"dataGaLocation":446},{"text":282,"config":640},{"href":284,"dataGaName":285,"dataGaLocation":446},{"text":290,"config":642},{"href":292,"dataGaName":293,"dataGaLocation":446},{"text":295,"config":644},{"href":297,"dataGaName":298,"dataGaLocation":446},{"text":300,"config":646},{"href":302,"dataGaName":303,"dataGaLocation":446},{"text":305,"config":648},{"href":307,"dataGaName":308,"dataGaLocation":446},{"text":650,"config":651},"Sustainability",{"href":652,"dataGaName":650,"dataGaLocation":446},"/sustainability/",{"text":654,"config":655},"Diversity, inclusion and belonging (DIB)",{"href":656,"dataGaName":657,"dataGaLocation":446},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":310,"config":659},{"href":312,"dataGaName":313,"dataGaLocation":446},{"text":320,"config":661},{"href":322,"dataGaName":323,"dataGaLocation":446},{"text":325,"config":663},{"href":327,"dataGaName":328,"dataGaLocation":446},{"text":665,"config":666},"Modern Slavery Transparency Statement",{"href":667,"dataGaName":668,"dataGaLocation":446},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":670},[671,674,677],{"text":672,"config":673},"Terms",{"href":498,"dataGaName":499,"dataGaLocation":446},{"text":675,"config":676},"Cookies",{"dataGaName":508,"dataGaLocation":446,"id":509,"isOneTrustButton":13},{"text":678,"config":679},"Privacy",{"href":503,"dataGaName":504,"dataGaLocation":446},[681,692,704,714,725,736,746,757,767,776,786,796,807,816,823,832,841,852,862,873,883,893,903,913,923,933,943],{"content":682,"config":690},{"title":683,"heroImage":684,"category":685,"description":686,"authors":687,"date":689},"Total Blocking Time - The metric to know for faster website performance","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682637/Blog/Hero%20Images/tbt_cover_image.jpg","engineering","Learn how to identify and fix some root causes for high Total Blocking Time.",[688],"Jacques Erasmus","2023-02-14",{"slug":691,"externalUrl":-1},"understanding-and-improving-total-blocking-time",{"content":693,"config":702},{"title":694,"heroImage":695,"category":696,"description":697,"authors":698,"date":701},"Get to know the new GitLab typefaces","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669926/Blog/Hero%20Images/Cover3.png","news","Dive deep into the considerations for changing to GitLab Sans (Inter) and JetBrains Mono, including improved readability.",[699,700],"Sascha Eggenberger","Jeremy Elder","2023-01-17",{"slug":703,"externalUrl":-1},"new-typefaces-in-gitlab",{"content":705,"config":712},{"title":706,"heroImage":707,"category":685,"description":708,"authors":709,"date":711},"How to choose the right static site generator","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682290/Blog/Hero%20Images/kelly-sikkema-gchfxsdcmje-unsplash-resized.jpg","Here's an in-depth look at 6 static site generators that deploy to GitLab Pages.",[710],"Fatima Sarah Khalid","2022-04-18",{"slug":713,"externalUrl":-1},"comparing-static-site-generators",{"content":715,"config":723},{"title":716,"heroImage":717,"category":685,"description":718,"authors":719,"date":722},"Why we spent the last month eliminating PostgreSQL subtransactions","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669470/Blog/Hero%20Images/nessie.jpg","How a mysterious stall in database queries uncovered a performance limitation with PostgreSQL.",[720,721],"Grzegorz Bizon","Stan Hu","2021-09-29",{"slug":724,"externalUrl":-1},"why-we-spent-the-last-month-eliminating-postgresql-subtransactions",{"content":726,"config":734},{"title":727,"heroImage":728,"category":729,"description":730,"authors":731,"date":733},"Placebo Lines on the Pipeline Graph","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679507/Blog/Hero%20Images/ci-cd.png","unfiltered","Have you noticed the connecting lines missing on your pipelines lately? Here's why",[732],"Sam Beckham","2021-05-11",{"slug":735,"externalUrl":-1},"placebo-lines-on-the-pipeline-graph",{"content":737,"config":744},{"title":738,"heroImage":739,"category":729,"description":740,"authors":741,"date":743},"Why do GitLab designers contribute to the codebase?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679556/Blog/Hero%20Images/insights.png","This article is not another blog post about whether designers should code. Instead, it's the perspective of a GitLab designer learning to contribute.",[742],"Austin Regnery","2021-03-17",{"slug":745,"externalUrl":-1},"why-do-gitlab-designers-contribute-to-the-codebase",{"content":747,"config":755},{"title":748,"heroImage":749,"category":750,"description":751,"authors":752,"date":754},"How to carry out effective code reviews","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678861/Blog/Hero%20Images/pre-commit.jpg","insights","From time management to unblocking, discover the secrets of more efficient code reviews.",[753],"Phil Hughes","2020-09-08",{"slug":756,"externalUrl":-1},"efficient-code-review-tips",{"content":758,"config":765},{"title":759,"heroImage":760,"category":685,"description":761,"authors":762,"date":764},"The trouble with technical interviews? They aren't like the job you're interviewing for","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681148/Blog/Hero%20Images/nycbrooklyn.jpg","Forget the coding exercise. Here's how to create realistic scenarios for engineering candidates in technical interviews.",[763],"Sara Kassabian","2020-03-19",{"slug":766,"externalUrl":-1},"the-trouble-with-technical-interviews",{"content":768,"config":774},{"title":769,"heroImage":770,"category":685,"description":771,"authors":772,"date":773},"Why we scoped down to build up error tracking ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665440/Blog/Hero%20Images/automate-ce-ee-merges.jpg","We dig into how shipping small iterations is accelerating delivery on our error tracking product.",[763],"2020-01-23",{"slug":775,"externalUrl":-1},"iteration-on-error-tracking",{"content":777,"config":784},{"title":778,"heroImage":779,"category":685,"description":780,"authors":781,"date":783},"Why we chose ECharts for data visualizations","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666699/Blog/Hero%20Images/banner.jpg","Learn why GitLab switched from D3.js to ECharts as our library of choice for rendering data visualizations.",[782],"Clement Ho","2019-09-30",{"slug":785,"externalUrl":-1},"why-we-chose-echarts",{"content":787,"config":794},{"title":788,"heroImage":789,"category":272,"description":790,"authors":791,"date":793},"Wrapping up GitLab Commit","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680823/Blog/Hero%20Images/commit-brooklyn-graffiti-cover.jpg","From bagels to bowling with a healthy dose of DevSecOps and CI/CD in between, it was an epic day of learning and sharing at GitLab Commit Brooklyn.",[792],"Valerie Silverthorne","2019-09-18",{"slug":795,"externalUrl":-1},"wrapping-up-commit",{"content":797,"config":805},{"title":798,"heroImage":799,"category":750,"description":800,"authors":801,"date":804},"GitLab and HashiCorp: Providing application and infrastructure delivery workflows","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670238/Blog/Hero%20Images/gitlab-terraform-pipelines.jpg","Discover how to leverage CI/CD for your infrastructure scripts with Terraform and GitLab.",[802,803],"Kelly Hair","Anthony Davanzo","2019-09-17",{"slug":806,"externalUrl":-1},"gitlab-hashicorp-terraform-vault-pt-1",{"content":808,"config":814},{"title":809,"heroImage":810,"category":272,"description":811,"authors":812,"date":804},"Announcing $268 million in Series E funding","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664134/Blog/Hero%20Images/gitlabcommitbrooklyn.png","New funding and our $2.75 billion valuation will allow us to enhance monitoring and security capabilities.",[813],"GitLab",{"slug":815,"externalUrl":-1},"gitlab-series-e-funding",{"content":817,"config":821},{"title":818,"heroImage":810,"category":272,"description":819,"authors":820,"date":804},"At GitLab Commit, our product roadmap, new partners, and a new milestone","Live from GitLab Commit: what’s next for our product strategy, expanded partnerships, and more.",[792],{"slug":822,"externalUrl":-1},"live-from-commit-news",{"content":824,"config":830},{"title":825,"heroImage":826,"category":827,"description":828,"authors":829,"date":804},"GitLab Commit: How MRI Technologies used GitLab to bring unified toolchains to NASA","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678434/Blog/Hero%20Images/nasagitlab.jpg","open-source","Live from GitLab Commit: NASA will be flying Kubernetes clusters to the moon and GitLab is helping.",[792],{"slug":831,"externalUrl":-1},"open-source-nasa-gl",{"content":833,"config":839},{"title":834,"heroImage":810,"category":272,"description":835,"authors":836,"date":838},"How to get the most out of GitLab Commit","We’re taking over the Williamsburg neighborhood of Brooklyn and opening up our world to you. Here’s everything you need to know.",[837],"Emily Kyle","2019-09-13",{"slug":840,"externalUrl":-1},"get-ready-for-commit",{"content":842,"config":850},{"title":843,"heroImage":844,"category":685,"description":845,"authors":846,"date":849},"How we delivered more performant and robust task lists in GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668319/Blog/Hero%20Images/more-robust-task-lists.jpg","How simple checkboxes became a challenging engineering problem – and how we fixed it.",[847,848],"Fatih Acet","Brett Walker","2019-04-05",{"slug":851,"externalUrl":-1},"more-performant-and-robust-task-lists-in-gitlab",{"content":853,"config":860},{"title":854,"heroImage":855,"category":272,"description":856,"authors":857,"date":859},"Why we use Ruby on Rails to build GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668296/Blog/Hero%20Images/gitlab-ruby.jpg","Here's our CEO on GitLab’s inception using Rails, and how challenges are being handled along the way.",[858],"Aricka Flowers","2018-10-29",{"slug":861,"externalUrl":-1},"why-we-use-rails-to-build-gitlab",{"content":863,"config":871},{"title":864,"heroImage":865,"category":866,"description":867,"authors":868,"date":870},"How I transitioned from frontend to UX","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679015/Blog/Hero%20Images/frontendux.jpg","culture","One GitLab team-member shares how switching from a frontend engineer to a UX designer has been a rewarding experience.",[869],"Annabel Dunstone Gray","2018-10-05",{"slug":872,"externalUrl":-1},"how-i-transitioned-from-frontend-to-ux",{"content":874,"config":881},{"title":875,"heroImage":876,"category":685,"description":877,"authors":878,"date":880},"How DevOps and GitLab CI/CD enhance a frontend workflow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679026/Blog/Hero%20Images/frontendworkflow.jpg","The GitLab frontend team uses DevOps and CI/CD to ensure code consistency, fast delivery, and simple automation.",[879],"José Iván Vargas","2018-08-09",{"slug":882,"externalUrl":-1},"how-devops-and-gitlab-cicd-enhance-a-frontend-workflow",{"content":884,"config":891},{"title":885,"heroImage":886,"category":685,"description":887,"authors":888,"date":890},"Let's play Reviewer Roulette! An easy way to find a reviewer for your merge request","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672195/Blog/Hero%20Images/play-reviewer-roulette.jpg","Finding the right reviewer for a merge request can be tough. Reviewer Roulette makes the decision easier – by making it random!",[889],"Dennis Tang","2018-06-28",{"slug":892,"externalUrl":-1},"play-reviewer-roulette",{"content":894,"config":901},{"title":895,"heroImage":896,"category":685,"description":897,"authors":898,"date":900},"Meet the GitLab Web IDE","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678812/Blog/Hero%20Images/web-ide-cover.jpg","Here's how we went from a proof of concept to a new feature that makes it even easier for everyone to edit inside of GitLab.",[899],"Dimitrie Hoekstra","2018-06-15",{"slug":902,"externalUrl":-1},"introducing-gitlab-s-integrated-development-environment",{"content":904,"config":911},{"title":905,"heroImage":906,"category":685,"description":907,"authors":908,"date":910},"Our journey in switching to native Unicode emoji","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672573/Blog/Hero%20Images/journey-in-native-unicode-emoji-cover.png","Unicode is hard. Here's a guide to getting native Unicode Emoji right 👌. Learn more!",[909],"Eric Eastwood","2018-05-30",{"slug":912,"externalUrl":-1},"journey-in-native-unicode-emoji",{"content":914,"config":921},{"title":915,"heroImage":916,"category":685,"description":917,"authors":918,"date":920},"How eslint-plugin-vue improved our code reviews","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680227/Blog/Hero%20Images/code_cover_image.jpg","A few months ago we felt the need to build a style guide for Vue and now are using eslint-vue-plugin, which is saving us time in our code reviews.",[919],"Filipa Lacerda","2018-02-13",{"slug":922,"externalUrl":-1},"how-we-added-eslint-into-vue",{"content":924,"config":931},{"title":925,"heroImage":926,"category":685,"description":927,"authors":928,"date":930},"How GitLab switched to Headless Chrome for testing","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680270/Blog/Hero%20Images/headless-chrome-cover.jpg","A detailed explanation with examples of how GitLab made the switch to headless Chrome.",[929],"Mike Greiling","2017-12-19",{"slug":932,"externalUrl":-1},"moving-to-headless-chrome",{"content":934,"config":941},{"title":935,"heroImage":936,"category":685,"description":937,"authors":938,"date":940},"How we do Vue: one year later","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680321/Blog/Hero%20Images/vue-title.jpg","How we, at GitLab, write VueJS, one year later.",[939],"Jacob Schatz","2017-11-09",{"slug":942,"externalUrl":-1},"gitlab-vue-one-year-later",{"content":944,"config":950},{"title":945,"heroImage":946,"category":272,"description":947,"authors":948,"date":949},"GitLab was at VueConf 2017!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682980/Blog/Hero%20Images/cover_image.jpg","GitLab was at VueConf 2017 sharing how we use Vue.js.",[919],"2017-06-29",{"slug":951,"externalUrl":-1},"gitlab-at-vue-conf",1776438100092]