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