Back offices
Look up and edit customers, orders and coupons without building an admin.
TypeScript
Each action is an async TypeScript function, like a route handler. Instead of reading a request, every await io asks a person in the browser and waits for the answer. There is no frontend to build and nothing else to host.

How it works
Every await io.input call shows a form to the person running the action and pauses your function until they answer. Then it simply goes on.
Orders
Every order placed in the stores.
Components
Each one is a call on io that shows a control and returns a typed value. Missing one? Write it.
What people build
Anything a person should run, fill in or approve, written as one async function next to the code it needs.
Look up and edit customers, orders and coupons without building an admin.
Give support the few safe buttons they need, each one checked in code.
Turn the migration you would run from a laptop into an action with inputs and a confirmation.
Ask for a month or a customer and return a table, straight from your database.
A handler is a plain function in your own process. Your Prisma client, services, utilities and environment variables work as they are.
A component is plain React in one file, with its props and the value it returns. Register it next to the built-in ones and await it like any io method.
Production, staging and local are separate servers with their own secrets and data. AwaitIO deploys with the rest of your app, and the header switches between them.
Email and password login with scrypt hashes and signed cookies, runs visible only to the person who started them, and nothing sent anywhere: no hosted service, no telemetry.
AwaitIO is free for small teams, made possible by companies and people who sponsor it.