Build production APIs with databases, queues, and storage built into the platform. Deploy to the edge in minutes.
Everything you need for backend development—in one platform.
No configuration files. No infrastructure setup. Just TypeScript. Stack Deploy includes databases, queues, caching, and storage built directly into the platform. Import what you need and deploy.
Your API runs on a global edge network in 275+ cities worldwide. Sub-50ms response times for users anywhere. No regions to configure.
No cloud certifications. No DevOps knowledge required. If you've built with Express or Next.js, you already know Stack Deploy.
Pay only for requests and compute time. No bandwidth fees. No per-seat charges. No surprise bills. One simple line item.
Traditional cloud platforms require hours of infrastructure setup. Stack Deploy gives you everything built into the platform.
// 1. Create Lambda function in AWS Console
// 2. Configure API Gateway + routes + CORS
// 3. Create DynamoDB table with correct schema
// 4. Create SQS queue with permissions
// 5. Set up IAM roles + policies for each service
// 6. Configure environment variables
// 7. Set up CloudWatch logs
// 8. Configure VPC (if using RDS)
// Then write your function:
const AWS = require('aws-sdk')
const dynamodb = new AWS.DynamoDB.DocumentClient()
const sqs = new AWS.SQS()
exports.handler = async (event) => {
try {
// Parse API Gateway event
const body = JSON.parse(event.body)
// DynamoDB put item
const params = {
TableName: process.env.TABLE_NAME,
Item: {
id: Date.now().toString(),
userId: body.userId,
total: body.total
}
}
await dynamodb.put(params).promise()
// Send to SQS
await sqs.sendMessage({
QueueUrl: process.env.QUEUE_URL,
MessageBody: JSON.stringify(params.Item)
}).promise()
// Return API Gateway response format
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id: params.Item.id })
}
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: error.message })
}
}
}
// Plus: IAM policies, deployment configs, monitoring setup... import { app, db, queue } from '@stackdeploy/runtime'
// Define infrastructure
const mainDb = db('main')
const ordersQueue = queue('orders')
// Create app
const api = app({
db: [mainDb],
queue: [ordersQueue]
})
// Define handler
api.post('/v1/orders', async (ctx) => {
const order = await ctx.req.json()
// Save to database
const result = await ctx.db.main.query(
'INSERT INTO orders (user_id, total) VALUES (?, ?)',
[order.userId, order.total]
)
// Queue for processing
await ctx.queue.orders.send({
...order,
id: result.insertId
})
return ctx.res.json({ id: result.insertId })
})
export default api Stack Deploy includes everything you need for production APIs built into the platform. Databases, queues, and WebSockets with zero configuration. Just TypeScript.
import { app, db, queue } from '@stackdeploy/runtime'
// Define your infrastructure
const mainDb = db('main')
const ordersQueue = queue('orders')
// Create your API
const api = app({ db: [mainDb], queue: [ordersQueue] })
// Define middleware
const auth = async (ctx, next) => {
if (!ctx.req.headers.get('authorization'))
return ctx.res.json({ error: 'Unauthorized' }, 401)
return next()
}
// Add routes with handlers
api.post('/orders', auth, async (ctx) => {
const order = await ctx.req.json()
// Save to database
const result = await ctx.db.main.query(
'INSERT INTO orders (user_id, total) VALUES (?, ?)',
[order.userId, order.total]
)
// Queue for processing
await ctx.queue.orders.send({ id: result.insertId, ...order })
return ctx.res.json({ id: result.insertId })
})
// Export and deploy globally
export default api
Import db(), queue(), kv(), storage(), or realtime() and they're ready to use instantly. Complete backend infrastructure built into the platform. Zero config.
Lightning-fast edge storage for caching and session data
import { app, kv } from '@stackdeploy/runtime'
const cache = kv('cache')
const api = app({ kv: [cache] })
api.get('/product/:id', async (ctx) => {
// Check cache first
const cached = await ctx.kv.cache.get(ctx.params.id)
if (cached) return ctx.res.json(cached)
// Fetch and cache
const product = await fetchFromDB(ctx.params.id)
await ctx.kv.cache.set(ctx.params.id, product)
return ctx.res.json(product)
}) Reliable background jobs and batch processing
import { app, queue } from '@stackdeploy/runtime'
const emails = queue('emails')
const api = app({ queue: [emails] })
// Send email to queue
api.post('/signup', async (ctx) => {
await ctx.queue.emails.send({
type: 'welcome', to: 'user@example.com'
})
})
// Process the queue
api.queue('emails', async (ctx) => {
await sendgrid.send(ctx.job)
}) WebSockets for chat, notifications, and multiplayer
import { app, realtime } from '@stackdeploy/runtime'
const chat = realtime('chat')
const api = app({ realtime: [chat] })
api.post('/message', async (ctx) => {
const { roomId, message } = await ctx.req.json()
// Broadcast to all connected clients
await ctx.realtime.chat.broadcast(`room:${roomId}`, {
type: 'message',
content: message
})
}) Full relational database at the edge with migrations
import { app, db } from '@stackdeploy/runtime'
const mainDb = db('main')
const api = app({ db: [mainDb] })
api.post('/users', async (ctx) => {
const data = await ctx.req.json()
const user = await ctx.db.main.transaction(async (tx) => {
// Create user
const user = await tx.query(
'INSERT INTO users (email) VALUES (?)',
[data.email]
)
// Create profile
await tx.query(
'INSERT INTO profiles (user_id) VALUES (?)',
[user.id]
)
return user
})
return ctx.res.json(user)
}) Store files, images, and videos with global CDN—no S3 buckets to configure
import { app, storage } from '@stackdeploy/runtime'
const avatars = storage('avatars')
const api = app({ storage: [avatars] })
api.post('/upload', async (ctx) => {
const formData = await ctx.req.formData()
const file = formData.get('avatar')
// Upload to storage
const url = await ctx.storage.avatars
.put(`user-${userId}.jpg`, file)
return ctx.res.json({ url })
}) Stack Deploy is TypeScript running on the edge. Use our built-in services for simplicity, or bring any npm package and connect to your own infrastructure.
Import databases, queues, and storage directly from the platform. Zero configuration.
import { app, db, queue } from '@stackdeploy/runtime'
const mainDb = db('main')
const jobs = queue('jobs')
const api = app({
db: [mainDb],
queue: [jobs]
})
api.post('/users', async (ctx) => {
// Use managed database
const user = await ctx.db.main.query(
'INSERT INTO users VALUES (?)',
[email]
)
// Queue background job
await ctx.queue.jobs.send({
type: 'welcome-email',
userId: user.id
})
return ctx.res.json({ user })
}) Use any npm package. Connect to existing databases, Redis, Kafka, or any service.
import { app } from '@stackdeploy/runtime'
import postgres from 'postgres'
import { createClient } from 'redis'
// Your Postgres database
const sql = postgres(process.env.DATABASE_URL)
// Your Redis instance
const redis = createClient({
url: process.env.REDIS_URL
})
const api = app()
api.post('/users', async (ctx) => {
// Your database
const [user] = await sql`
INSERT INTO users (email)
VALUES ${email} RETURNING *
`
// Your Redis cache
await redis.set(
`user:${user.id}`,
JSON.stringify(user)
)
return ctx.res.json({ user })
}) Mix and match built-in services with your own infrastructure. Use our edge cache with your existing database, or connect to Stripe and Resend while using our queue system.
import { app, kv, queue } from '@stackdeploy/runtime'
import postgres from 'postgres'
import Stripe from 'stripe'
// Built-in edge cache and queue
const cache = kv('cache')
const jobs = queue('jobs')
// Your existing database and Stripe
const sql = postgres(process.env.DATABASE_URL)
const stripe = new Stripe(process.env.STRIPE_KEY)
const api = app({ kv: [cache], queue: [jobs] })
api.post('/checkout', async (ctx) => {
// Check edge cache first
const cached = await ctx.kv.cache.get('products')
// Create Stripe checkout
const session = await stripe.checkout.sessions.create({
line_items: items, mode: 'payment'
})
// Save to your database
const [order] = await sql`
INSERT INTO orders (session_id, total)
VALUES ${session.id}, ${total} RETURNING *
`
// Queue fulfillment job
await ctx.queue.jobs.send({ type: 'fulfill', orderId: order.id })
return ctx.res.json({ url: session.url })
}) Built-in analytics, logs, and performance monitoring. Understand your API's behavior without third-party tools.
Stream logs from your edge functions in real-time. Debug production issues instantly.
api.post('/orders', async (ctx) => {
// Logs appear in real-time
console.log('Processing order',
ctx.req.body)
try {
const result = await ctx.db.main
.query('INSERT ...')
console.log('Order created',
result.insertId)
return ctx.res.json({ result })
} catch (err) {
// Errors auto-captured
console.error('Failed:', err)
throw err
}
}) Track request performance, latency, and errors. Understand how your API performs globally.
Stream logs, check metrics, and debug errors—all from the CLI
# Tail logs in real-time
$ stackdeploy logs --tail
# Show recent errors
$ stackdeploy errors --last 1h
# Performance summary
$ stackdeploy metrics Automatic error capture with stack traces. Debug issues without external services.
View logs, metrics, and errors together in one unified dashboard. Everything you need to monitor and debug your applications.
Stack Deploy combines the best of serverless platforms with complete backend infrastructure built in.
| Feature | Stack Deploy | AWS Lambda | Traditional Server | Vercel Functions |
|---|---|---|---|---|
| Framework model | Import primitives | Manual SDK | N/A | Separate services |
| Infrastructure from code | ||||
| Learning curve | Just TypeScript | Weeks to months | Weeks to months | Days |
| Setup complexity | Zero config | SAM/CDK/Terraform | Docker/K8s | vercel.json |
| Billing complexity | One simple bill | 15+ line items | Custom pricing | Per-seat + usage |
| Time to first deploy | <5 minutes | 2-4 hours | 1-2 days | 30 minutes |
| Global latency | <50ms worldwide | 100-300ms | 200-500ms | 50-150ms |
| Cold starts | 0ms (isolates) | 50-200ms | N/A | 50-250ms |
| Built-in infrastructure | KV, Queue, DB, Realtime | Separate services | Manual setup | Postgres, Blob, KV |
| Bring your own services | Any npm package | Yes | Yes | Limited |
| Vendor lock-in | Portable TypeScript | AWS-specific | None | Platform APIs |
| DevOps required | None | Heavy | Very Heavy | Minimal |
| Built-in logs & metrics | Real-time streaming | CloudWatch | Manual setup | Basic logs |
| Error tracking | Built-in | CloudWatch | Third-party | Limited |
| Observability | Included | Separate services | Manual setup | Limited |
Stop fighting infrastructure. Start shipping features.
Join the waitlist for the backend platform built for TypeScript developers. Everything you need—databases, queues, storage—built into the platform. Deploy to the edge in minutes.