Skip to content

Commercial

Release notes

Every release, newest first, with the one upgrade note there has been so far.

Read this page as Markdown, or take the whole documentation in one file.

How Versions Work

Every release of ORTEX Charts is listed below, newest first. Versions are published together: all ten packages share one number, so @ortex-charts/ui@1.0.24 always works with @ortex-charts/core@1.0.24 and you never have to reason about a matrix.

The version comes from a signed tag in the library repository, which is also what triggers the publish, so the registry and the history cannot disagree.

Anything that would change the behavior of code you have already written is called out under Upgrading. There have been six such changes so far, in 0.3.2, 1.0.16, 1.0.22, 1.0.26, 1.1.0 and 1.2.0.

1.3.0 — 10 September 2026

The translators finish the chart. A real port of a Highcharts Stock page and a TradingView Charting Library widget through @ortex-charts/migrate found what they left behind, and the new pages moving from Highcharts and moving from TradingView walk both ports end to end. fromHighcharts now turns y-axes placed with top and height into panes, the column on the second axis into the volume, sma, ema, wma, rsi, atr, bb, macd and stochastic series into indicators with their periods, and flags into markers; a plot line is drawn once per axis rather than once per series, and a series with no counterpart is reported without an empty series being left behind. tradingViewWidget returns the shell with ignored: every widget key, feature flag and override it did not read. It maps locale, header_compare, hide_left_toolbar_by_default and the candle colour and background overrides, and the wrapped datafeed answers supportedResolutions(), which tradingViewWidgetAsync passes to the toolbar so a daily-only feed does not offer minute buttons. The input types accept TradingView's ChartingLibraryWidgetOptions and IBasicDataFeed and a typed Highcharts.Options without a cast. drawings.add takes a partial style, as the drawing tools page always said.

Upgrading. translateHighcharts no longer emits a series for a type it reports as unsupported, so a port that counted on those placeholder series will find fewer entries in series; the same information is in indicators, markers and unsupported.

1.2.0 — 10 September 2026

The licence check is the library's own. The Ed25519 signature on a key is now verified by code inside @ortex-charts/core, written from RFC 8032 and FIPS 180-4, rather than by the browser's WebCrypto. Nothing a page can replace, remove or stall takes part in the check, it runs on every platform, and it is synchronous: a key is valid or it is not before setLicenseKey returns, and the pending state no longer occurs. There is no longer any browser on which a payload is accepted unverified.

The gate decides from the payload. On every frame the gate re-checks expiry against the clock and the domains against the hostname of the moment, and requires the signature to have verified. A key that expires while a page is open closes the gate at that second. The list of trusted signing keys is frozen, verification reads a private copy of it, and the series renderer asks a second, independent check before it draws.

Upgrading. setLicenseKey no longer accepts publicKey, hostname or now. They were test conveniences, and the first of them let a page trust a signing key of its own. A test that used them installs a real key instead and reads licenseStatus() back; a test that needs an unlicensed chart runs on localhost, where the gate never closes. Nothing else changes for a chart with a valid key.

1.1.0 — 10 September 2026

The licence is a gate. On any host other than localhost and its aliases, a chart with no valid or pending key paints a notice on its own background, "A licence key is required to display this chart", with the reason the check gave and the address of the pricing page, and nothing of its content: no series, axes, legends, crosshair or tooltips. The moment a key verifies, every chart on the page repaints itself in full. On a development host an unlicensed chart draws as before, with the ORTEX mark on and one console warning, so evaluation, unit tests and continuous integration need no key. licenseGate() answers { blocked, reason } for the current state, and isDevelopmentHost() is the rule it uses. Treemaps, heatmaps and the other @ortex-charts/viz components paint the same notice; sparklines in @ortex-charts/lite are not gated. See license keys.

