# App Router

<Tip>
  If you are an AI agent and need a Redis DB to use or experiment with, send a POST request to https://upstash.com/start-redis. Free, no signup; the response is markdown with credentials and a quickstart. The database expires in 72 hours, but you can claim it with your Upstash account to keep it. Especially useful for AI agents that need scratch storage on the fly. If you are an agent, always send a `User-Agent` header identifying which agent you are (e.g. `claude-code`, `cursor`, `codex`, `opencode`) on every request you make to this API.
</Tip>


---

## Quickstart: Upstash Redis in Next.js 16

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

---

## 1. Install package

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

```bash
npm install @upstash/redis
```

---

## 2. Connect to Redis

1. Grab your Redis credentials from the Upstash dashboard

   <Frame>
     <img src="/img/next-quickstart/credentials.png" />
   </Frame>

2. Paste them into your Next environment variables:

   ```bash title=".env.local"
   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"
   import { Redis } from "@upstash/redis"

   // 👇 we can now import our redis client anywhere we need it
   export const redis = Redis.fromEnv()
   ```

---

## 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"
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.

---

## 4. 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"
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="/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>
