Upstash: Free Serverless Redis, Vector & Queue APIs

Quick answer: Upstash is serverless Redis exposed over an HTTP/REST API, so stateless functions at the edge can use it without holding a TCP connection — the thing that breaks traditional Redis on Vercel, Cloudflare Workers, and Lambda. It's priced per request and scales to zero, with a standing free tier of 500,000 commands/month and no credit card. Two sibling products — Vector (RAG) and QStash (message queue) — each ship their own free tier too.
✅ Verified 2026-08-31. We re-read Upstash's own pricing page and the free-tier numbers below still match what it publishes:
Data size256 MB
Bandwidth10 GB/month
Commands500,000/month
Databases1
Free tiers moved a lot in 2026 — several providers we cover quietly started requiring a credit card — so we re-check rather than assume.

Traditional Redis clients open one persistent TCP socket and keep it warm for the life of the process. That's ideal on an always-on server and a disaster on serverless, where every cold instance wants its own connection — leading to connection storms, exhausted pools, and timeouts. Upstash solves this by making every Redis command an independent HTTPS request with a bearer token. No socket to hold, no pool to exhaust, and an idle database costs $0.

Is Upstash Free? The Numbers

Yes — all three products have standing free tiers with no credit card, usable for real prototypes rather than 14-day trials. Numbers move, so check the official pricing page before you build.

Upstash Redis

ResourceFree tierPay-as-you-go
Commands / month500,000$0.20 per 100K
Max data size256 MBUp to 100 GB ($0.25/GB, first 1 GB free)
Databases1Up to 100
Bandwidth10 GB / monthFree to 200 GB, then $0.03/GB
Max commands / second10,00010,000
RegionPick one at database creation+ global replication (paid)
Sleeps / expires?No sleep and no trial expiry, but a free database nobody uses can be archived (the docs say after at least 30 days)Not archived for inactivity
Commercial useAllowedAllowed
Credit cardNot requiredRequired

500K commands is more generous than it looks: a cache hit is one command, a rate-limit check a small handful. That comfortably covers a side project or the caching layer of a low-traffic production service, and pay-as-you-go picks up seamlessly at $0.20 per 100K when you outgrow it. Fixed monthly plans (from $10) exist if you want predictable billing.

Upstash Vector

ResourceFree tier
Requests / day10,000 (query + upsert)
Max vectorsUp to 200M × dimensions, 1 GB total
Max dimensions1,536
Free indexesUp to 10
Pay-as-you-go$0.40 per 100K requests

10,000 requests/day is enough to build and demo a real RAG app. The 1,536-dimension ceiling matches OpenAI's text-embedding-3-small, and Vector can generate embeddings for you from raw text.

Upstash QStash

ResourceFree tier
Messages / day1,000
Max message size1 MB
Max delay7 days
Pay-as-you-go$1 per 100K messages

One honest note: each delivery attempt counts, so a message that fails and retries three times counts as multiple against your daily allowance.

Why Serverless Redis Is Actually Different

Deploy conventional Redis code to serverless and ten thousand concurrent requests can mean ten thousand cold starts, each opening its own connection. Redis caps concurrent connections (often in the low thousands), so you hit the ceiling and requests time out. Connection pooling helps on a stable server and does nothing when every instance is ephemeral.

Upstash's stateless REST API sidesteps this entirely:

  • It runs where TCP cannot. Cloudflare Workers, Vercel Edge Functions, and Deno Deploy restrict raw TCP sockets. HTTP works everywhere, making Upstash one of the only Redis options that runs at the edge and in the browser.
  • Concurrency isn't capped by connections. Ten thousand independent HTTP calls is a normal day for an HTTP endpoint — no shared socket to contend over.
  • Global replication is built in on paid tiers, so an edge function reads from the nearest replica.

The honest trade-off: an HTTP round-trip carries more per-command overhead than a warm TCP socket, so from a co-located long-running server raw Redis is lower-latency. Upstash still supports the standard Redis protocol over TCP for those cases — the REST path is what you want when compute is serverless, edge, or geographically spread.

Your First Commands

Create a free Redis database in the Upstash console and it hands you a REST URL and a token.

TypeScript / JavaScript (npm install @upstash/redis):

import { Redis } from "@upstash/redis";



const redis = new Redis({

  url: process.env.UPSTASH_REDIS_REST_URL,

  token: process.env.UPSTASH_REDIS_REST_TOKEN,

});



await redis.set("greeting", "hello world");

const value = await redis.get("greeting"); // "hello world"



// Cache with a 60-second TTL

await redis.set("user:42", JSON.stringify(user), { ex: 60 });

This exact code runs unchanged in a Node server, a Vercel function, a Cloudflare Worker, and a Deno script — that portability is the point.

Raw REST — no SDK, works from anything that can make an HTTPS request:

curl https://YOUR-ENDPOINT.upstash.io/set/greeting/hello 

  -H "Authorization: Bearer YOUR_TOKEN"

curl https://YOUR-ENDPOINT.upstash.io/get/greeting 

  -H "Authorization: Bearer YOUR_TOKEN"

# {"result":"hello"}

A Python SDK (pip install upstash-redis) mirrors the same API.

The Killer Use Case: Rate Limiting at the Edge

The most common reason people reach for Upstash is rate limiting. It needs a shared, fast, atomic counter every instance can see — impossible with in-memory state when your app runs across dozens of ephemeral edge locations. Upstash ships @upstash/ratelimit with fixed-window, sliding-window, and token-bucket algorithms:

import { Ratelimit } from "@upstash/ratelimit";

import { Redis } from "@upstash/redis";



const ratelimit = new Ratelimit({

  redis: Redis.fromEnv(),

  limiter: Ratelimit.slidingWindow(10, "10 s"), // 10 req / 10 s

});



