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