惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
F
Fortinet All Blogs
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
罗磊的独立博客
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
U
Unit 42
N
Netflix TechBlog - Medium
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
G
Google Developers Blog
H
Help Net Security

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I open-sourced the financial charting library we use in p...
Tom · 2026-06-19 · via DEV Community
Cover image for I open-sourced the financial charting library we use in production

Tom

If you’ve ever tried to build a trading dashboard, a crypto portfolio tracker, or any financial app, you probably ran into the "charting problem" pretty quickly.

The standard industry approach goes something like this:

Embed a heavy from a 3rd party provider.<br> Realize it doesn&#39;t quite match your app&#39;s UI/theme.<br> Struggle with limited postMessage APIs to push real-time data.<br> Watch the UI lag when you try to render multiple charts on the same page.</p> <p>I got tired of fighting with iframe embeds and DOM-based SVG charts that couldn&#39;t handle thousands of real-time ticks. I needed something native, fast, and entirely under my control.</p> <p>So, I built one. And today, I&#39;m fully open-sourcing the core engine.</p> <p><strong>Meet Exeria Charts</strong></p> <p>Exeria Charts is a source-available, high-performance financial charting library designed for self-hosted web applications.</p> <p>Instead of embedding external widgets, Exeria renders directly inside your application using a highly optimized Canvas architecture.</p> <p>Here’s a quick look at what it can do: <a href="https://exeria.dev">https://exeria.dev</a></p> <p><strong>The Tech Constraints (Why build another charting lib?)</strong><br> Building a financial chart isn&#39;t just about drawing boxes and lines. It’s about performance under pressure.</p> <p>When designing the architecture, we had a few strict requirements:</p> <ul> <li>Zero iframes: It had to be a native JavaScript/React module that lives in the main DOM tree, styled perfectly to match the host application.</li> <li>High-frequency updates: Crypto and forex markets move fast. The library needed to handle sub-millisecond tick updates without dropping frames or blocking the main UI thread.</li> <li>Unified runtime: I didn&#39;t want a separate library for line charts, another for candlesticks, and another for volume histograms. We needed one engine that could switch views instantly.</li> </ul> <p><strong>How to use it</strong><br> We designed the API to be as straightforward as possible. Here is what a vanilla JS implementation looks like:<br> </p> <div class="highlight"><pre class="highlight javascript"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">createChart</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">"</span><span class="s2">@efixdata/exeria-chart</span><span class="dl">"</span><span class="p">;</span> <span class="c1">// 1. Grab your container</span> <span class="kd">const</span> <span class="nx">container</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">"</span><span class="s2">chart-root</span><span class="dl">"</span><span class="p">);</span> <span class="c1">// 2. Initialize the chart</span> <span class="kd">const</span> <span class="nx">chart</span> <span class="o">=</span> <span class="nf">createChart</span><span class="p">({</span> <span class="nx">container</span> <span class="p">});</span> <span class="c1">// 3. Feed it some data</span> <span class="kd">const</span> <span class="nx">candles</span> <span class="o">=</span> <span class="p">[</span> <span class="p">{</span> <span class="na">stamp</span><span class="p">:</span> <span class="mi">1715472000000</span><span class="p">,</span> <span class="na">o</span><span class="p">:</span> <span class="mf">101.2</span><span class="p">,</span> <span class="na">h</span><span class="p">:</span> <span class="mf">103.1</span><span class="p">,</span> <span class="na">l</span><span class="p">:</span> <span class="mf">100.9</span><span class="p">,</span> <span class="na">c</span><span class="p">:</span> <span class="mf">102.8</span><span class="p">,</span> <span class="na">v</span><span class="p">:</span> <span class="mi">3200</span> <span class="p">},</span> <span class="p">{</span> <span class="na">stamp</span><span class="p">:</span> <span class="mi">1715475600000</span><span class="p">,</span> <span class="na">o</span><span class="p">:</span> <span class="mf">102.8</span><span class="p">,</span> <span class="na">h</span><span class="p">:</span> <span class="mf">104.2</span><span class="p">,</span> <span class="na">l</span><span class="p">:</span> <span class="mf">102.1</span><span class="p">,</span> <span class="na">c</span><span class="p">:</span> <span class="mf">103.9</span><span class="p">,</span> <span class="na">v</span><span class="p">:</span> <span class="mi">2950</span> <span class="p">},</span> <span class="p">];</span> <span class="k">await</span> <span class="nx">chart</span><span class="p">.</span><span class="nf">setMainSeriesData</span><span class="p">(</span><span class="nx">candles</span><span class="p">,</span> <span class="p">{</span> <span class="na">symbol</span><span class="p">:</span> <span class="dl">"</span><span class="s2">1h</span><span class="dl">"</span><span class="p">,</span> <span class="na">milis</span><span class="p">:</span> <span class="mi">3600000</span> <span class="p">});</span> <span class="nx">chart</span><span class="p">.</span><span class="nf">init</span><span class="p">();</span> </code></pre></div> <p></p> <p>(If you use React, we also built an open-source wrapper @efixdata/exeria-chart-ui-react that gives you out-of-the-box toolbars and menus).</p> <p><strong>Open Sourcing the Core</strong><br> The core charting engine is available on GitHub under the AGPL-3.0 license.</p> <p>We&#39;ve also open-sourced (MIT) a bunch of data connectors so you can plug straight into Binance, Kraken, Coinbase, etc., without writing websocket boilerplate.</p> <p>I’d love to get feedback from the Dev.to community.</p> <p>If you are building fintech apps, crypto trackers, or just like messing around with Canvas performance:</p> <p>What charting libraries are you currently using?<br> What is the biggest pain point you have with displaying real-time data?<br> Check out the Live Playground or drop a star on the Repo if you find it useful. Happy to answer any questions about Canvas rendering or handling high-frequency financial data in JS!</p>