export default async function handler(req) {

  const ip = req.headers.get("x-forwarded-for") ?? "anonymous";

  const { success } = await ratelimit.limit(ip);

  if (!success) return new Response("Too many requests", { status: 429 });

  return new Response("OK");

}

Deploy that to a Worker or Edge Function and you have global, consistent rate limiting in a few lines — every edge location checks the same counter over HTTP. This is a genuinely hard problem to solve any other way in a serverless deployment.

Vector and QStash in Brief

Upstash Vector is a serverless vector database for RAG — the same job as Pinecone, Qdrant, and Chroma, but with scale-to-zero pricing. Its standout is built-in embedding models: upsert and query with raw text and let Upstash embed server-side, so you don't even need a separate embedding API for a prototype. Pair it with a scraper like Firecrawl and a free LLM for an end-to-end $0 RAG pipeline. If you'd rather store vectors next to relational data, Supabase or Neon with pgvector is the alternative.

QStash is a message queue and scheduler for serverless, where there's no daemon to run a cron loop. You publish an HTTP message and it calls your endpoint back later — after a delay or on a cron schedule — with automatic retries and a dead-letter queue:

curl -X POST https://qstash.upstash.io/v2/publish/https://myapp.com/api/task 

  -H "Authorization: Bearer QSTASH_TOKEN" 

  -H "Content-Type: application/json" 

  -H "Upstash-Delay: 60s" 

  -d '{"userId": "123", "action": "send-welcome-email"}'

Swap Upstash-Delay for Upstash-Cron to schedule recurring jobs. It's the "do this later" primitive for stacks with no worker process.

Upstash vs Redis Cloud vs Cloudflare KV vs Self-Hosted

UpstashRedis CloudCloudflare KVSelf-hosted
ModelServerless, per-requestProvisioned instanceEdge key-valueYou run the box
HTTP/REST APIYes (native)No (TCP only)YesNo
Edge / WorkersYesNoCloudflare onlyNo
Full Redis commandsYesYesNo (get/put/list)Yes
Scales to zeroYesNoYesNo
Free tier500K cmd/mo, 256 MB~30 MB100K reads/day, 1 GBFree (your server)
Best forServerless & edgeAlways-on serversCloudflare readsFull control, high volume
  • Redis Cloud is the reference managed Redis with the richest feature set and lowest latency from a co-located server — but it's a provisioned instance with a minimum cost and doesn't run at the edge.
  • Cloudflare KV is edge-native but eventually-consistent key-value, not Redis — no atomic counters, sorted sets, or pub/sub. Great for read-heavy config, wrong for rate limiting.
  • Self-hosted Redis on a free Oracle Cloud ARM box is $0/month and total control — the cost is operational (persistence, backups, upgrades, and the connection-pool problem if you're serverless). A PaaS like Coolify makes standing one up a one-click job.
  • Upstash wins when compute is serverless, edge, or spread across regions. Note: Vercel's own KV was built on Upstash, so on Vercel it's effectively the native Redis path.

When to Use Upstash (and When Not To)

  • Deploying to serverless or the edge? Upstash is the natural pick — the connectionless REST model exists precisely for you.
  • Need distributed rate limiting? @upstash/ratelimit is the cleanest solution available. This alone justifies it.
  • Want a RAG prototype fast? Vector with built-in embeddings gets you to semantic search in a few lines; compare against Qdrant, Pinecone, and Chroma if you'll scale hard.
  • Always-on server doing millions of commands/second? Provisioned Redis (Redis Cloud or self-hosted) is cheaper and lower-latency — per-request pricing and HTTP overhead work against you.
  • Need a plain database, not a cache/queue? Reach for Turso or a managed Postgres — Upstash shines for ephemeral key-value workloads, not as a relational system of record.

Frequently Asked Questions

Is Upstash really free?

Yes. Redis includes 500,000 commands/month, 256 MB storage, and 10 GB bandwidth on a standing free tier with no credit card; Vector adds 10,000 requests/day and QStash 1,000 messages/day, both free. These are real free tiers for prototypes, not time-limited trials — you only add a card when you move to pay-as-you-go. Two limits to plan around: the free plan gives you one Redis database, and a free database that sees no use for 30 days or more can be archived. Upstash emails a warning first, keeps a backup, and lets you restore it, but the connection details stop working until you do.

Is Upstash real Redis?

It implements the Redis command set and is compatible with standard Redis clients over TCP, so your knowledge and most existing code transfer. What differs is that it also exposes every command over a stateless HTTP/REST API and prices per request — the parts that make it work in serverless and edge environments.

Does Upstash work on Cloudflare Workers and Vercel Edge?

Yes — this is one of its main reasons to exist. Because it speaks HTTP rather than requiring a raw TCP socket, it runs in edge runtimes that restrict or forbid TCP connections. The @upstash/redis SDK is built for exactly these environments.

Why use Upstash instead of self-hosting Redis?

Use Upstash when your app runs on serverless or edge, where the persistent-connection model causes connection-exhaustion problems, and its REST API scales to zero when idle. Self-host when you have always-on servers, need the full feature set at lowest latency, or run high, steady volume where flat pricing beats per-request.

Bottom Line

Upstash is Redis rebuilt for how apps are actually deployed — stateless, serverless, spread across the edge. Exposing Redis over HTTP and pricing per request removes the connection-exhaustion problem that breaks traditional Redis in serverless environments, and scale-to-zero means an idle database costs nothing. If your compute is stateless and your traffic is bursty, it's one of the cleanest free-tier keys you can add. If it's a beefy always-on server doing millions of commands a second, reach for provisioned or self-hosted Redis instead.

Related Reads