wispwisp

Introduction

What wisp is, what it isn't, and the guarantee it enforces on every deploy.

wisp is a TypeScript backend framework that compiles your code to AWS infrastructure. You write Api, Store, Queue, Schedule, Bucket, and Workflow declarations in plain TypeScript; wisp deploy reads them statically and synthesizes CloudFormation — one Lambda function per route or event handler, a least-privilege IAM role derived from exactly what that handler touches, and nothing else.

The invariant

Your backend costs $0.00 when nobody is using it. This isn't a tip or a best practice — it's enforced by the compiler. Before any deploy reaches your AWS account, wisp scans the synthesized template for anything that costs money while idle (an RDS instance, a NAT gateway, a load balancer, provisioned DynamoDB throughput) and blocks the deploy if it finds one. See the always-on denylist for the full rule table and how to override it when you really mean it.

What wisp is not

  • Not an ORM. Store is a thin, typed wrapper over DynamoDB's own access patterns — get, put, query, transactWrite — not a query builder.
  • Not multi-cloud. wisp targets AWS. The IR has a seam for other targets, but only the AWS emitter ships today.
  • Not a router. There is no request dispatcher at runtime. Routing is resolved at compile time: each route is its own Lambda, invoked directly by API Gateway.
  • Not a hidden abstraction. wisp synth writes the real CloudFormation template to .wisp/cloudformation.json. If you want to know exactly what's about to touch your AWS account, it's right there — readable JSON, not a black box.

Six primitives

Every wisp app is built from the same six building blocks:

Where to go next

  • New to wisp? Start with Getting Started — you'll have a route deployed to your own AWS account in a few minutes.
  • Want to understand how permissions work? IAM derivation explains why wisp never asks you to write an IAM policy by hand.
  • Building something bigger? examples/crud-api in the wisp repo exercises all six primitives together.

On this page