<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://rancero.com/blog</id>
    <title>Rancero Blog</title>
    <updated>2026-08-06T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://rancero.com/blog"/>
    <subtitle>Rancero Blog</subtitle>
    <icon>https://rancero.com/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Vizly vs PyECharts: A Thorough Comparison]]></title>
        <id>https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts</id>
        <link href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you ship Apache ECharts from Python and you care where your static assets come from, this post is for you.]]></summary>
        <content type="html"><![CDATA[<p>If you ship Apache ECharts from Python and you care where your static assets come from, this post is for you.</p>
<p>We built <strong>vizly</strong>, a high-performance, production-ready Python visualization library over Apache ECharts. It is the culmination of a few months of consistent building. This post walks through how vizly compares to PyECharts, the most popular Python ECharts wrapper, and why we think vizly is the better default for teams shipping charts to production.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-asset-problem-nobody-talks-about">The asset problem nobody talks about<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#the-asset-problem-nobody-talks-about" class="hash-link" aria-label="Direct link to The asset problem nobody talks about" title="Direct link to The asset problem nobody talks about" translate="no">​</a></h2>
<p>Popular alternatives like PyECharts default to China-primary CDNs for assets. That is a real problem for Western teams with security, compliance, and supply chain requirements. Every chart you render pulls JavaScript from a host you did not choose, and that host is out of your control.</p>
<p>Vizly delivers assets <strong>locally by default</strong>. Vendored ECharts ships inside the package and is inlined into your HTML. Optional CDN use is allowlisted only (jsDelivr and unpkg). There is no silent remote injection and no China-primary default.</p>
<table><thead><tr><th>Asset behavior</th><th>PyECharts</th><th>vizly</th></tr></thead><tbody><tr><td>Default asset mode</td><td>Remote CDN</td><td>Local, vendored</td></tr><tr><td>CDN hosts</td><td>Defaults to China-primary hosts</td><td>Allowlist only: jsDelivr, unpkg</td></tr><tr><td>Silent remote injection</td><td>Possible</td><td>Never</td></tr><tr><td>Pinned versions</td><td>No</td><td>Yes (ECharts 5.5.1 and plugins)</td></tr></tbody></table>
<p>For compliance-sensitive environments, this one difference can decide whether a charting library is usable at all.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="chart-coverage">Chart coverage<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#chart-coverage" class="hash-link" aria-label="Direct link to Chart coverage" title="Direct link to Chart coverage" translate="no">​</a></h2>
<p>Vizly registers <strong>40 chart types</strong> across cartesian, statistical, financial, geo, relational, hierarchical, 3D, and compose layouts. You get line, bar, area, scatter, pie, donut, boxplot, heatmap, candlestick, kline, radar, funnel, gauge, sankey, treemap, map, combo, waterfall, polar, parallel, sunburst, tree, graph, flowchart, wordcloud, geo, 3D variants, and multi-chart pages, tabs, and timelines.</p>
<p>PyECharts also exposes a large catalog, since both libraries sit on ECharts. The difference is not raw breadth. It is how much of that power you can reach without fighting the wrapper. PyECharts leans on a fluent <code>options</code> API with nested option builders. Vizly uses plain factories that infer the chart structure from your data, so <code>flowchart</code>, <code>sankey</code>, and <code>treemap</code> are one-liners, not 30-line option scaffolds.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="boilerplate-and-readability">Boilerplate and readability<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#boilerplate-and-readability" class="hash-link" aria-label="Direct link to Boilerplate and readability" title="Direct link to Boilerplate and readability" translate="no">​</a></h2>
<p>Here is a basic bar chart in PyECharts:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> pyecharts </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> options </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> opts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> pyecharts</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">charts </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> Bar</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bar </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Bar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_xaxis</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"Mon"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Tue"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Wed"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Thu"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Fri"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_yaxis</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"Sales"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">120</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">150</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">80</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">70</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">set_global_opts</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        title_opts</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">opts</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">TitleOpts</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Weekly Sales"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        xaxis_opts</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">opts</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">AxisOpts</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Day"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        yaxis_opts</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">opts</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">AxisOpts</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Amount"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bar</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"bar.html"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>The same chart in vizly:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> vizly </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> vz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">set_theme</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"corporate"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">chart </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">"day"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"Mon"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Tue"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Wed"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Thu"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Fri"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"sales"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">120</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">150</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">80</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">70</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    x</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"day"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"sales"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Weekly Sales"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">chart</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">to_html</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># or .render("bar.html")</span><br></span></code></pre></div></div>
<p>That is about 90 percent less boilerplate to ship the same chart. No <code>opts</code> imports, no chained builders, no global options. DataFrame in, HTML or JSON out.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="theming-without-a-theme-war">Theming without a theme war<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#theming-without-a-theme-war" class="hash-link" aria-label="Direct link to Theming without a theme war" title="Direct link to Theming without a theme war" translate="no">​</a></h2>
<p>PyECharts ships a handful of themes and requires you to juggle theme registration and global config to apply them.</p>
<p>Vizly includes built-in themes out of the box: corporate, dark, minimal, contrast, Grafana/CloudWatch/Kibana-inspired ops themes, and editor themes like Monokai, Tokyo Night, Dracula, Nord, Solarized, and One Dark. You can also register your own, load a theme from JSON, or pass a per-chart <code>theme=</code> override:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">set_theme</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"ops_grafana"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">line</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">metrics</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> x</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"timestamp"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"value"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">df</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> x</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"region"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"sales"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> theme</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"editor_tokyo_night"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="data-handling">Data handling<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#data-handling" class="hash-link" aria-label="Direct link to Data handling" title="Direct link to Data handling" translate="no">​</a></h2>
<p>PyECharts expects you to shape data into list pairs or series lists by hand.</p>
<p>Vizly accepts pandas DataFrames, <code>list[dict]</code>, columnar dicts, CSV/TSV/JSON/Excel files, and SQL directly. Loaders like <code>from_csv</code>, <code>from_sql</code>, and <code>from_excel</code> are in the base package, no extra install. SQL works through SQLAlchemy, so Postgres, MySQL, Oracle, SQL Server, SQLite, and anything else SQLAlchemy can reach all chart the same way:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> vizly </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> vz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> sqlalchemy </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> create_engine</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">table </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">from_csv</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"sales.csv"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bar</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">table</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> x</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"region"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"sales"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">engine </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> create_engine</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"postgresql+psycopg://..."</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">line</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vz</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">from_sql</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"SELECT day, value FROM metrics"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> bind</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">engine</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> x</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"day"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"value"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ops-ready-from-day-one">Ops-ready from day one<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#ops-ready-from-day-one" class="hash-link" aria-label="Direct link to Ops-ready from day one" title="Direct link to Ops-ready from day one" translate="no">​</a></h2>
<p>Vizly normalizes observability payloads you already have. Prometheus, CloudWatch, and Elasticsearch JSON go through <code>from_prometheus</code>, <code>from_cloudwatch</code>, and <code>from_elasticsearch</code> (alias <code>from_elk</code>), then straight into a chart. No live API calls, just normalization of what you already fetched.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-framework-embeds">Native framework embeds<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#native-framework-embeds" class="hash-link" aria-label="Direct link to Native framework embeds" title="Direct link to Native framework embeds" translate="no">​</a></h2>
<p>PyECharts renders a standalone HTML file and leaves integration to you. Vizly ships a shared embed contract with zero-boilerplate helpers for the stacks teams actually use:</p>
<ul>
<li class=""><strong>Streamlit</strong>: <code>st_vizly(chart)</code> and multi-chart <code>st_dashboard([...])</code></li>
<li class=""><strong>FastAPI</strong>: <code>html_response</code>, <code>json_response</code>, <code>dashboard_response</code></li>
<li class=""><strong>Flask</strong>: fragment helpers for Jinja templates</li>
<li class=""><strong>Django</strong>: <code>{% vizly_chart %}</code> and <code>{% vizly_assets %}</code> template tags</li>
<li class=""><strong>HTMX</strong>: fragment swapping without reloading ECharts</li>
<li class=""><strong>Jupyter</strong>: native <code>_repr_html_()</code> rendering</li>
</ul>
<p>Charts also support drilldowns and live updates. Click events return structured payloads (<code>filter_by_click</code>), and <code>set_data</code> / <code>live_update_script</code> refresh data without reloading ECharts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-agents-emit-vizly-code-faster">AI agents emit vizly code faster<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#ai-agents-emit-vizly-code-faster" class="hash-link" aria-label="Direct link to AI agents emit vizly code faster" title="Direct link to AI agents emit vizly code faster" translate="no">​</a></h2>
<p>One of our favorite wins: AI agents need roughly <strong>60 percent fewer tokens</strong> to emit charting code with vizly compared to PyECharts, and about <strong>90 percent less boilerplate</strong> to ship the same chart. Simpler APIs mean agents produce correct code on the first pass more often, which matters for teams wiring charts through AI-assisted workflows.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bottom-line">Bottom line<a href="https://rancero.com/blog/2026/08/06/vizly-vs-pyecharts#bottom-line" class="hash-link" aria-label="Direct link to Bottom line" title="Direct link to Bottom line" translate="no">​</a></h2>
<p>PyECharts is a fine library and it got many people into ECharts from Python. But it was built for a different era and a different asset model. If you ship charts to production, care about supply chain hygiene, value local assets, want SQL in the base package, or need native embeds without glue code, vizly is the stronger default.</p>
<p><strong>Try it now:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">pip install vizly</span><br></span></code></pre></div></div>
<ul>
<li class="">GitHub: <a href="https://github.com/kineticquant/vizly" target="_blank" rel="noopener noreferrer" class="">github.com/kineticquant/vizly</a></li>
<li class="">Docs: <a href="https://docs.rancero.com/docs/other/vizly/v1-0-1" target="_blank" rel="noopener noreferrer" class="">Vizly v1.0.1 documentation</a></li>
<li class="">Chart Gallery: <a href="https://docs.rancero.com/docs/other/vizly/examples" target="_blank" rel="noopener noreferrer" class="">Vizly Chart Gallery</a></li>
</ul>]]></content>
        <author>
            <name>Rancero Dev Team</name>
            <uri>https://rancero.com</uri>
        </author>
        <category label="vizly" term="vizly"/>
        <category label="pyecharts" term="pyecharts"/>
        <category label="comparison" term="comparison"/>
        <category label="vizly-vs-pyecharts" term="vizly-vs-pyecharts"/>
    </entry>
</feed>