Commercial
The ORTEX mark
What the mark is, when it shows, and how a white-label license removes it.
Read this page as Markdown, or take the whole documentation in one file.
What the Mark Is
Every chart drawn by ORTEX Charts carries a small mark on the first pane: the caption "Charts provided by" above the ORTEX wordmark, in the theme text color at 60 percent opacity, twelve pixels high, in the bottom-left corner by default. Clicking it opens ortexcharts.com in a new tab, which is the page that answers the question somebody asks by clicking a mark on a chart.
The mark is the visible half of the commercial enforcement in the code. The other half is the gate: since 1.1.0 a chart with no valid key draws only on a development host, and paints a licence notice instead of its content anywhere else. See license keys.
@ortex-charts/coreWhat the Mark Is Not
Stating this plainly matters more than describing the mark, because the assumption in this category is usually the opposite.
- The mark is not the enforcement; the gate is. Since 1.1.0 a chart with no valid key
draws only on a development host. On any other host it paints a licence notice instead
of its content, in every state but
valid: missing key, invalid key, expired key, wrong domain, revoked key. Keys carry a 14-day grace period past their term so a late renewal does not close the gate. See license keys. - A licensed chart never nags. With a key in place there is no overlay, no modal, no banner, no watermark across the plot, and no repeated warning. Nothing is written to the user's screen beyond the mark itself, and a paid key removes that too.
- The mark does not say "Unlicensed". On localhost, where an unlicensed chart still draws, the mark reads "Charts provided by ORTEX" and nothing more; a visitor cannot tell from the mark whether the page has paid. Off localhost the question does not arise, because the chart is not drawn.
- The chart never phones home. No request is made to any ORTEX host. The key is verified locally, by the library's own Ed25519 code. See Questions we are asked for the complete telemetry answer.
When the Mark Shows
There are three states, and only one of them removes the mark.
| State | Mark | Console |
|---|---|---|
| No key, or an invalid, expired or wrong-domain key, on localhost | Shown, with the caption | None, unless the chart asked to hide the mark: then one warning naming the reason |
| The same, on any other host | The chart is not drawn: a licence notice naming the reason takes its place | None |
A valid key without the whitelabel feature |
Shown, exactly the same mark | One warning if you asked to hide it |
A valid key with the whitelabel feature |
Hidden when branding.visible is false |
Nothing |
A valid key with the brand feature |
Hidden, or replaced with your own logo, text, caption and link | Nothing |
Every paid plan, Pro and Business, grants whitelabel: the mark may be hidden. OEM
agreements grant *, which includes brand: the mark may be yours. There is no free plan;
without a key the mark shows on localhost and the chart does not draw anywhere else.
So the mark is a ladder with two rungs. Paid shows none, and only OEM shows the customer's own. See /pricing for the plans and the numbers.
Removing It
import { setLicenseKey, createFinancialChart } from "@ortex-charts/financial";
await setLicenseKey(WHITELABEL_KEY);
const chart = createFinancialChart(el, {
branding: { visible: false },
data: bars,
});
branding.visible = false is a request, not a command. It is honored only when the current
license grants whitelabel. Setting it without that feature does exactly one thing beyond
being ignored: it writes one line to the console.
[ORTEX Charts] This license does not include white-labeling; the ORTEX mark stays on.
With no key at all, the message is different and names the underlying problem:
[ORTEX Charts] No license key set. The ORTEX mark stays on until a valid key is set with setLicenseKey().
Check what you have before assuming a key is the problem:
import { hasFeature, licenseStatus } from "@ortex-charts/financial";
licenseStatus(); // { state, payload, message, verified }
hasFeature("whitelabel"); // true only on a valid license that grants it
The signature is checked before setLicenseKey returns, by the library's own Ed25519
implementation, so a feature is granted from the moment the key is valid and never on an
unchecked payload.
Replacing It With Your Own
A brand license, which is an OEM agreement, may keep a mark and make it yours, which is
what a product shipped under your name usually wants rather than a bare corner. A Pro or
Business key hides the mark; it does not replace it.
createFinancialChart(el, {
branding: {
visible: true,
logo: "https://cdn.example.com/brand/mark.svg", // a URL, a data URI, or "text"
caption: "", // empty removes the caption line
position: "bottomRight",
height: 14,
opacity: 0.5,
href: "https://example.com",
},
});
Setting logo: "text" draws the text option in a bold face at height pixels instead of
an image, which avoids an extra request for a wordmark that is just letters.
Keeping the ORTEX mark on a licensed chart is also fine, and some customers do; the option simply stays at its default.
Every Branding Option
| Option | Type | Default | What it does |
|---|---|---|---|
visible |
boolean |
true |
Show the mark. Setting it to false requires the whitelabel feature. |
position |
"bottomLeft" | "bottomRight" | "topLeft" | "topRight" |
"bottomLeft" |
Corner of the first pane. |
height |
number |
12 |
Logo height in CSS pixels. |
opacity |
number |
0.6 |
Opacity of the whole mark. |
logo |
"ortex" | "text" | string |
"ortex" |
The ORTEX wordmark, the text option, or an image URL or data URI. |
text |
string |
"ORTEX" |
Drawn when logo is "text". |
caption |
string |
"Charts provided by" |
Small line above the mark; an empty string removes it. |
href |
string |
"https://ortexcharts.com" |
Opened in a new tab when the mark is clicked. |
position, height and opacity are honored regardless of the license, because they only
move the mark about. logo, text, caption and href are honored only when the key carries
the brand feature; without it the mark, when shown, is the ORTEX wordmark with its caption
and its link whatever the options say, so replacing the mark with yours is an OEM agreement
rather than an option. whitelabel alone (every paid plan) honors visible: false and nothing
else. As of 1.0.26; between 0.6.1 and 1.0.25, whitelabel covered both.
BRANDING_DEFAULTS is exported if you want to start from the defaults and change one field.
Why It Works This Way
Anything that runs in a browser ships to the browser. Minified JavaScript is source code with the comments removed, and a determined person can read it, copy it and patch out a check in an afternoon. That is true of every library in this category and every one of them is a functioning business, so the interesting question is not how to prevent copying but what makes the legitimate path the easier one.
ORTEX's answer, in order:
- A contract with terms a company can be held to. The customers who can afford a chart library do not risk a breach-of-contract suit to save a subscription.
- Updates and support, which stop when the subscription does.
- Distribution through a per-customer channel — a hosted kit locked to your domains, or a registry token — rather than through public npm.
- A signed, domain-bound key with one visible consequence, so the unlicensed state is obvious in a screenshot but harmless to the end user.
- No obfuscation, because it costs performance and debuggability and buys about a day of a copier's time.
Removing the check by editing the bundle is possible. It is also a deliberate act, named as a breach in the agreement, with the evidence sitting in the customer's own deployment, and the key id in a leaked build identifies which customer it came from. That is the honest description of the protection, and it is the same one every vendor in the category could give.
Related
- License keys — issuing, domains, expiry and the states.
- Questions we are asked — telemetry, expiry, support.
- /pricing — which plan grants
whitelabel, and which grantsbrand.