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

# Install the Snowflake Native App

> Set up a customer-hosted data plane in your Snowflake environment

The Snowflake Native App installs a customer-hosted [data plane](/concepts/primitives/data-planes) directly in your Snowflake environment. Once installed, it operates as a data plane operator—polling Narrative's control plane for jobs and executing queries against your Snowflake data without it ever leaving your account.

## Prerequisites

* Snowflake ACCOUNTADMIN role or equivalent privileges

* A Narrative account ([create one here](/getting-started/create-account))

* A Narrative API token with the following permissions ([manage API keys](/account-settings/api-keys)):

  | Permission      | Access level   |
  | --------------- | -------------- |
  | Compute Pools   | Read and Write |
  | Data Planes     | Read and Write |
  | Data Plane Logs | Read and Write |
  | Datasets        | Read and Write |
  | Jobs            | Read and Write |
  | Models          | Read           |

* A Snowflake virtual warehouse

* Access to the [Narrative Data Collaboration listing](https://app.snowflake.com/marketplace/listing/GZTSZI0HICH/narrative-inc-narrative-data-collaboration) on the Snowflake Marketplace

* At least one Snowflake table or view to register as a dataset

## Installation steps

<Steps>
  <Step title="Install the Snowflake Native App">
    Find and install the [Narrative Data Collaboration](https://app.snowflake.com/marketplace/listing/GZTSZI0HICH/narrative-inc-narrative-data-collaboration) app from the Snowflake Marketplace. Click **Get** and follow the prompts to install it in your Snowflake account.
  </Step>

  <Step title="Grant privileges">
    Click **Grant Privileges** to grant the app the following privileges:

    * `EXECUTE TASK`
    * `CREATE COMPUTE POOL`
    * `BIND SERVICE ENDPOINT`

    These allow the app to schedule jobs, provision compute resources, and communicate with Narrative's control plane.
  </Step>

  <Step title="Register compute warehouses">
    In the app configuration screen, expand **Warehouse Management** and click **Select Warehouses to Register**. Select the warehouses you want to use as compute pools.

    Then, grant the app usage on each selected warehouse by running the following in a Snowflake worksheet:

    ```sql theme={null}
    GRANT USAGE ON WAREHOUSE <warehouse_name> TO APPLICATION NARRATIVE_DATA_COLLABORATION;
    ```

    Each granted warehouse is registered as a [compute pool](/concepts/primitives/compute-pools) on your data plane, giving you control over which warehouse handles each workload. You can register additional warehouses later and manage them from the **Compute Pools** tab on the data plane detail page.

    <Tip>
      Start with a smaller warehouse and scale up based on your data volume and query complexity.
    </Tip>
  </Step>

  <Step title="Configure external access integration">
    1. Click **Setup External Access Integration**.
    2. Click **Next**.
    3. Paste your Narrative API token under **Secret value**.

    This allows the app to authenticate with Narrative's control plane.
  </Step>

  <Step title="Select a source table or view">
    Select the Snowflake table or view you want to register as a dataset in Narrative.

    <Note>
      Narrative is granted **read-only** access to the selected object. You can change or add additional tables later.
    </Note>
  </Step>

  <Step title="Name your dataset">
    Set the **DATASET UNIQUE NAME** for your registered dataset.

    <Note>
      Dataset names must use uppercase alphanumeric characters and underscores only (e.g., `MY_DATASET_NAME`).
    </Note>
  </Step>

  <Step title="Upload sample data (optional)">
    Upload a sample of your data for display in the Narrative UI. This helps collaborators understand the structure and content of your dataset. You can skip this step and upload sample data later from within the platform.
  </Step>

  <Step title="Upload statistics (optional)">
    Upload dataset statistics for display in the Narrative UI. Statistics help collaborators evaluate your dataset. You can skip this step and upload statistics later from within the platform.
  </Step>
</Steps>

## What happens next

The app now operates as a data plane [operator](/concepts/primitives/data-planes)—it continuously polls Narrative's control plane for pending jobs and executes NQL queries directly in your Snowflake environment. Your data stays within your Snowflake security perimeter throughout this process.

Your registered warehouses appear as compute pools on the data plane detail page. You can set a default compute pool, add or remove warehouses, and configure collaboration policies from the **Compute Pools** tab. To choose which compute pool runs a specific query, use the [context selector](/guides/platform/using-the-context-selector).

<Note>
  If your data plane was set up before compute pools were available, see [Migrate to Compute Pools](/guides/data-planes/migrate-to-compute-pools) to transition from the legacy single-warehouse model.
</Note>

## Recommended: Enable AI features

To enable optional Narrative features that use advanced AI models hosted by Snowflake Cortex (such as Ask Rosetta), run the following grants after the app is installed:

```sql theme={null}
GRANT DATABASE ROLE snowflake.cortex_user TO APPLICATION NARRATIVE_DATA_COLLABORATION;

ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'ANY_REGION';
```

The first grant allows the app to call Cortex AI models. The second enables cross-region Cortex access, which is required if your Snowflake account is in a region where certain models are not natively available.

***

## Related content

<CardGroup cols={2}>
  <Card title="Snowflake Native App Reference" icon="snowflake" href="/reference/integrations/snowflake-native-app">
    Capabilities, requirements, and configuration details
  </Card>

  <Card title="Data Planes" icon="database" href="/concepts/primitives/data-planes">
    Understand how data planes and operators work
  </Card>

  <Card title="API Keys" icon="key" href="/account-settings/api-keys">
    Manage API tokens and permissions
  </Card>

  <Card title="Execution Context" icon="circle-play" href="/concepts/primitives/execution-context">
    Learn how queries are executed across data planes
  </Card>
</CardGroup>
