[{"data":1,"prerenderedAt":994},["ShallowReactive",2],{"/blog/why-we-chose-echarts":3,"navigation-en-us":208,"banner-en-us":636,"footer-en-us":646,"blog-post-authors-en-us-Clement Ho":890,"blog-related-posts-en-us-why-we-chose-echarts":904,"blog-promotions-en-us":930,"next-steps-en-us":984},{"id":4,"title":5,"authors":6,"body":8,"category":186,"date":187,"description":188,"extension":189,"externalUrl":190,"faq":190,"featured":191,"heroImage":192,"meta":193,"navigation":194,"path":195,"seo":196,"slug":200,"stem":201,"tags":202,"template":206,"updatedDate":190,"__hash__":207},"blogPosts/en-us/blog/why-we-chose-echarts.md","Why we chose ECharts for data visualizations",[7],"Clement Ho",{"type":9,"value":10,"toc":178},"minimark",[11,21,24,27,32,41,50,61,70,74,83,92,101,110,119,123,144,147,151,172,175],[12,13,14,15,20],"p",{},"As GitLab continues to grow in depth and breadth across the ",[16,17,19],"a",{"href":18},"/topics/devops/","DevOps lifecycle",", the use of charts and data visualizations has increased in frequency and complexity. Throughout the life of GitLab as a project, we've used multiple libraries to render beautiful charts. As the number of different libraries increased along with our charting requirements, we decided it was time to start unifying our charting libraries to help us move quickly.",[12,22,23],{},"At first, we wanted to unify our charts using D3.js but this was difficult because D3.js isn't a charting library. In their own words: \"D3.js is a JavaScript library for manipulating documents based on data,\" meaning it is a low level visualization tool. D3.js is powerful but it has a big learning curve. Our team did not have the time to develop the expertise without impacting our product development velocity. We also knew we had an ambitious hiring plan, and we would be adding time to our onboarding process by using D3.js.",[12,25,26],{},"The frontend team set out to investigate different charting libraries that we could use to gain more velocity. The library didn't have to do everything we needed, but it had to get us most of the way there. We investigated many libraries including ECharts, Britecharts, and Plotly as potential options. In the end, ECharts was the clear winner for us. Here's why:",[28,29,31],"h2",{"id":30},"echarts-robust-yet-flexible-chart-types","Echarts robust yet flexible chart types",[12,33,34,35,40],{},"On the monitor stage frontend team, we have the ",[16,36,39],{"href":37,"rel":38},"https://docs.gitlab.com/operations/",[],"ambitious goal of replacing well-known monitoring tools like DataDog and Grafana",". It was absolutely critical that our charting library had enough flexibility for us to create our own custom charts, but it was also important that the library had existing charts so that we didn’t have to create every chart from scratch for the sake of development velocity.",[12,42,43,44,49],{},"ECharts has an ",[16,45,48],{"href":46,"rel":47},"https://echarts.apache.org/examples/en/",[],"incredible showcase"," of the adaptability of their charts. This was a great starting point for us. We tested out styling ECharts to match our design system to determine how adaptable it was and we were very satisfied with the results.",[12,51,52,57],{},[53,54],"img",{"alt":55,"src":56},"design","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399326/blog/Content%20Images/why-we-chose-echarts/design.png",[58,59,60],"em",{},"Design spec for future GitLab charts.",[12,62,63,67],{},[53,64],{"alt":65,"src":66},"implementation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399327/blog/Content%20Images/why-we-chose-echarts/implementation.png",[58,68,69],{},"Evaluation implementation using ECharts.",[28,71,73],{"id":72},"echarts-performance","Echarts performance",[12,75,76,77,82],{},"When we were evaluating ECharts, we took one of our most complex user interactions for charts to benchmark the performance of the charting library. Although ECharts wasn’t perfect, it fared better than the alternatives. Below are some gifs recorded from changing the chart values in our ",[16,78,81],{"href":79,"rel":80},"https://gitlab.com/adriel/echarts-proof-of-concept",[],"evaluation project",". As you can see, performance does decrease as the data points increase but it is still usable and it is unlikely we would have that many points in such a small chart.",[12,84,85,89],{},[53,86],{"alt":87,"src":88},"10 values","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399324/blog/Content%20Images/why-we-chose-echarts/10-points.gif",[58,90,91],{},"Linked chart with 10 values.",[12,93,94,98],{},[53,95],{"alt":96,"src":97},"100 values","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399324/blog/Content%20Images/why-we-chose-echarts/100-points.gif",[58,99,100],{},"Linked chart with 100 values.",[12,102,103,107],{},[53,104],{"alt":105,"src":106},"1000 values","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399325/blog/Content%20Images/why-we-chose-echarts/1000-points.gif",[58,108,109],{},"Linked chart with 1000 values.",[12,111,112,116],{},[53,113],{"alt":114,"src":115},"4000 values","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399325/blog/Content%20Images/why-we-chose-echarts/4000-points.gif",[58,117,118],{},"Linked chart with 4000 values.",[28,120,122],{"id":121},"growing-ecosystem","Growing ecosystem",[12,124,125,126,131,132,137,138,143],{},"ECharts isn’t perfect but it has ",[16,127,130],{"href":128,"rel":129},"https://incubator.apache.org/projects/echarts.html",[],"improved over time",". It started off as an ",[16,133,136],{"href":134,"rel":135},"https://whimsy.apache.org/board/minutes/ECharts.html",[],"open source project from Baidu"," but is still going through the process of being incubated into the Apache Software Foundation. The ",[16,139,142],{"href":140,"rel":141},"https://echarts.apache.org/en/committers.html",[],"majority of ECharts users still seem to be based in China",", meaning the developer community and corresponding documentation is written primarily in Chinese. Despite some language barriers, the ECharts community does seem to be growing more internationally. We’ve come across a variety of companies from the United States and Mexico who are either evaluating or using ECharts internally.",[12,145,146],{},"The Podling Project Management Committee (PPMC) of ECharts, which is their core team in GitLab terms, has also been very welcoming and energetic about growing the ecosystem. As we decided on ECharts and began developing new charts and replacing old charts, we’ve been able to build a partnership with the company. They have been very kind to meet with us online every month to help answer questions and to guide us in using their library effectively. This has been extremely helpful. For example during one of our meetings, Shuang Su gave us a brief walkthrough of the codebase and it's architecture.",[28,148,150],{"id":149},"where-we-are-today-with-echarts","Where we are today with Echarts",[12,152,153,154,159,160,165,166,171],{},"We introduced ",[16,155,158],{"href":156,"rel":157},"https://gitlab.com/gitlab-org/gitlab-ce/issues/53147",[],"ECharts to the GitLab codebase in 11.6"," and through ECharts have been rapidly building new chart types into our component library at a faster rate than ever before. We started with updating the charts in just our Monitor stage but have since introduced charts into the ",[16,161,164],{"href":162,"rel":163},"https://gitlab.com/gitlab-org/gitlab-ee/issues/6954",[],"Secure"," and ",[16,167,170],{"href":168,"rel":169},"https://gitlab.com/gitlab-org/gitlab-ee/issues/12079",[],"Manage"," stages.",[12,173,174],{},"Depending on your use case, Apache ECharts could be a good fit for you too. For our team, ECharts has without a doubt increased our product development velocity over against what it was with D3.js.",[12,176,177],{},"| Old chart in D3.js | New chart in ECharts |\n|",{"title":179,"searchDepth":180,"depth":180,"links":181},"",2,[182,183,184,185],{"id":30,"depth":180,"text":31},{"id":72,"depth":180,"text":73},{"id":121,"depth":180,"text":122},{"id":149,"depth":180,"text":150},"engineering","2019-09-30","Learn why GitLab switched from D3.js to ECharts as our library of choice for rendering data visualizations.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666699/Blog/Hero%20Images/banner.jpg",{},true,"/en-us/blog/why-we-chose-echarts",{"title":5,"description":188,"ogTitle":5,"ogDescription":188,"noIndex":191,"ogImage":192,"ogUrl":197,"ogSiteName":198,"ogType":199,"canonicalUrls":197},"https://about.gitlab.com/blog/why-we-chose-echarts","https://about.gitlab.com","article","why-we-chose-echarts","en-us/blog/why-we-chose-echarts",[203,204,205],"inside GitLab","UI","frontend","BlogPost","yeJjh2yhviJYhNpJ_dF5shWBUL_PUuteWk_CIWpXdrM",{"logo":209,"freeTrial":214,"sales":219,"login":224,"items":229,"search":556,"minimal":587,"duo":606,"switchNav":615,"pricingDeployment":626},{"config":210},{"href":211,"dataGaName":212,"dataGaLocation":213},"/","gitlab logo","header",{"text":215,"config":216},"Get free trial",{"href":217,"dataGaName":218,"dataGaLocation":213},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":220,"config":221},"Request a demo",{"href":222,"dataGaName":223,"dataGaLocation":213},"/sales/?contact-topic=request-demo","sales",{"text":225,"config":226},"Sign in",{"href":227,"dataGaName":228,"dataGaLocation":213},"https://gitlab.com/users/sign_in/","sign in",[230,259,359,364,478,534],{"text":231,"config":232,"menu":234},"Platform",{"dataNavLevelOne":233},"platform",{"type":235,"columns":236},"cards",[237,243,251],{"title":231,"description":238,"link":239},"The intelligent orchestration platform for DevSecOps",{"text":240,"config":241},"Explore our Platform",{"href":242,"dataGaName":233,"dataGaLocation":213},"/platform/",{"title":244,"description":245,"link":246},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":247,"config":248},"Meet GitLab Duo",{"href":249,"dataGaName":250,"dataGaLocation":213},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":252,"description":253,"link":254},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":255,"config":256},"Learn more",{"href":257,"dataGaName":258,"dataGaLocation":213},"/why-gitlab/","why gitlab",{"text":260,"left":194,"config":261,"menu":263},"Product",{"dataNavLevelOne":262},"solutions",{"type":264,"link":265,"columns":269,"feature":338},"lists",{"text":266,"config":267},"View all Solutions",{"href":268,"dataGaName":262,"dataGaLocation":213},"/solutions/",[270,294,317],{"title":271,"description":272,"link":273,"items":278},"Automation","CI/CD and automation to accelerate deployment",{"config":274},{"icon":275,"href":276,"dataGaName":277,"dataGaLocation":213},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[279,283,286,290],{"text":280,"config":281},"CI/CD",{"href":282,"dataGaLocation":213,"dataGaName":280},"/solutions/continuous-integration/",{"text":244,"config":284},{"href":249,"dataGaLocation":213,"dataGaName":285},"gitlab duo agent platform - product menu",{"text":287,"config":288},"Source Code Management",{"href":289,"dataGaLocation":213,"dataGaName":287},"/solutions/source-code-management/",{"text":291,"config":292},"Automated Software Delivery",{"href":276,"dataGaLocation":213,"dataGaName":293},"Automated software delivery",{"title":295,"description":296,"link":297,"items":302},"Security","Deliver code faster without compromising security",{"config":298},{"href":299,"dataGaName":300,"dataGaLocation":213,"icon":301},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[303,307,312],{"text":304,"config":305},"Application Security Testing",{"href":299,"dataGaName":306,"dataGaLocation":213},"Application security testing",{"text":308,"config":309},"Software Supply Chain Security",{"href":310,"dataGaLocation":213,"dataGaName":311},"/solutions/supply-chain/","Software supply chain security",{"text":313,"config":314},"Software Compliance",{"href":315,"dataGaName":316,"dataGaLocation":213},"/solutions/software-compliance/","software compliance",{"title":318,"link":319,"items":324},"Measurement",{"config":320},{"icon":321,"href":322,"dataGaName":323,"dataGaLocation":213},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[325,329,333],{"text":326,"config":327},"Visibility & Measurement",{"href":322,"dataGaLocation":213,"dataGaName":328},"Visibility and Measurement",{"text":330,"config":331},"Value Stream Management",{"href":332,"dataGaLocation":213,"dataGaName":330},"/solutions/value-stream-management/",{"text":334,"config":335},"Analytics & Insights",{"href":336,"dataGaLocation":213,"dataGaName":337},"/solutions/analytics-and-insights/","Analytics and insights",{"title":339,"type":264,"items":340},"GitLab for",[341,347,353],{"text":342,"config":343},"Enterprise",{"icon":344,"href":345,"dataGaLocation":213,"dataGaName":346},"Building","/enterprise/","enterprise",{"text":348,"config":349},"Small Business",{"icon":350,"href":351,"dataGaLocation":213,"dataGaName":352},"Work","/small-business/","small business",{"text":354,"config":355},"Public Sector",{"icon":356,"href":357,"dataGaLocation":213,"dataGaName":358},"Organization","/solutions/public-sector/","public sector",{"text":360,"config":361},"Pricing",{"href":362,"dataGaName":363,"dataGaLocation":213,"dataNavLevelOne":363},"/pricing/","pricing",{"text":365,"config":366,"menu":368},"Resources",{"dataNavLevelOne":367},"resources",{"type":264,"link":369,"columns":373,"feature":467},{"text":370,"config":371},"View all resources",{"href":372,"dataGaName":367,"dataGaLocation":213},"/resources/",[374,407,434],{"title":375,"items":376},"Getting started",[377,382,387,392,397,402],{"text":378,"config":379},"Install",{"href":380,"dataGaName":381,"dataGaLocation":213},"/install/","install",{"text":383,"config":384},"Quick start guides",{"href":385,"dataGaName":386,"dataGaLocation":213},"/get-started/","quick setup checklists",{"text":388,"config":389},"Learn",{"href":390,"dataGaLocation":213,"dataGaName":391},"https://university.gitlab.com/","learn",{"text":393,"config":394},"Product documentation",{"href":395,"dataGaName":396,"dataGaLocation":213},"https://docs.gitlab.com/","product documentation",{"text":398,"config":399},"Best practice videos",{"href":400,"dataGaName":401,"dataGaLocation":213},"/getting-started-videos/","best practice videos",{"text":403,"config":404},"Integrations",{"href":405,"dataGaName":406,"dataGaLocation":213},"/integrations/","integrations",{"title":408,"items":409},"Discover",[410,415,420,425,429],{"text":411,"config":412},"Customer success stories",{"href":413,"dataGaName":414,"dataGaLocation":213},"/customers/","customer success stories",{"text":416,"config":417},"Blog",{"href":418,"dataGaName":419,"dataGaLocation":213},"/blog/","blog",{"text":421,"config":422},"Demo Hub",{"href":423,"dataGaName":424,"dataGaLocation":213},"/demo-hub/","demo hub",{"text":426,"config":427},"The Source",{"href":428,"dataGaName":419,"dataGaLocation":213},"/the-source/",{"text":430,"config":431},"Remote",{"href":432,"dataGaName":433,"dataGaLocation":213},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":435,"items":436},"Connect",[437,442,447,452,457,462],{"text":438,"config":439},"GitLab Services",{"href":440,"dataGaName":441,"dataGaLocation":213},"/services/","services",{"text":443,"config":444},"Contribute",{"href":445,"dataGaName":446,"dataGaLocation":213},"https://contributors.gitlab.com","contribute",{"text":448,"config":449},"Community",{"href":450,"dataGaName":451,"dataGaLocation":213},"/community/","community",{"text":453,"config":454},"Forum",{"href":455,"dataGaName":456,"dataGaLocation":213},"https://forum.gitlab.com/","forum",{"text":458,"config":459},"Events",{"href":460,"dataGaName":461,"dataGaLocation":213},"/events/","events",{"text":463,"config":464},"Partners",{"href":465,"dataGaName":466,"dataGaLocation":213},"/partners/","partners",{"config":468,"title":471,"text":472,"link":473},{"background":469,"textColor":470},"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":474,"config":475},"Read the latest",{"href":476,"dataGaName":477,"dataGaLocation":213},"/whats-new/","whats new",{"text":479,"config":480,"menu":482},"Company",{"dataNavLevelOne":481},"company",{"type":264,"columns":483},[484],{"items":485},[486,491,497,499,504,509,514,519,524,529],{"text":487,"config":488},"About",{"href":489,"dataGaName":490,"dataGaLocation":213},"/company/","about",{"text":492,"config":493,"footerGa":496},"Jobs",{"href":494,"dataGaName":495,"dataGaLocation":213},"/jobs/","jobs",{"dataGaName":495},{"text":458,"config":498},{"href":460,"dataGaName":461,"dataGaLocation":213},{"text":500,"config":501},"Leadership",{"href":502,"dataGaName":503,"dataGaLocation":213},"/company/team/e-group/","leadership",{"text":505,"config":506},"Handbook",{"href":507,"dataGaName":508,"dataGaLocation":213},"https://handbook.gitlab.com/","handbook",{"text":510,"config":511},"Investor relations",{"href":512,"dataGaName":513,"dataGaLocation":213},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":515,"config":516},"Trust Center",{"href":517,"dataGaName":518,"dataGaLocation":213},"/security/","trust center",{"text":520,"config":521},"AI Transparency Center",{"href":522,"dataGaName":523,"dataGaLocation":213},"/ai-transparency-center/","ai transparency center",{"text":525,"config":526},"Newsletter",{"href":527,"dataGaName":528,"dataGaLocation":213},"/company/contact/#contact-forms","newsletter",{"text":530,"config":531},"Press",{"href":532,"dataGaName":533,"dataGaLocation":213},"/press/","press",{"text":535,"config":536,"menu":537},"Contact us",{"dataNavLevelOne":481},{"type":264,"columns":538},[539],{"items":540},[541,546,551],{"text":542,"config":543},"Talk to sales",{"href":544,"dataGaName":545,"dataGaLocation":213},"/sales/","talk to sales",{"text":547,"config":548},"Support portal",{"href":549,"dataGaName":550,"dataGaLocation":213},"https://support.gitlab.com/hc/en-us","support portal",{"text":552,"config":553},"Customer portal",{"href":554,"dataGaName":555,"dataGaLocation":213},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":557,"login":558,"suggestions":565},"Close",{"text":559,"link":560},"To search repositories and projects, login to",{"text":561,"config":562},"gitlab.com",{"href":227,"dataGaName":563,"dataGaLocation":564},"search login","search",{"text":566,"default":567},"Suggestions",[568,570,574,576,580,584],{"text":244,"config":569},{"href":249,"dataGaName":244,"dataGaLocation":564},{"text":571,"config":572},"Code Suggestions (AI)",{"href":573,"dataGaName":571,"dataGaLocation":564},"/solutions/code-suggestions/",{"text":280,"config":575},{"href":282,"dataGaName":280,"dataGaLocation":564},{"text":577,"config":578},"GitLab on AWS",{"href":579,"dataGaName":577,"dataGaLocation":564},"/partners/technology-partners/aws/",{"text":581,"config":582},"GitLab on Google Cloud",{"href":583,"dataGaName":581,"dataGaLocation":564},"/partners/technology-partners/google-cloud-platform/",{"text":585,"config":586},"Why GitLab?",{"href":257,"dataGaName":585,"dataGaLocation":564},{"freeTrial":588,"mobileIcon":593,"desktopIcon":598,"secondaryButton":601},{"text":589,"config":590},"Start free trial",{"href":591,"dataGaName":218,"dataGaLocation":592},"https://gitlab.com/-/trials/new/","nav",{"altText":594,"config":595},"Gitlab Icon",{"src":596,"dataGaName":597,"dataGaLocation":592},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":594,"config":599},{"src":600,"dataGaName":597,"dataGaLocation":592},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":602,"config":603},"Get Started",{"href":604,"dataGaName":605,"dataGaLocation":592},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":607,"mobileIcon":611,"desktopIcon":613},{"text":608,"config":609},"Learn more about GitLab Duo",{"href":249,"dataGaName":610,"dataGaLocation":592},"gitlab duo",{"altText":594,"config":612},{"src":596,"dataGaName":597,"dataGaLocation":592},{"altText":594,"config":614},{"src":600,"dataGaName":597,"dataGaLocation":592},{"button":616,"mobileIcon":621,"desktopIcon":623},{"text":617,"config":618},"/switch",{"href":619,"dataGaName":620,"dataGaLocation":592},"#contact","switch",{"altText":594,"config":622},{"src":596,"dataGaName":597,"dataGaLocation":592},{"altText":594,"config":624},{"src":625,"dataGaName":597,"dataGaLocation":592},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":627,"mobileIcon":632,"desktopIcon":634},{"text":628,"config":629},"Back to pricing",{"href":362,"dataGaName":630,"dataGaLocation":592,"icon":631},"back to pricing","GoBack",{"altText":594,"config":633},{"src":596,"dataGaName":597,"dataGaLocation":592},{"altText":594,"config":635},{"src":600,"dataGaName":597,"dataGaLocation":592},{"title":637,"titleMobile":638,"button":639,"config":644},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":255,"config":640},{"href":641,"dataGaName":642,"dataGaLocation":643},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":645,"disabled":191},"release",{"data":647},{"text":648,"source":649,"edit":655,"contribute":660,"config":665,"items":670,"minimal":879},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":650,"config":651},"View page source",{"href":652,"dataGaName":653,"dataGaLocation":654},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":656,"config":657},"Edit this page",{"href":658,"dataGaName":659,"dataGaLocation":654},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":661,"config":662},"Please contribute",{"href":663,"dataGaName":664,"dataGaLocation":654},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":666,"facebook":667,"youtube":668,"linkedin":669},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[671,718,771,815,847],{"title":360,"links":672,"subMenu":687},[673,677,682],{"text":674,"config":675},"View plans",{"href":362,"dataGaName":676,"dataGaLocation":654},"view plans",{"text":678,"config":679},"Why Premium?",{"href":680,"dataGaName":681,"dataGaLocation":654},"/pricing/premium/","why premium",{"text":683,"config":684},"Why Ultimate?",{"href":685,"dataGaName":686,"dataGaLocation":654},"/pricing/ultimate/","why ultimate",[688],{"title":689,"links":690},"Contact Us",[691,694,696,698,703,708,713],{"text":692,"config":693},"Contact sales",{"href":544,"dataGaName":223,"dataGaLocation":654},{"text":547,"config":695},{"href":549,"dataGaName":550,"dataGaLocation":654},{"text":552,"config":697},{"href":554,"dataGaName":555,"dataGaLocation":654},{"text":699,"config":700},"Status",{"href":701,"dataGaName":702,"dataGaLocation":654},"https://status.gitlab.com/","status",{"text":704,"config":705},"Terms of use",{"href":706,"dataGaName":707,"dataGaLocation":654},"/terms/","terms of use",{"text":709,"config":710},"Privacy statement",{"href":711,"dataGaName":712,"dataGaLocation":654},"/privacy/","privacy statement",{"text":714,"config":715},"Cookie preferences",{"dataGaName":716,"dataGaLocation":654,"id":717,"isOneTrustButton":194},"cookie preferences","ot-sdk-btn",{"title":260,"links":719,"subMenu":728},[720,724],{"text":721,"config":722},"DevSecOps platform",{"href":242,"dataGaName":723,"dataGaLocation":654},"devsecops platform",{"text":725,"config":726},"AI-Assisted Development",{"href":249,"dataGaName":727,"dataGaLocation":654},"ai-assisted development",[729],{"title":730,"links":731},"Topics",[732,737,742,746,751,756,761,766],{"text":733,"config":734},"CICD",{"href":735,"dataGaName":736,"dataGaLocation":654},"/topics/ci-cd/","cicd",{"text":738,"config":739},"GitOps",{"href":740,"dataGaName":741,"dataGaLocation":654},"/topics/gitops/","gitops",{"text":743,"config":744},"DevOps",{"href":18,"dataGaName":745,"dataGaLocation":654},"devops",{"text":747,"config":748},"Version Control",{"href":749,"dataGaName":750,"dataGaLocation":654},"/topics/version-control/","version control",{"text":752,"config":753},"DevSecOps",{"href":754,"dataGaName":755,"dataGaLocation":654},"/topics/devsecops/","devsecops",{"text":757,"config":758},"Cloud Native",{"href":759,"dataGaName":760,"dataGaLocation":654},"/topics/cloud-native/","cloud native",{"text":762,"config":763},"AI for Coding",{"href":764,"dataGaName":765,"dataGaLocation":654},"/topics/devops/ai-for-coding/","ai for coding",{"text":767,"config":768},"Agentic AI",{"href":769,"dataGaName":770,"dataGaLocation":654},"/topics/agentic-ai/","agentic ai",{"title":772,"links":773},"Solutions",[774,776,778,783,787,790,794,797,799,802,805,810],{"text":304,"config":775},{"href":299,"dataGaName":304,"dataGaLocation":654},{"text":293,"config":777},{"href":276,"dataGaName":277,"dataGaLocation":654},{"text":779,"config":780},"Agile development",{"href":781,"dataGaName":782,"dataGaLocation":654},"/solutions/agile-delivery/","agile delivery",{"text":784,"config":785},"SCM",{"href":289,"dataGaName":786,"dataGaLocation":654},"source code management",{"text":733,"config":788},{"href":282,"dataGaName":789,"dataGaLocation":654},"continuous integration & delivery",{"text":791,"config":792},"Value stream management",{"href":332,"dataGaName":793,"dataGaLocation":654},"value stream management",{"text":738,"config":795},{"href":796,"dataGaName":741,"dataGaLocation":654},"/solutions/gitops/",{"text":342,"config":798},{"href":345,"dataGaName":346,"dataGaLocation":654},{"text":800,"config":801},"Small business",{"href":351,"dataGaName":352,"dataGaLocation":654},{"text":803,"config":804},"Public sector",{"href":357,"dataGaName":358,"dataGaLocation":654},{"text":806,"config":807},"Education",{"href":808,"dataGaName":809,"dataGaLocation":654},"/solutions/education/","education",{"text":811,"config":812},"Financial services",{"href":813,"dataGaName":814,"dataGaLocation":654},"/solutions/finance/","financial services",{"title":365,"links":816},[817,819,821,823,826,828,831,833,835,837,839,841,843,845],{"text":378,"config":818},{"href":380,"dataGaName":381,"dataGaLocation":654},{"text":383,"config":820},{"href":385,"dataGaName":386,"dataGaLocation":654},{"text":388,"config":822},{"href":390,"dataGaName":391,"dataGaLocation":654},{"text":393,"config":824},{"href":395,"dataGaName":825,"dataGaLocation":654},"docs",{"text":416,"config":827},{"href":418,"dataGaName":419,"dataGaLocation":654},{"text":829,"config":830},"What's new",{"href":476,"dataGaName":477,"dataGaLocation":654},{"text":411,"config":832},{"href":413,"dataGaName":414,"dataGaLocation":654},{"text":430,"config":834},{"href":432,"dataGaName":433,"dataGaLocation":654},{"text":438,"config":836},{"href":440,"dataGaName":441,"dataGaLocation":654},{"text":443,"config":838},{"href":445,"dataGaName":446,"dataGaLocation":654},{"text":448,"config":840},{"href":450,"dataGaName":451,"dataGaLocation":654},{"text":453,"config":842},{"href":455,"dataGaName":456,"dataGaLocation":654},{"text":458,"config":844},{"href":460,"dataGaName":461,"dataGaLocation":654},{"text":463,"config":846},{"href":465,"dataGaName":466,"dataGaLocation":654},{"title":479,"links":848},[849,851,853,855,857,859,863,868,870,872,874],{"text":487,"config":850},{"href":489,"dataGaName":481,"dataGaLocation":654},{"text":492,"config":852},{"href":494,"dataGaName":495,"dataGaLocation":654},{"text":500,"config":854},{"href":502,"dataGaName":503,"dataGaLocation":654},{"text":505,"config":856},{"href":507,"dataGaName":508,"dataGaLocation":654},{"text":510,"config":858},{"href":512,"dataGaName":513,"dataGaLocation":654},{"text":860,"config":861},"Sustainability",{"href":862,"dataGaName":860,"dataGaLocation":654},"/sustainability/",{"text":864,"config":865},"Diversity, inclusion and belonging (DIB)",{"href":866,"dataGaName":867,"dataGaLocation":654},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":515,"config":869},{"href":517,"dataGaName":518,"dataGaLocation":654},{"text":525,"config":871},{"href":527,"dataGaName":528,"dataGaLocation":654},{"text":530,"config":873},{"href":532,"dataGaName":533,"dataGaLocation":654},{"text":875,"config":876},"Modern Slavery Transparency Statement",{"href":877,"dataGaName":878,"dataGaLocation":654},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":880},[881,884,887],{"text":882,"config":883},"Terms",{"href":706,"dataGaName":707,"dataGaLocation":654},{"text":885,"config":886},"Cookies",{"dataGaName":716,"dataGaLocation":654,"id":717,"isOneTrustButton":194},{"text":888,"config":889},"Privacy",{"href":711,"dataGaName":712,"dataGaLocation":654},[891],{"id":892,"title":7,"body":190,"config":893,"content":895,"description":190,"extension":898,"meta":899,"navigation":194,"path":900,"seo":901,"stem":902,"__hash__":903},"blogAuthors/en-us/blog/authors/clement-ho.yml",{"template":894},"BlogAuthor",{"name":7,"config":896},{"headshot":179,"ctfId":897},"ClemMakesApps","yml",{},"/en-us/blog/authors/clement-ho",{},"en-us/blog/authors/clement-ho","6ylR84HlSG3erbjSU_mZmmTKuXk5kNBHOl6FPisA1TE",[905,914,922],{"title":906,"description":907,"heroImage":908,"category":186,"date":909,"authors":910,"slug":913,"externalUrl":190},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[911,912],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":915,"description":916,"heroImage":917,"category":186,"date":918,"authors":919,"slug":921,"externalUrl":190},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[920],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":923,"description":924,"heroImage":925,"category":186,"date":926,"authors":927,"slug":929,"externalUrl":190},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[928],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":931},[932,946,958,970],{"id":933,"categories":934,"header":936,"text":937,"button":938,"image":943},"ai-modernization",[935],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":939,"config":940},"Get your AI maturity score",{"href":941,"dataGaName":942,"dataGaLocation":419},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":944},{"src":945},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":947,"categories":948,"header":950,"text":937,"button":951,"image":955},"devops-modernization",[949,755],"product","Are you just managing tools or shipping innovation?",{"text":952,"config":953},"Get your DevOps maturity score",{"href":954,"dataGaName":942,"dataGaLocation":419},"/assessments/devops-modernization-assessment/",{"config":956},{"src":957},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":959,"categories":960,"header":962,"text":937,"button":963,"image":967},"security-modernization",[961],"security","Are you trading speed for security?",{"text":964,"config":965},"Get your security maturity score",{"href":966,"dataGaName":942,"dataGaLocation":419},"/assessments/security-modernization-assessment/",{"config":968},{"src":969},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":971,"paths":972,"header":975,"text":976,"button":977,"image":982},"github-azure-migration",[973,974],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":978,"config":979},"See how GitLab compares to GitHub",{"href":980,"dataGaName":981,"dataGaLocation":419},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":983},{"src":957},{"header":985,"blurb":986,"button":987,"secondaryButton":992},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":988,"config":989},"Get your free trial",{"href":990,"dataGaName":218,"dataGaLocation":991},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":692,"config":993},{"href":544,"dataGaName":223,"dataGaLocation":991},1786803775377]