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

# App Router

<Snippet file="redis/start-redis-note.mdx" />

***

## Quickstart: Upstash Redis in Next 15

<Frame>
  <iframe src="https://player.mux.com/gPYmP1M00800UgLr4fa9O8CeN6M36E2iY6Bww8Ir5Qn4U?thumbnail-time=5&metadata-video-title=Upstash+Redis+x+Next+15+Quickstart&video-title=Upstash+Redis+x+Next+15+Quickstart" allow="accelerometer; gyroscope; autoplay; encrypted-media; fullscreen;" allowfullscreen className="w-full aspect-video" />
</Frame>

***

## 1. Install package

In your Next.js app, install our `@upstash/redis` package:

```bash theme={"system"}
npm install @upstash/redis
```

***

## 2. Connect to Redis

1. Grab your Redis credentials from the Upstash dashboard

   <Frame>
     <img src="https://mintcdn.com/upstash/jtc3r6kD_firFPfY/img/next-quickstart/credentials.png?fit=max&auto=format&n=jtc3r6kD_firFPfY&q=85&s=9579b4b5bdffebf8fc826afb27dbade0" width="1465" height="392" data-path="img/next-quickstart/credentials.png" />
   </Frame>

2. Paste them into your Next environment variables:

   ```bash title=".env" theme={"system"}
   UPSTASH_REDIS_REST_URL=https://holy-kite-17499.upstash.io
   UPSTASH_REDIS_REST_TOKEN=AURbAAIncDEyYjM4M...
   ```

3. Create a Redis instance, for example in `lib/redis.ts`

   ```typescript title="lib/redis.ts" theme={"system"}
   import { Redis } from "@upstash/redis"

   // 👇 we can now import our redis client anywhere we need it
   export const redis = new Redis({
     url: process.env.UPSTASH_REDIS_REST_URL,
     token: process.env.UPSTASH_REDIS_REST_TOKEN,
   })
   ```

***

## 3. Using our Redis Client

We can now connect to Upstash Redis from any server component or API route. For example:

```typescript title="app/page.tsx" theme={"system"}
import { redis } from "@/lib/redis"

// 👇 server component
const Page = async () => {
  const count = await redis.get<number>("count")
  return <p>count: {count}</p>
}

export default Page
```

Because this `count` doesn't exist yet, let's create a Next API route to populate it.

***

## 3. Storing data in Redis

Let's create a super simple API that, every time when called, increments an integer value we call `count`. This is the same value we display in our page above:

```typescript title="app/api/counter/route.ts" theme={"system"}
import { redis } from "@/lib/redis"

export const POST = async () => {
  await redis.incr("count")

  return new Response("OK")
}
```

Perfect! Every time we now call this API, we increment the count in our Redis database:

<Frame>
  <img src="https://mintcdn.com/upstash/jtc3r6kD_firFPfY/img/next-quickstart/curl.png?fit=max&auto=format&n=jtc3r6kD_firFPfY&q=85&s=76efae06a8805d53c457726204f61c73" width="953" height="108" data-path="img/next-quickstart/curl.png" />
</Frame>

The server component fetches the most recent count at render-time and displays the up-to-date value automatically. For a video demo, check the video at the top of this article.

***

## Examples

<Card title="GitHub Repository" icon="github" href="https://github.com/upstash/redis-js/tree/main/examples/nextjs-app-router" horizontal>
  You can find the project source code on GitHub.
</Card>

<Info>
  If you're already on Vercel, you can create Upstash projects directly through Vercel: [Read more](../howto/vercelintegration).
</Info>