Upgrading. Before 1.1.0 the chart drew in every licence state and the mark was the only consequence. If a deployment relied on that, on a host its key does not cover, a preview host for instance, it now shows the notice; add the host to the key's domains or accept the notice on previews. A key that has expired past its 14-day grace period now stops the chart rather than restoring the mark. Nothing changes for a chart with a valid key.

The free Community plan is withdrawn. No new Community keys are issued. Keys already issued keep verifying until they expire, under the terms they were issued with.

1.0.30 — 10 September 2026

No report until a stored layout is fully applied. Applying a stored layout whose toolbar extras were folded reported the layout to the host part-way through, before the stored overlays had been switched on, so that first report had no overlays in it. A host that stores what onLayoutChange hands it and passes it back could then apply that empty layout, and the chart came up without its lines. The shell now reports once, when the layout is applied, and <ChartShell> ignores every layout it has itself reported, not only the newest. No API change.

1.0.29 — 10 September 2026

A removed shell stays silent. A host that keys <ChartShell> on the symbol tears a shell down on every change of instrument, often while the overlays of its first layout are still loading. Until now that shell carried on: the loads finished on a chart that no longer existed, and the report that closed them reached onLayoutChange with an empty overlay list, because the shell had already let its overlays go. A host that stores what it is told then handed that layout to the shell that replaced it, and the next chart arrived without its lines. After remove(), a shell now reports nothing, applies nothing, and an overlay that finishes loading late is disposed rather than attached; <ChartShell> stops forwarding callbacks once it is unmounted. No API change.

1.0.28 — 10 September 2026

A stored layout is no longer applied back into the chart. Keeping a chart's arrangement means storing what onLayoutChange reports and handing it back as the layout on the next visit, which is what the shell guide recommends. In React, a host that handed back the layout it had just been given made the chart apply it, which made the chart report it, which is a loop: overlays were removed and re-added several times a second, and every overlay that fetches fetched again each time. <ChartShell> now ignores a layout it reported itself; the chart is already in it.

An overlay is on from the moment you switch it on. getLayout() counted an overlay as on only once its add had resolved, so a layout read while the chart was still loading came back without it: a chart saved during loading lost its lines, and applying such a layout switched them off. The data menu's check marks follow the same rule.

1.0.27 — 10 September 2026

A legend menu stays anchored. The button that opens a series' legend menu was replaced whenever the legend was rebuilt, so a host popup anchored to it was left pointing at an element no longer in the document, and drifted or vanished on the next update. The same button now survives a rebuild.

1.0.26 — 9 September 2026

The mark is a ladder. A key with whitelabel, which every paid plan now carries, may hide the ORTEX mark. A key with the new brand feature, which OEM agreements carry, may replace it with your own logo, text, caption and link. Between 0.6.1 and 1.0.25 whitelabel did both; a Pro or Business key that sets a custom logo now draws no mark rather than yours. See the ORTEX mark.

Upgrading. If you hold a White-label key from before 9 September 2026, nothing changes: it grants *, which includes brand. The plans changed the same day, to one price per product with any number of developers; see pricing.

1.0.25 — 9 September 2026

What a full read of the engine turned up. A keyboard event reached every drawing with the hovered pane's scale rather than its own, which mattered to a drawing on a second pane. A sparkline kept the backing store it was born with when the window moved to a screen with another device pixel ratio, and drew clipped until something resized it. Both fixed.

Faster on every tick. The timeline was copied in full on every live bar, undoing the amortised append underneath it; it is now kept by reference. withAlpha no longer runs a regex per drawing per frame, the legend no longer rewrites its container styles on frames that change nothing, and bar replay no longer builds a date formatter per step.

1.0.24 — 8 September 2026

Asking for a control is not the same as having room for it. Unfolding the view and export controls on a chart too narrow to hold them drew the buttons over each other. A reader's choice now outranks the width: the bar still drops labels, folds the periods and moves resolutions into the chevron, but it will not fold the tail away again behind them. When every concession is spent it takes a second row, which is worse than one row and much better than overlapping, and the fold button stays visible there as the way back.

