Skip to content

Commercial

The ORTEX mark

What the mark is, when it shows, and how a white-label license removes it.

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 ortex.com in a new tab.

That is the entire commercial enforcement mechanism in the code. There is nothing else.

The ORTEX mark, on and off@ortex-charts/core
Loading the ortex mark, on and off
What the mark looks like without a license, and what a white-label key changes.

Open this example with its source

What the Mark Is Not

Stating this plainly matters more than describing the mark, because the assumption in this category is usually the opposite.

  • The chart never breaks. There is no state — missing key, invalid key, expired key, wrong domain — in which the library refuses to draw, degrades the data, throws, or disables a feature. A customer whose key expires on a Friday night has a working chart on Saturday morning.
  • The chart never nags. There is no overlay, no modal, no banner, no watermark across the plot, and no repeated warning. One console.warn is written once per page load, for the developer, and nothing is written to the user's screen beyond the mark itself.
  • The mark does not say "Unlicensed". A visitor to your site cannot tell from the chart whether you have paid. This was decided deliberately: shaming a customer's users is not a sales tactic ORTEX is willing to use.
  • The chart never phones home. No request is made to any ORTEX host. The key is verified locally with WebCrypto. 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 Shown, with the caption One warning naming the reason
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

The Community and Team plans grant the financial, viz and drawings features. Neither grants whitelabel. The White-label plan grants *, which includes it. OEM agreements are issued with whatever the contract says.

So the mark is not the difference between paying and not paying. It is the difference between the White-label plan and everything below it, and it is the feature that plan is mostly bought for. 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-labelling; 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 or pending license that grants it

A state of pending means the payload passed the synchronous checks and the signature is still being verified; features are granted during that window, because blocking a paying customer's chart on an asynchronous check is worse than the risk it removes.

Replacing It With Your Own

A whitelabel license may also keep a mark and make it yours, which is what a white-labeled product usually wants rather than a bare corner.

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://ortex.com" Opened in a new tab when the mark is clicked.

position, height, opacity and caption are honored regardless of the license, so an unlicensed evaluation can move the mark out of the way of a legend without anything being enforced against it. What requires the feature is removing the mark, and replacing it with another brand.

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.