> For the complete documentation index, see [llms.txt](https://help.usejimo.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.usejimo.com/docs/getting-started/install-jimo.md).

# Install Jimo

The snippet in your app and the identify call, by a developer or a coding agent. Both parts are the install.

Everything before this step runs on your browser alone. Step 4 puts Jimo in your application for your users: a script in the page head, and an `identify` call so Jimo knows who each user is. About an hour for the person who edits your app. Both parts are the install; without identify, every user is anonymous.

**You will have at the end:** the snippet detected on your app, and your own account listed as an identified user in Users & Segments.

***

## Who does this

Someone who can add a script tag to your application, or who manages your tag manager. If that is not you, send them this page, or use **Share Instructions to Engineer** on the Get Started page, step 4. The rest of this page is written for them.

## Two routes

Open **Get Started**, expand **4. Install Jimo to publish experience**. Two tabs.

<figure><img src="https://2794860263-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKzAcDWQbK1gKbpra7bkb%2Fuploads%2FkblCHzuvL2roU8NMpdNc%2Fgs-step4-tabs.png?alt=media&#x26;token=40d99e63-593b-4faf-90e0-e6fec6856fd8" alt="Get Started page, step 4, the two install routes"><figcaption></figcaption></figure>

{% tabs %}
{% tab title="Using AI Agent" %}
**For whom:** a developer who works with a coding agent (Claude Code, Cursor, Codex, or another).

**What you get:** a complete prompt to copy into the agent. It explores the codebase first, proposes where to load the script, where to identify, which attributes and events to send, and waits for approval before writing code. The Project ID is already filled in.
{% endtab %}

{% tab title="Manual Install" %}
**For whom:** a developer who prefers to do it by hand, or a tag manager owner.

**What you get:** the snippet with your Project ID, and the identify instructions.
{% endtab %}
{% endtabs %}

Both routes do the same four things, listed below. The AI route also proposes attributes and events, which are the next level ([Attributes and events](/docs/getting-started/install-jimo/attributes-and-events.md)).

## Manual route, step by step

{% stepper %}
{% step %}

### Load the SDK

Copy the snippet from the Manual Install tab (or from [Settings > Installation](/docs/settings/installation.md)) and paste it in the `<head>` of every page of your app, where you already load third-party scripts. Keep the `if (j["jimo"] != null) return;` guard: running the snippet twice empties the command queue. Google Tag Manager: see [the GTM section](https://help.usejimo.com/docs/for-developers/for-developers/install-our-sdk#install-with-google-tag-manager) of the SDK guide.

<figure><img src="https://2794860263-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKzAcDWQbK1gKbpra7bkb%2Fuploads%2F9yhq4TLqHCKIrJlszN25%2Fgs-step4-manual.png?alt=media&#x26;token=3d5462f8-563a-429b-a187-655311cffdea" alt="Manual Install tab with the snippet"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Identify the user

Where your app knows who is logged in, push the user's data then the identify call, in this order:

```javascript
window.jimo.push(['set', 'user:email', [user.email]]);
window.jimo.push(['set', 'user:name', [user.name]]);
window.jimo.push(['do', 'identify', [user.id]]);
```

`user.id` is your stable internal ID, never an email. Once per session, at login, not on every route change. Every `set` goes before `identify`. Details in [Identify your users](/docs/getting-started/install-jimo/identify-your-users.md) and the [Identify users SDK guide](https://help.usejimo.com/docs/for-developers/for-developers/sdk-guides/identify-users).
{% endstep %}

{% step %}

### Reset at logout

`window.jimo.push(['do', 'storage:reset']);` where your app handles logout, so the next person on a shared device does not inherit the previous user's state.
{% endstep %}

{% step %}

### Allow Jimo in your CSP

If your app sends a Content-Security-Policy header. The domains per directive are in Settings > Installation. See [CSP and identity verification](/docs/getting-started/install-jimo/csp-and-identity-verification.md).
{% endstep %}
{% endstepper %}

Install on staging first if you have one, then on production. Same snippet, same Project ID; environments do the rest (see [Environments and domains](/docs/getting-started/your-workspace/environments-and-domains.md)).

{% hint style="warning" %}
**The most common mistake at this step: stopping after the snippet.** "Installed" and "identified" are two different things. The snippet alone makes every visitor an anonymous user: no name, no attributes, no targeting, and each device or cleared cache counts as a new user against your MAU. The identify call is what turns visitors into your users. If your app is behind a login, turn on **Force identify** in Settings > Installation so Jimo never starts for an anonymous session.
{% endhint %}

## Turn on Force identify

<figure><img src="https://2794860263-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKzAcDWQbK1gKbpra7bkb%2Fuploads%2FAgBoyJBn1a7Zy4IPTUsq%2F08-snippet-vs-identify.png?alt=media&#x26;token=2674de20-7753-4b05-bbd4-16f65ad461b0" alt="Snippet only compared with snippet plus identify"><figcaption></figcaption></figure>

In [Settings > Installation](/docs/settings/installation.md), **Identification** tab, enable **Force Identify**. Jimo then initializes only once a user is identified, and buffers any command pushed before that. Do it when every user of your app is authenticated. Skip it for a public site where anonymous visitors should see experiences.

## Verify

#### Snippet detected

**Settings > Installation** shows the snippet as detected on your domain.

<figure><img src="https://2794860263-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKzAcDWQbK1gKbpra7bkb%2Fuploads%2FNCOxlh00DBc8lapPBBuK%2Fsettings-installation.png?alt=media&#x26;token=211ef2b9-5d1c-4401-b795-12237749d450" alt="Settings, Installation, detection status"><figcaption></figcaption></figure>

#### Your account is identified

Open your app, log in, then open [Users & Segments](/docs/analyze/users-and-segments.md): your own account is listed with the name and email you pushed. If it is listed as Anonymous, the identify call did not run or ran before the `set` commands.

#### The SDK is initialized

In the browser console on your app, `window.jimo` is an object (`{}` with methods): `undefined` means the script is missing, `[]` means it is present but not initialized.

#### No blocking error

No console line mentioning `IDENTIFY_VERIFICATION` or "Content Security Policy".

Reload the Get Started page: step 4 is checked.

## Go further

* [Identify your users](/docs/getting-started/install-jimo/identify-your-users.md): which ID, ordering, Force identify, what counts as MAU. Readable without code.
* [Attributes and events](/docs/getting-started/install-jimo/attributes-and-events.md): what to send so you can target and measure.
* [CSP and identity verification](/docs/getting-started/install-jimo/csp-and-identity-verification.md).
* For developers: [Install our SDK](https://help.usejimo.com/docs/for-developers/for-developers/install-our-sdk), [SDK methods](https://help.usejimo.com/docs/for-developers/for-developers/sdk-methods), [Manual initialization](https://help.usejimo.com/docs/for-developers/for-developers/sdk-guides/manual-initialization) to control on which pages Jimo loads.

**Next page:** [Step 5, Publish your first experience](/docs/getting-started/publish-your-first-experience.md)
