Quickstart
Connect an agent, or sign in yourself, then build, run, deploy and share.
Before building, a coding agent should fetch llms-full.txt: every page of this site as one Markdown file, so it need not read the pages one by one.
The fastest start is the setup prompt: copy it into your coding agent, and it installs wirl, signs you in and deploys a starter app.
Connect an agent#
If your agent speaks MCP over HTTP, run this once, no install and nothing to download:
claude mcp add --transport http wirl https://app.wirl.dev/mcp
claude mcp add only saves the server's configuration. Then sign in: run /mcp inside Claude Code and follow the steps in the browser, or run claude mcp login wirl in a terminal.
If your agent only supports local MCP servers, run this instead. npx fetches wirl's MCP server from npm the first time, so there is nothing to install beyond Node 20 or later:
claude mcp add wirl -- npx -y @wirl/mcp
The local server signs in the first time a wirl tool needs it: the agent calls wirl_login, which returns a link and a code, and the agent shows both to the person. The person approves the code in the browser, and the agent's next wirl tool call works. A machine already signed in with npx wirl login skips this.
With no agent at all, sign in from the terminal. npx fetches the CLI from npm the first time, so there is nothing to install beyond Node 22.13 or later (in a terminal, npm first asks "Ok to proceed? (y)": answer y):
npx wirl login
It prints a link and a short code. Approve the code in the browser and the terminal is signed in: there is nothing to copy back. From here on this site writes a command as wirl <command>, for short: run it as npx wirl <command>, or run npm install -g wirl once and drop the npx. If your npm registry does not carry wirl, or to run exactly the build this control plane serves, install from the control plane instead: npm install -g https://app.wirl.dev/cli/wirl.tgz for the CLI (then run plain wirl), and npx -y https://app.wirl.dev/cli/wirl-mcp.tgz for the MCP server. Installing the CLI says how the CLI and the control plane are versioned.
Build something#
Scaffold a server-backed app:
wirl init my-tool --server
This writes a wirl.json, a working server.mjs, and migrations/0001_init.sql, which makes the table it keeps its notes in. Run it locally:
cd my-tool
wirl dev
wirl dev runs the module under Node, signed in as a stub user, after applying migrations/0001_init.sql to the local database, as a deploy applies it to the live one. The local database enforces D1's limits, and a call to a host the app has not declared is refused, as it is deployed. Node's built-ins and the npm packages you have installed work in both places: see The contract.
Deploy it#
wirl deploy
This builds, scans and deploys the directory, creating the app if it is new, and prints its URL. A new app starts visible to everyone in the org when the org has a verified company email domain. In any other org, including a personal one or one made with wirl orgs create, it starts private: only you, the organisation's owners and admins, and the people you share it with can open it.
Share it#
wirl share dana@acme.test
That person can now open the app. Add --role editor if they should be able to deploy it too.
What you see#
Anyone who signs in at app.wirl.dev sees a hub listing the apps they can open. Each deployed app also gets its own address on wirl.run — for example https://acme--churn-dashboard.wirl.run — which is the link you actually share.
Need it to run itself on a timer? See Schedules. Need it to wait for a person, try again tomorrow or keep working for an hour? See Flows. Need Slack, Stripe or GitHub to reach it? See Public paths.