How to Use AwaitIO: The Beginner's Guide

CodexFuse Team · 2026-11-03T18:51:12.274Z · 13 min read min read

What Is AwaitIO, Exactly?

Learning how to use AwaitIO starts with a plain-English definition: AwaitIO is a self-hosted back-office builder for TypeScript, and this AwaitIO tutorial takes you from zero to a running admin screen. You write a plain async function, and every await io.input.text() in it renders a real form in the browser and pauses the function until someone answers. When the function finishes, its return value is shown as the result. No frontend code, no database, no hosted service — one Node process serves the UI and runs your actions.

The maker's own one-line pitch says it best: "Write a TypeScript function, get an admin screen." The Product Hunt listing (published October 30, 2026, updated November 2) describes it as "async TypeScript functions turned into internal tools," built so a small team can get a back office running in under five minutes. AwaitIO was written from the ground up by Petr Homoky, who says 15 years of building systems taught him that every product eventually needs a back office — his inspiration was Interval, the internal-tools startup that shut down in 2023.

One clarification up front, because the name sits in a noisy neighborhood: AwaitIO is a product, not the JavaScript language feature. The thousands of "async/await in TypeScript" tutorials teach the await keyword itself; this guide covers the AwaitIO back-office builder only. That distinction made, nothing else on the name collides.

If your plan is to let an AI coding assistant work inside your back office, keep CodexFuse's Claude Code beginner guide open in another tab — AwaitIO's roadmap includes an MCP server so agents can work only through actions you wrote and reviewed, and that guide covers the agent side of the equation.

How AwaitIO Turns a Function into an Admin Screen

The core trick is the input-form lesson: an AwaitIO action is an ordinary async function whose await points become UI. When execution reaches await io.input.text('Your name'), the function genuinely suspends — the browser shows a text field labeled "Your name," the person types an answer and clicks through, and the function resumes with that value. The handler from the quickstart docs shows the whole pattern in six lines: ask for a name, return Hello, ${name}!, and the greeting appears as the action's result.

This is what makes the "five-minute back office" claim concrete. A refund flow is just three awaits in sequence: ask which order, ask why the refund is that amount, then write the result. The docs' own example is a greetAction — "Asks for a name and greets back" — and the maker's refund example follows the identical shape with real logic between the prompts. You call your database, ORM, and services directly inside the handler; there is nothing to wire up.

When one step needs several answers at once, you do not chain awaits — you group them. io.group({}) asks for several things on a single page, like a plan and a note together. The Product Hunt post gives exactly that example: "One step can also ask for several things at once, say a plan and a note on the same page." So the mental model is simple: one await equals one screen, one group equals one multi-field screen.

The AwaitIO Quickstart: Your First Action in Six Steps

The AwaitIO quickstart is a short, concrete arc: install four packages, generate a session secret, create the app, write one action, start the server, and create your account. Here is each step, verified against the quickstart docs (updated October 26, 2026).

  1. Install the packages. Run npm install awaitio @awaitio/theme-default @awaitio/input-text zod. The four pieces have distinct jobs: awaitio is the server, action runtime, and UI; @awaitio/theme-default is the UI's look; @awaitio/input-text is the text field component; zod validates props, answers, and params. TypeScript projects also need npm install -D @types/react. Zod 4 works, or zod 3.25 and up via import { z } from 'zod/v4'.
  2. Generate a session secret. Run node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))" and put the output in a .env file as SESSION_SECRET=.... The docs are explicit: the secret never goes into the repository, and changing it logs everyone out.
  3. Create the app in app.ts: a new AwaitIO instance with a name, an actionsDirectory, the default theme, the session secret, a users list, and the components you installed. Note the users list lives in your code — "no sign-up and no user database."
  4. Write one action in actions/greetAction.ts using app.defineAction({ name: 'Greet', description: 'Asks for a name and greets back.', handler: async ({ io }) => { const name = await io.input.text('Your name'); return `Hello, ${name}!`; } }). The docs explain the mechanics: "The handler stops at await io.input.text() until someone answers in the browser, then goes on. What it returns is shown as the result."
  5. Start the server with npx tsx watch --env-file=.env server.ts, where server.ts calls void app.listen({ port: 3000 }). listen() loads every file in actionsDirectory and opens the port — Express-style, and deliberately so.
  6. Create your account. Open http://localhost:3000, click "Create new account," and register with an email, a name, and a password of at least 10 characters. The server prints a line holding an scrypt hash of your password — paste it into the users list in app.ts, save, and the server restarts with your login working. "The line holds only a hash of your password; the password itself is not stored anywhere."

