Upstash Redis adapter for Idempotix idempotency
npm install @idempotix/upstashUpstash Redis adapter for Idempotix. HTTP-based, perfect for serverless and edge.

``bash`
npm install @idempotix/core @idempotix/upstash
`typescript
import { upstash } from '@idempotix/upstash';
import { next } from '@idempotix/next';
// From environment variables
export const POST = next({ storage: upstash() })(handler);
`
`typescript
import { upstash } from '@idempotix/upstash';
// From environment variables (IDEMPOTIX_UPSTASH_REST_URL, IDEMPOTIX_UPSTASH_REST_TOKEN)
const storage = upstash();
// With explicit credentials
const storage = upstash({
url: 'https://your-redis.upstash.io',
token: 'your-rest-token',
});
// With options
const storage = upstash({
url: process.env.UPSTASH_REDIS_REST_URL,
token: process.env.UPSTASH_REDIS_REST_TOKEN,
keyPrefix: 'myapp:idem:',
});
// With existing @upstash/redis client
import { Redis } from '@upstash/redis';
const client = new Redis({ url: '...', token: '...' });
const storage = upstash({ client });
`
| Variable | Description |
| ------------------------------ | ------------------------------------------------------ |
| IDEMPOTIX_UPSTASH_REST_URL | Upstash REST endpoint (e.g., https://xyz.upstash.io) |IDEMPOTIX_UPSTASH_REST_TOKEN
| | Upstash REST token |
`typescript
// app/api/orders/route.ts
import { next } from '@idempotix/next';
import { upstash } from '@idempotix/upstash';
export const POST = next({ storage: upstash() })(async (req) => {
const order = await createOrder(await req.json());
return Response.json(order, { status: 201 });
});
`
`typescript
// pages/api/orders.ts
import { pages } from '@idempotix/next/pages';
import { upstash } from '@idempotix/upstash';
export default pages({ storage: upstash() })(async (req, res) => {
const order = await createOrder(req.body);
res.status(201).json(order);
});
`
`typescript
// lib/idempotency.ts
import { configure } from '@idempotix/next';
import { upstash } from '@idempotix/upstash';
export const idempotent = configure({
storage: upstash(),
ttl: '1h',
});
// app/api/orders/route.ts
import { idempotent } from '@/lib/idempotency';
export const POST = idempotent()(handler);
`
Vercel KV is compatible with Upstash. Use the Vercel KV environment variables:
`typescript`
const storage = upstash({
url: process.env.KV_REST_API_URL,
token: process.env.KV_REST_API_TOKEN,
});
All keys are prefixed with Idempotix: by default. Customize with:
`typescript``
const storage = upstash({ keyPrefix: 'myapp:idem:' });
MIT