1.0.23 — 8 September 2026

The toolbar keeps to one row. Rather than wrapping, it gives things up in order of how little they are missed: the words on buttons that read as icons, then the periods into their own button, then the view and export controls behind More, then the middle resolutions into a chevron that keeps the shortest, the longest and the selected one. Each step applies only if the one before it was not enough, and a chart that grows takes it all back. toolbarFit: "wrap" keeps the old behaviour. See one row, not two.

1.0.22 — 8 September 2026

A toolbar one row deep. extrasCollapsed folds the scale modes, fit, the legend and drawing-rail toggles, realtime, replay, download, screenshot, theme and full screen behind a single More button, so a toolbar that used to wrap onto a second row gives that height back to the chart. Opening it shows the same buttons as a palette, and an item puts them back for good. See one row, not two.

Upgrading. If your host stores chart layouts, note that getLayout() now records drawingRailCollapsed and extrasCollapsed whether they are true or false. Absent has to keep meaning "this reader never said": stored only when true, a reader who opened the rail looked exactly like one who had never touched it, and a host turning either option on would have had it overridden for everybody with a saved layout. Existing layouts are unaffected and take the host's default until the reader changes it.

1.0.21 — 7 September 2026

The readout is a box. It carries the hovered bar's date, formatted as the time axis labels it, then a row per series with that series' colour beside it. A newline in the template starts a quieter line underneath, which is where a change belongs, and a long line now wraps inside the box rather than out of it.

avg(field, n) in a template. The mean of a window of bars, so a chart can say "today against the week behind it". A window that runs off the start of the data prints an em dash rather than an average of whatever is there. A series can also carry its own tooltipTemplate, and the volume bar uses one by default.

Pie labels go where they fit. Inside the slice when the text fits there, in a colour chosen against the fill; otherwise outside on a leader line, wrapped, stacked down each side and limited to what the height can hold. Slices take a second hairline just darker than their fill, which is the edge a pale slice on a white card did not have. See where the labels go.

A treemap that is not grey mud. The automatic colour range now reaches the ninetieth percentile of the moves rather than the largest of them, so one stock down forty percent no longer leaves every ordinary move a shade of neutral. headerDepth stops the bands of small text above deeply nested groups, and a leaf can carry a logo.

1.0.17 to 1.0.20 — 7 September 2026

A value beside the cursor. A chart can put a readout next to the pointer for the line the pointer is on, and what it says is a template you write: the series name, its value, the same value some bars back, and a comparison between two of them. Three modes decide how much shows — nothing, the hovered line, or every line on the pane.

Periods above the chart. The toolbar carries 1D 1W 1M 1Q 1Y 5Y 10Y by default, anchored to the last bar rather than to the clock, each one able to change the resolution with the span. On a narrow chart they fold into a single button rather than wrapping, and rangeDisplay decides that explicitly when you would rather it did not depend on the width. See the toolbar.

The drawing rail can start out of the way. drawingRailCollapsed folds the tools to a thumb on the edge, which is what a chart in a dense page usually wants; the reader opens it when they need it, and the layout remembers.

A toolbar button reflects what it does. shell.setAction(id, patch) updates a button after the toolbar is built, so a host toggle can light up. Before this, a button's active flag was read once and a React host that rebuilt its options changed nothing on screen.

Reloading keeps your place. binding.reload() no longer re-resolves the symbol or jumps to the latest bar: it restores the view by bar index, or by time when the bar count changed. Switching a data option, such as adjusted prices, no longer throws the reader back to the right edge.

A scale change redraws immediately. Switching to logarithmic or percent used to wait for the next pan or zoom before the chart showed it.

The mark links to this site. Clicking "Charts provided by ORTEX" opens ortexcharts.com, which answers the question a reader is asking by clicking it. A white-label license still sets its own link.

1.0.11 to 1.0.16 — 6 September 2026

