<!DOCTYPE html><html lang="en-US"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="images/favicon.png"><link rel="stylesheet" type="text/css" href="vendors/bootstrap/css/bootstrap.min.css"><!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries--><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><link rel="stylesheet" type="text/css" href="./css/main.css?_v_=1536949973669"><script>window.EC_WWW_LANG = 'en';
</script><script type="text/javascript" src="./vendors/pace/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
    var el = document.createElement('style');
    el.innerHTML = ''
        + '@font-face {font-family:"noto-thin";src:local("Microsoft Yahei");}'
        + '@font-face {font-family:"noto-light";src:local("Microsoft Yahei");}';
    document.head.insertBefore(el, document.getElementById('font-hack'));
}
</script><script type="text/javascript" src="./vendors/jquery/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="./images/forie.png" alt="ie tip"></div></body><![endif]-->
<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div id="main"><style>#download-main h3 {
    width: 650px;
}
#download-main .d-section-version .circle-wrap {
    line-height: 120px;
    font-size: 20px;
    font-family: Helvetica;
    color: #214d62;
    font-weight: normal;
}
</style><nav class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false" class="navbar-toggle collapsed"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="./index.html" class="navbar-brand"><img src="./images/logo.png" alt="echarts logo" class="navbar-logo"></a></div><div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse"><ul class="nav navbar-nav navbar-left"><li id="nav-index"><a href="./index.html">Home</a></li><li id="nav-downloads"><a href="./download.html">Downloads</a></li><li id="nav-start" class="dropdown"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Get Started<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="./tutorial.html">Tutorials</a></li><li><a href="https://ecomfe.github.io/echarts-examples/public/index.html" target="_blank">Examples</a></li><li><a href="http://gallery.echartsjs.com" target="_blank">Gallery</a></li></ul></li><li id="nav-doc" class="dropdown"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Docs<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="./option.html">Chart Configuration</a></li><li><a href="./api.html">API</a></li><li><a href="./changelog.html">Changelog</a></li></ul></li><li id="nav-contribute"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Contribute<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://github.com/apache/incubator-echarts" target="_blank">Source Code</a></li><li><a href="https://github.com/apache/incubator-echarts/issues" target="_blank">Issue Tracking</a></li><li><a href="./coding-standard.html">Coding Standards</a></li></ul></li><li id="nav-about"><a href="#" data-toggle="dropdown" class="dropdown-toggle">About<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="./license.html">License</a></li><li><a href="./maillist.html">Mailling List</a></li><li><a href="./committers.html">Committers</a></li><li><a href="./dependencies.html">Dependencies</a></li><li><a href="./faq.html">FAQ</a></li></ul></li></ul><ul class="nav navbar-nav navbar-right"><li id="nav-github"><a href="https://github.com/ecomfe/echarts" target="_blank"><img src="./images/github.png" width="18"></a></li><li id="nav-chinese"><a href="http://www.echartsjs.com/index.html">中文</a></li></ul></div></div></nav><div class="page-info"><h1>Download</h1></div><div id="download-main" class="page-content container"><div class="d-section-version d-section"><h2 id="tag-name"></h2><h3></h3><span class="warn">Tip: the version &quot;Source&quot;, which includes common warnings and hints, is recommanded for dev.</span><div class="list-wrap"></div><ul id="download-list" class="row"></ul><p>Select components to pack.</p><a href="builder.html" class="btn btn-thirdary more-btn">Online Builder</a></div><div style="border-bottom:0" class="d-section-version d-section"><h2>Download Source</h2><p>ECharts is an Apache project under incubation. Download source code from Apache release.</p><a href="http://www.apache.org/dist/incubator/echarts/" class="btn btn-thirdary more-btn">Download</a></div></div><footer><div class="container"><div class="row"><div class="col-md-9"><p>Apache ECharts is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p><p>Copyright © 2017-2018, The Apache Software Foundation Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><div id="footer-icon-panel" class="col-md-3"><img src="images/asf_logo.svg" class="footer-apache-logo"><div class="icon-panel"><a href="mailto:echarts@baidu.com?Body=%28Thanks%20for%20using%20ECharts.%20Email%20us%20if%20you%20have%20non-technical%20problems%20using%20ECharts.%20For%20technical%20support%2C%20please%20go%20to%20https%3A//github.com/ecomfe/echarts/issues%20.%29" class="footer-icon"><img src="images/icon-email.png"></a><a href="https://twitter.com/EChartsJs" class="footer-icon"><img src="images/icon-twitter.png"></a><a href="http://weibo.com/u/5160877841" class="footer-icon"><img src="images/icon-weibo.png"></a><a href="https://github.com/ecomfe/echarts" class="footer-icon"><img src="images/icon-github.png"></a></div></div></div></div></footer></div><script type="text/javascript" src="./vendors/bootstrap/js/bootstrap.min.js"></script><script type="text/javascript" src="./js/common.js"></script><script type="text/javascript">document.getElementById('nav-downloads').className = 'active';

var list = [
        {
            label: 'Common',
            fileName: 'echarts.common.min.js',
            descHTML0: 'Includes common charts and components.',
            descHTML1: 'line bar pie scatter legend tooltip toolbox markLine markPoint markArea dataZoom'
        },
        {
            label: 'Simple',
            fileName: 'echarts.simple.min.js',
            descHTML0: 'Only includes basic charts.',
            descHTML1: 'line bar pie'
        },
        {
            label: 'Full',
            fileName: 'echarts.min.js',
            descHTML0: 'Includes all charts and components.',
            descHTML1: ''
        },
        {
            label: 'Source',
            fileName: 'echarts.js',
            descHTML0: 'Source code of all charts and components, including warnings and hints for dev.',
            descHTML1: ''
        }
    ];

    function encodeHTML(source) {
        return source == null
            ? ''
            : String(source)
                .replace(/&/g, '&amp;')
                .replace(/</g, '&lt;')
                .replace(/>/g, '&gt;')
                .replace(/"/g, '&quot;')
                .replace(/'/g, '&#39;');
    }

    $.getJSON("https://api.github.com/repos/ecomfe/echarts/releases/latest").done(function (param) {
        var tagName = param['tag_name'];

        $('#tag-name').html('Download ' + encodeHTML(tagName));

        var htmls = [];
        for (var i = 0; i < list.length; i++) {
            var item = list[i];
            var url = 'https://raw.githubusercontent.com/ecomfe/echarts/' + tagName + '/dist/' + item.fileName;

            htmls.push(
                '<li class="col-md-3 col-md-6"><a target="_blank" href="' + encodeHTML(url) + '" download="' + encodeHTML(item.fileName) + '" class="download-echarts"><div class="circle-wrap">' + encodeHTML(item.label) + '</div></a><div class="text">' + item.descHTML0 + '<br><span>' + item.descHTML1 + '</span></div></li>'
            );
        }
        $('#download-list')[0].innerHTML = htmls.join('');
    });</script><script type="text/javascript">var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?4bad1df23f079e0d12bdbef5e65b072f";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();</script></html>