> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nikaplanet.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Licensing & Telemetry

> Free for non-commercial use with attribution; commercial licensing lifts the free-plan limits. What telemetry collects, and how to turn it off.

## Licensing

OnlyMap JS is proprietary software. It is **free for non-commercial use with attribution** — personal projects, education, academic research, and evaluation. Commercial use needs a commercial license. Commercial use includes for-profit products, internal tools, revenue-generating services, paid consulting, and government work. The full terms are in the package's `LICENSE.md`.

### The Free Plan

Without a license key, a map runs on the free plan:

* Up to **5 layers** per map, and **25,000 rows per layer** (20 MB per data fetch).
* A small badge shows on the map: **"OnlyMap by NIKA. Free for non-commercial use."** You must keep the badge visible. This is a condition of the free non-commercial grant.
* A limit never breaks the map. A layer past the **layer** cap does not render. A layer past the **row** cap renders its first 25,000 rows and shows a dismissible on-map notice that the data is partial, so a capped map is still useful without pretending to be complete. Either way, the validation stream names the exact limit and how to lift it.
* **The limits apply only on hosted http(s) pages** (since 0.6.0). In a development context — localhost, a `file://` page, or any non-web scheme such as a desktop app shell — every cap lifts so you can build without friction. The attribution badge stays in all contexts.
* The exemption is a technical convenience, not a license grant: commercial deployment — hosted **or** shipped inside a packaged app — requires a commercial key regardless of whether the technical limits were active (LICENSE.md §3).

### License Keys

A license key lifts all limits and removes the badge:

```html theme={null}
<om-map license-key="om_live_…">
```

```ts theme={null}
OmMap.configureLicense("om_live_…");
```

Removing the badge is something a commercial license *permits*, not something it
requires. `keep-badge` on `<om-map>` (or `OmMap.setKeepBadge(true)`) lifts the free-plan
limits while still crediting OnlyMap <sup>new in 0.8.4</sup>; the badge then shows the
credit without the "free for non-commercial use" sentence, which would not describe a
paid deployment. The preference is page-level and live, and a cartograph's foot credit
follows it — `<om-cartograph keep-badge>` opts a static sheet in on its own, with no map
runtime.

A print sheet credits itself **once** <sup>since 0.10.8</sup>: a map mounted inside a
cartograph frame carries no badge of its own, because the sheet is the published
artefact and renders the credit for the whole page. A plate with a main map and two
locator insets is credited once, not three times.

A key is **publishable and deployment-restricted**. It is bound to your domains, so it is safe to put in the page source, like a map-provider API key. It verifies offline, with no network round-trip, so it works in CI and in air-gapped environments. For licensing questions, see [nikaplanet.com/onlymap](https://www.nikaplanet.com/onlymap).

A key can also be scoped to one or more packaged applications, for a map shipped inside a native app shell rather than served from a domain. The app passes its own identifier at startup:

```ts theme={null}
await OmMap.configureLicense("om_live_…", { appId: "com.example.riders" });
```

The identifier must come from the platform's own build metadata — never from page script or a bridge message, which the library cannot tell apart from the real thing. Because of that, app scoping is a deployment marker rather than an enforced boundary the way a domain is: ask for a key scoped by **both** your domains and your app identifiers where a deployment has both.

### Third-Party Software

The published bundle includes open-source components (deck.gl, MapLibre GL, Apache Arrow, the GeoTIFF/raster stack, and others). Each component keeps its own permissive license (MIT, ISC, BSD, Apache-2.0). The full list, with the license texts, ships in the package as `THIRD-PARTY-LICENSES.md`. The library generates this list from the dependency tree at each release. OnlyMap's own terms do not change those licenses.

## Telemetry

The library reports **one deployment-scoped usage snapshot per map, per page load**. The snapshot holds the layer types and counts, the widget types, the renderer, the library version, and the page hostname. The library also reports **errors from its own code** — never from your page scripts. Both go to a NIKA-operated first-party endpoint. The full payload schema is in the package's `docs/telemetry.md`.

The library **never** collects page paths or URLs, your data or its contents, coordinates, cookies, or any persistent visitor identifier. A test suite stays silent, because a `headless` map never reports.

### Opting Out

```ts theme={null}
OmMap.configureTelemetry({ disabled: true });   // global — usage snapshots AND error reports
```

```html theme={null}
<om-map telemetry="off">                        <!-- per map -->
```

### `map-id`

`map-id` is an optional attribute. It identifies the **map artifact**, not the visitor. Usage can then tell one popular dashboard from many different maps:

```html theme={null}
<om-map map-id="0f2c6a1e-88f7-4c3e-9d41-7b1f3f9f2ab7">
```

It is author-controlled page metadata. Nothing is stored on the visitor's device. You can change or delete it at any time. It is never required.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.