Two gotchas the docs call out: the server binds to 127.0.0.1 only on first start (localhost, not your LAN), and monorepos must raise every package's zod to 3.25 or newer. Neither is a bug — both are stated in the quickstart — but beginners trip on the bind address when they expect the office to reach the server from another machine.

What Can You Put on a Screen? The Component Families

AwaitIO ships a catalog of ready-made components — the maker post says "20+ inputs, selects, tables, displays and a confirm" — and the npm registry (all packages at version 1.2.0) confirms the inventory. If a component you need is missing, it is "one React file," so the catalog is designed to grow with your app.

FamilyMembersWhat beginners reach for first
io.inputtext, textarea, number, boolean, email, url, date, datetimetext and email for the classic "who and where do we send it" pair; date and datetime return luxon DateTime objects
io.selectsingle, multiple, singleNative, tabletable select — "rows picked from a table" — for choosing records without building a picker UI
io.displaytable, metadata, image, heading, object, html, markdown, linktable and metadata ("label and value tiles") for showing what the action found
io.confirmconfirm()The "are you sure" gate before anything destructive — returns true or false
io.layout / io.groupbasic(), group({})group({}) for multi-field pages; basic() for a titled page with displays

Notice what the catalog is really saying: inputs collect, selects choose, displays report, and confirm gates. Most back-office actions are one display ("here is the current state"), one or two inputs ("what should change"), and one confirm ("are you sure"). Learn those three moves and you can build most internal tools.

How Folders Become Your Navigation

AwaitIO has no router to configure because the file system is the router. Every file inside actionsDirectory is one action, and "the file's path is the action's URL": actions/greetAction.ts is served at /actions/greet. Nest files in subfolders and the folders become the navigation — the maker post states it verbatim: "You can put actions into folders, which become the navigation, and give a folder its own page with its own layout."

This is the design decision that keeps a 50-action back office navigable. Organize by team or by domain — actions/support/refundOrder.ts, actions/warehouse/restockAlert.ts — and the UI grows a matching sidebar for free. The live demo at demo.awaitio.com shows the end state: a made-up store's back office that "starts as simple as the example above and grows from there: actions split into folders and subpages, and more and more complex actions."

Treat the actions directory like source code, because it is source code. Version it in Git alongside everything else — CodexFuse's Git beginner guide covers the workflow — and keep the repo itself on GitHub beginner guide with the same review discipline you give application code. An action that refunds orders deserves a code review exactly as much as the checkout page does.

The Self-Hosted Model: What "You Own It" Actually Means

AwaitIO's self-hosting is not a deployment option; it is the whole architecture — the AwaitIO self-hosted model in its purest form. The maker's summary is blunt: "One Node process serves the UI and runs your actions. Nothing is hosted by us." And again: "It runs on your own server and needs no database: install the package, initialize it, start your server. You own it, you run it." There is no AwaitIO cloud to sign up for, no sync service phoning home, and no telemetry — the homepage's privacy line reads "nothing sent anywhere: no hosted service, no telemetry."

Concretely, that means three things for a beginner. First, your data never leaves your machine: "The same Node process serves the UI, so there is nothing else to host." Second, authentication is local and boring in the best way — email and password login with scrypt hashes and signed cookies, where "runs" (action executions) are "visible only to the person who started them." Third, scaling is your server's problem, not a pricing tier's: "It's built so a small team never hits a limit: every feature, any number of actions."

The operational shape is a single long-lived Node process, which is exactly the workload containers were made for. If you have not containerized a Node app before, CodexFuse's Docker beginner guide walks through the pattern — one image, one process, your .env mounted in, port 3000 exposed behind your reverse proxy.

AwaitIO Pricing: Free for Up to 3 Users

AwaitIO pricing is refreshingly simple, and the maker states it in full on the Product Hunt post: "Up to 3 users it's free, commercial use included. Larger teams pay one flat monthly price for the same software. No telemetry." The unit of billing is people who log in to your back office — "The only thing that counts is how many people log in to your back office" — not actions, not executions, not features: "every feature, any number of actions" is included at every tier.

Two honest caveats. First, the flat monthly price for larger teams is stated as "one flat monthly price" with no amount published anywhere on the site or docs as of this writing — do not budget a number until the maker publishes one. Second, this is launch-era pricing (the product launched October 30, 2026), and the homepage adds that "AwaitIO is free for small teams, made possible by companies and people who sponsor it." Re-check the pricing page before you commit a team to it.

AwaitIO vs Retool: Should You Switch?

