The Checktiv Web SDK (`@checktiv/sdk-web`) publishes one package with several entry points. The two-line client surface (`Checktiv.init(...)` then `mountProvisioned(...)`) covers most integrations. The other subpaths let you register the managed modules, use the React wrapper, or - for teams building a fully custom capture renderer - reach the advanced host-side capture core.

This page is the map of that public surface. Each subpath links to its own guide.

## The public subpaths

| Subpath                   | What it is                                                                                                                                                                                     |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.` (root)                | The substrate: `Checktiv.init(opts)` returns a `ChecktivClient` with `mountProvisioned(...)` and `mount(...)`. Also exports the named `mountButton` widget. Ships no visual module on its own. |
| `./idv`                   | The managed IDV module (camera capture, document scan, liveness). Import it so `mount('idv')` / `mountProvisioned` can render it. See [Quickstart](/developers/sdks/quickstart).               |
| `./fraud`                 | The consent-gated fraud-signal module. Import it to register it; it stays a no-op until the applicant grants consent. See [Fraud consent](/developers/sdks/fraud-consent).                     |
| `./custom-form`           | The managed custom-form module (author-defined fields on a `custom_form` step). See [Custom forms](/developers/sdks/custom-forms).                                                             |
| `./custom-form/style.css` | The stylesheet the custom-form module needs. It renders real form controls into your page, so this stylesheet must be present. See [Custom forms](/developers/sdks/custom-forms).              |
| `./react`                 | The React wrapper: `ChecktivProvider`, `ChecktivIdv`, and `useChecktiv()`. See [React](/developers/sdks/react).                                                                                |
| `./capture`               | Advanced. The Tier-1 headless capture core: `createCaptureController`. No UI - you render everything. See [Advanced capture](/developers/sdks/capture).                                        |
| `./capture-ui`            | Advanced. The Tier-2 batteries-included renderer: `mount()`. See [Advanced capture](/developers/sdks/capture).                                                                                 |
| `./cross-device`          | The standalone cross-device handoff panel: `mountCrossDevice`. See [Cross-device handoff](/developers/sdks/cross-device).                                                                      |
| `./idv/cross-device`      | Cross-device overlay orchestration for a custom IDV renderer: `openCrossDeviceOverlay`, `preloadCrossDeviceChunk`. See [Cross-device handoff](/developers/sdks/cross-device).                  |
| `./agents`                | A machine-readable AI-agent steering manifest (`manifest.json`). See [AI agent steering](/developers/sdks/ai-agents).                                                                          |

## The self-registration model

The managed modules (`./idv`, `./fraud`, `./custom-form`) register themselves when you import them. That import is a side effect: importing `@checktiv/sdk-web/idv` runs a one-time registration so the substrate can resolve `'idv'` by name when you call `mount('idv')` or `mountProvisioned`.

```js
import { init } from '@checktiv/sdk-web';
import '@checktiv/sdk-web/idv'; // registers the IDV module (side-effect import)

const client = init({ publishableKey: 'ah_pk_us_test_...', getSessionToken });
client.mountProvisioned({ target: document.getElementById('idv-container') });
```

If a session declares a module you did not import, the mount fails loudly with `sdk_load_failed` and an actionable message ("import `@checktiv/sdk-web/<module>` in your app") rather than a silent blank mount. Import every module your sessions can declare. Because the imports are side effects, keep them: do not let a bundler tree-shake them away.

The root `.` entry and the `./react` entry deliberately do not bundle the managed modules, so a bundler keeps them small. Add the module import yourself.

## npm vs CDN installation

**npm** - install the package and import the subpaths you use:

```bash
npm install @checktiv/sdk-web
```

```js
import { init } from '@checktiv/sdk-web';
import '@checktiv/sdk-web/idv';
```

Each subpath is independently tree-shakeable, so a `./idv`-only integration never pulls in `./fraud`.

**CDN** - one script tag loads everything:

```html
<script src="https://sdk.us.checktiv.com/v1/sdk.js" crossorigin="anonymous"></script>
```

The CDN bundle registers `./idv`, `./fraud`, and `./custom-form` eagerly, so there is no per-module import to add. After the tag loads, the SDK is available as `window.Checktiv`. For production, pin a version and add a Subresource Integrity hash. See [Versioning](/developers/sdks/versioning) and the [release notes](/developers/sdks/release-notes).

## Local development and test mode

A test-mode publishable key with the synthetic driver runs the full `checktiv.idv.*` event flow locally with no camera and no capture license. See the local-development section of the [Quickstart](/developers/sdks/quickstart).

## Related pages

- [Quickstart](/developers/sdks/quickstart) - end-to-end integration walkthrough
- [React](/developers/sdks/react) - `ChecktivProvider` and `ChecktivIdv`
- [Custom forms](/developers/sdks/custom-forms) - the `./custom-form` module
- [Cross-device handoff](/developers/sdks/cross-device) - the `./cross-device` and `./idv/cross-device` subpaths
- [Advanced capture](/developers/sdks/capture) - the `./capture` and `./capture-ui` subpaths
- [Versioning](/developers/sdks/versioning) - pinning and the evolution contract
- [REST API reference](/reference) - use the API directly without the SDK