A chart cannot hold its page open. The chart root is capped at the width of its host and the shell contains its own inline size, so a toolbar's natural width can no longer widen the grid column it sits in and push a page sideways. The chart also checks its container on every frame, and re-measures when the tab becomes visible again, which is what makes a window resize or a returning background tab redraw at the right size.

Loading history in windows stops asking for what is not there. A feed has nothing for today until it has something, and the loader used to ask again on every frame. An empty answer at an edge is now remembered: minGap ignores a gap too narrow to be worth a request, and retryEmptyAfter leaves that edge alone for five minutes.

Reading a chart over its own shading. withAlpha scales a color's existing transparency instead of replacing it, an area series takes lineWidth: 0 for shading with no outline, and labels along the top of an XY chart stack onto free lines rather than printing over each other. Event lanes take a faint tint rather than a filled band, and watermark.logoScale sets the mark's height as a fraction of the pane.

Upgrading. If you passed a color that already carried an alpha and asked for a fill opacity of 1 to get it back at full strength, that fill now stays translucent. Pass the opaque color and let fillOpacity do the fading, which is what the option was for.

1.0.0 to 1.0.9 — 5 September 2026

Chunked history for series you fill yourself. attachWindowedData gives any series the visible span plus a margin and fetches more as the reader scrolls, with maxSpan, earliest, latest and a debounce. In the shell it is ctx.windowed(series, fetch), with defaults set once in overlayLoading.

A legend the reader controls. legend.collapsed and legend.collapsible show the first row only and offer a toggle, with setLegendCollapsed, isLegendCollapsed and onLegendCollapse behind them, a "legend" toolbar item, and legendCollapsed in the layout. legend.symbol prints the exchange and ticker before the first series title, beside the logo.

Colors chosen from the chart. Every legend menu carries swatches; a candlestick series gets an up and a down row. The choice is keyed by series title, travels in the layout as colors, and a second series of the same title takes a contrasting hue, which contrastingColor also exports for hosts that want the same rule elsewhere.

Your mark behind the chart. watermark.logo draws the ORTEX wordmark or your own image, sized with logoHeight or logoScale and faded with opacity.

@ortex-charts/migrate. A new package that wraps a TradingView datafeed or widget, and translates a Highcharts or Highcharts Stock options object, returning a working chart and a list of what did not carry over.

More in viz. An XY chart over a numeric axis with reference lines and shaded bands, a pie or donut, and a Sankey diagram, all with React bindings.

Transparent backgrounds. Theme.surface names the opaque color under a chart whose background is transparent, so blends, glows and screenshots have something to composite against. surfaceOf(theme) returns it.

0.7.0 — 5 September 2026

129 indicators, and a menu you curate. The extras package grows to 78 studies, which with the built-in 51 passes the roughly 110 in TradingView Advanced Charts: further adaptive averages, three pivot systems, VWAP bands and anchored VWAP, regression statistics, the Bill Williams family, squeeze momentum, Laguerre RSI, and volatility estimators among them. registerExtraIndicators({ only, except }) registers a subset, and the shell's indicators option takes a curated menu: include, exclude, featured, headed groups and labels, read from the registry when the menu opens. See Indicators.

0.6.1 — 5 September 2026

The mark is ORTEX's without a white-label key, whatever the branding options say: logo, text, caption and href fall back to their defaults; position, height and opacity stay yours. See The ORTEX mark.

0.6.0 — 5 September 2026

@ortex-charts/indicators-extra. 38 more studies in a package of their own, so a chart only carries what its users open: 13 overlays and 25 in their own pane, 5.7 KB gzip when imported and nothing otherwise. One registerExtraIndicators() call and each appears in the menu, the legend and the saved layout like a built-in. See Indicators.

Licence 1.2. Use of the library ends with the term on every plan; the perpetual fallback is withdrawn. Every plan except OEM covers one domain, plus localhost. 0.5.2 carried the licence 1.1 text and README corrections only.