The comparison everyone reaches for is Retool, the hosted low-code internal-tools platform. The two products solve the same problem — "I need a back office and I don't want to build a frontend" — with opposite philosophies, and the table makes the trade-off visible.

DimensionAwaitIORetool (typical)
HostingSelf-hosted only: one Node process on your serverHosted cloud (self-hosted edition exists separately)
Building blocksAsync TypeScript functions; UI generated from awaitsDrag-and-drop components wired to queries
DatabaseNone needed — call your own DB/ORM directly in the handlerManaged integrations to your databases
TelemetryZero — "nothing sent anywhere"Standard SaaS telemetry of the hosted platform
LicenseSource-available: code is public, runs on your serversProprietary
Pricing unitPeople logging in (free to 3, flat price above)Per-user SaaS seats with tiered features

The license row deserves one careful sentence: AwaitIO is source-available, not open source in the MIT/Apache sense — "the code is public, and it runs on your own servers," while the npm packages carry a custom "SEE LICENSE IN LICENSE" declaration rather than a standard open-source license. Read the actual license text before embedding AwaitIO in anything with compliance requirements.

Choose AwaitIO when your team already thinks in TypeScript, you want zero infrastructure beyond one Node process, and "no telemetry" is a requirement rather than a preference. Choose the drag-and-drop platform when your back-office builders are not programmers — AwaitIO's entire UI is a side effect of code, which is its power and its gate.

What AwaitIO Can't Do Yet

Every early product has a "not yet" list, and AwaitIO's is short and public. The headline item is the MCP server: "Next on the roadmap: an MCP server, so AI agents work only through actions you wrote and reviewed." That is a roadmap line, not a shipped feature — today your agents cannot drive AwaitIO actions, and any tutorial claiming otherwise is ahead of the product.

Two smaller gaps worth knowing before you start. The docs never state a minimum Node.js version — the npm metadata's engines field is empty and the run command is npx tsx watch — so pin a current LTS yourself rather than guessing. And while the component catalog covers the common cases, anything exotic is "one React file" you write yourself; the theming system expects you to be comfortable dropping into React for custom UI.

None of this blocks the beginner arc. Install the four packages, write the greet action, click through it in the browser, then try the maker's own demo store at demo.awaitio.com (login [email protected] / demo) to see what a grown-up AwaitIO back office looks like. The distance between those two points is exactly what this guide taught: more actions, more folders, more awaits.

Sources

Every fact in this guide was verified against a page fetched for this article on November 3, 2026: the AwaitIO Product Hunt listing (published October 30, 2026, updated November 2 — maker post, tagline, pricing, self-hosting claims, MCP roadmap, demo credentials); the AwaitIO quickstart docs (updated October 26, 2026 — install command, session secret, app creation, the greet action, listen(), account creation); the AwaitIO docs intro (folders-as-navigation, io.group, single-process hosting); awaitio.com (privacy wording, sponsor-supported free tier); and the awaitio npm registry entry (component packages at v1.2.0, source-available license field). Pricing amounts beyond "one flat monthly price" are unpublished; no minimum Node.js version is stated anywhere.

Frequently Asked Questions

Is AwaitIO really free?

Up to 3 users, yes — free, commercial use included, every feature and any number of actions. Larger teams pay one flat monthly price for the same software. The maker has not published the amount, so treat the number as unknown until the pricing page states it.

Is AwaitIO open source?

Not in the MIT/Apache sense. It is source-available: the code is public and it runs entirely on your own servers, but the npm packages declare a custom license ("SEE LICENSE IN LICENSE") rather than a standard open-source license. Read the license text before adopting it.

Do I need a database to run AwaitIO?

No. One Node process serves the UI and runs your actions, and there is no AwaitIO-managed database at all. Your actions call your own database, ORM, or services directly from the handler — and the user list lives in your code, not in a user database.

How is AwaitIO different from TypeScript's async/await?

TypeScript's async/await is the language feature for pausing functions until promises settle; AwaitIO is a product that turns those pauses into a user interface. Every await io.input...() in an AwaitIO action renders a form in the browser. Same keyword, completely different thing.

Can my AI agents use AwaitIO actions?

Not yet. An MCP server that would let AI agents "work only through actions you wrote and reviewed" is next on the maker's public roadmap, with no ship date given. Until it lands, AwaitIO actions are driven by humans in the browser.

Featured on Twelve Tools Hunt for Tools Featured on LaunchBuff Launch Llama Tools Launch your MCP Top Web Development Companies in the US - OnToplist.com Designer Listings Listed on SeeWhatNewAI