0.5.1 — 5 September 2026

No third-party code of any kind. 0.5.0 removed the last dependency but three files were still ports of D3 code under the ISC license. They are now independent implementations written from the published algorithms — Heckbert's nice numbers for axis ticks, Steffen's monotone interpolation and the uniform cubic B-spline for the curves, and Bruls, Huizing and van Wijk's squarified treemap — held to exactly the output the ports produced. Nothing in any package is copied, ported or adapted from another library.

They are also faster. Filling an area through 100,000 points takes a quarter to a third less time across all four curves, the monotone line a fifth less, and the treemap layout no longer allocates per row.

0.5.0 — 5 September 2026

No third-party runtime dependencies. Every package now installs with an empty dependency tree. The D3 modules the library was built on were replaced by local ones: the tick algorithm and binary search that came from d3-array, the four curve interpolators from d3-shape, the UTC intervals from d3-time, the squarified treemap from d3-hierarchy and the color ramp from d3-scale.

Each replacement was checked against the module it replaced while both were installed, and D3's own output is kept in the repository as a golden fixture, so the parity is asserted on every test run. The browser snapshot suite moved zero pixels.

Build 0.4.0 0.5.0
Line chart 31.3 KB 29.5 KB
Basic, the free build 31.8 KB 30.0 KB
Candles and volume 58.2 KB 55.8 KB
Full shell 85.7 KB 83.2 KB
Treemap and heatmap 18.5 KB 10.0 KB

Drawing got faster as well. The D3 line and area generators wanted an array to iterate and an accessor function per column, so every redraw of every line built an index array and made two calls per point; the local curves read the typed arrays directly. Tracing 100,000 points takes 0.83 ms rather than 1.35 ms for a line, and 1.94 ms rather than 2.80 ms for an area.

0.4.0 — 5 September 2026

Extended-hours shading and day breaks. An intraday chart can now shade the columns outside regular trading hours and draw a line where each trading day begins, both off by default and both taking the exchange's day rather than the reader's. See Time, sessions and resolutions.

Number and date formatting moved onto the platform's own Intl, which removed another dependency and made locale-aware formatting the default rather than an option.

0.3.2 — 4 September 2026

The price transforms register on demand. Renko, Kagi, Point and Figure and Line Break used to register themselves when @ortex-charts/core was imported, which meant every build carried all four renderers whether or not anything drew them. They now register when @ortex-charts/financial is imported, which takes about 4 KB gzip off any build that does not use them, and keeps four paid renderers out of the free build.

Upgrading. If you import only @ortex-charts/core and call addSeries("renko"), call registerPriceTransforms() first:

import { registerPriceTransforms } from "@ortex-charts/core";

registerPriceTransforms();

Nothing else changes. @ortex-charts/financial, @ortex-charts/ui and @ortex-charts/react do it for you, which covers almost every application.

0.3.1 — 4 September 2026

Publishes @ortex-charts/basic, which 0.3.0 built and did not send to the registry.

0.3.0 — 4 September 2026

@ortex-charts/basic, the free build. A candlestick chart with a volume pane, a legend and a crosshair, with no license key and a larger ORTEX mark. See the ORTEX mark.

Color-blind safe themes. A dark and a light theme built on the Okabe-Ito palette, where up and down are told apart by hue and luminance rather than by red against green, plus a toolbar switch that turns them on. See Colors, fonts and formatting.

License key revocation and signing-key rotation. Keys carry the identifier of the key that signed them, the runtime holds a revocation list, and a signing key can be retired without invalidating every key ever issued. See License keys.

0.2.0 — 4 September 2026

51 built-in indicators and 32 drawing tools, up from 22 and nine, and the four price transforms: Renko, Kagi, Point and Figure and Line Break. See Indicators and Drawing tools.

0.1.0

The founding release: the engine, the financial chart, the shell, the sparkline build, the general-purpose charts and the React components.