# How to deploy a Hono app.

URL: https://antideploy.com/blog/how-to-deploy-a-hono-app

A Hono app runs on Antideploy as a Node server. If it was written for Cloudflare Workers, it needs one small adapter.

## At a glance

- **Hono detected**: From your package.json
- **A Node server**: Through @hono/node-server
- **PORT**: Read it and listen on 0.0.0.0
- **From Workers**: One adapter, one start script

Published 7 October 2026. Facts checked 7 October 2026. 2 min read.

## The short answer

To deploy a Hono app, give your coding agent the sentence below. Antideploy detects Hono in your `package.json` and runs your `start` script. Hono itself does not listen on a port, so your project needs a Node server around it, usually `@hono/node-server`, and a `start` script that runs it. The server must read the `PORT` variable.

> **Say this to your coding agent**
>
> Set this project up to deploy on Antideploy. Fetch https://antideploy.com/agent.md and follow it.

## What Antideploy detects

- **Hono.** Detected from the `hono` dependency, like Express, Fastify, Koa, NestJS and hapi.
- **The start command.** A `Procfile` `web:` line wins. Otherwise it runs your `start` script with `npm run start`.
- **The port.** It starts your app with `PORT` set.
- **Earlier hosts.** If your project has a `wrangler.toml`, Antideploy notes that it was set up for Cloudflare before. That file is ignored.

## A Hono server for Node

**src/index.ts**

```
import { serve } from "@hono/node-server";
import { Hono } from "hono";

const app = new Hono();

app.get("/", (c) => c.text("Hello"));

serve({
  fetch: app.fetch,
  port: Number(process.env.PORT) || 3000,
  hostname: "0.0.0.0",
});
```

**package.json**

```
{
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js"
  },
  "dependencies": {
    "@hono/node-server": "latest",
    "hono": "latest"
  }
}
```

Replace `latest` with the versions you use. If you write TypeScript, compile it in the `build` script and run the compiled file in `start`. A start script that needs a tool kept only in `devDependencies`, such as `tsx`, can fail, because development dependencies are removed from the image after the build.

## Moving from Cloudflare Workers

A Hono app written for Workers usually ends with `export default app`. That works on Workers, which supply the server. It does not start a server on its own. To run it on Antideploy, keep the app as it is, add the Node adapter above, and add a `start` script. Code that uses Workers features, such as D1 or KV bindings, needs a replacement, for example Postgres through `DATABASE_URL`.

## Step by step

### 1. Add the adapter and the start script

Install `@hono/node-server`, add the `serve` call and a `start` script.

### 2. Paste the sentence and approve one link

Your agent creates the app, and a database if your code needs one.

### 3. Deploy and open the link

Antideploy installs, builds, starts your script and checks that the app answers. Your agent tells you the address.

## Here's where it stops.

A platform that only tells you what it is good at is one you find the edges of in production. These are the ones to know before your first deploy.

### Apps sleep when idle

On every plan, an app nobody is using goes to sleep and the next visit wakes it. The first request took 2.9 to 13.9 seconds in our measurements, depending on the stack. There are no always-on workers, so use a cron job or a webhook for background work.

### One instance, no previews

Each app is one instance with 1 shared vCPU and 1 GB of memory, and a Java app gets 1 dedicated vCPU and 2 GB. There are no preview deployments and no per-branch URLs.

### The disk forgets

Anything written to local disk is gone on the next deploy. Apps that speak S3 get a bucket instead.

## Hono questions, answered.

Anything else? Write to us and a person answers.

[support@antideploy.com](mailto:support@antideploy.com)

### Does Hono work with WebSockets?

A Node server supports them through Hono's Node WebSocket helper. Each app is one long-running process, and Antideploy sets no time limit of its own on a connection.

### Can I keep using Cloudflare bindings like KV or D1?

No. Those exist only on Workers. Use Postgres through `DATABASE_URL` and a bucket for files.

### What does it cost?

A Hono server counts as one live app. The Free plan includes 1 live app with a server and 1 Postgres database.

### Why does my deploy say it cannot tell how to run the app?

There is no `start` script and no Procfile. Add a `start` script that runs your server.

## More guides, and the platform.

Each platform page covers one part of Antideploy: what it does, where it stops and the questions people ask. [See the whole platform](https://antideploy.com/platform), or [all the guides](https://antideploy.com/blog).

- [How to deploy an Express API with a database](https://antideploy.com/blog/how-to-deploy-an-express-api-with-a-database): The start script, the PORT variable, DATABASE_URL, migrations, and the failures to avoid.
- [How to deploy a Next.js app with a backend and database](https://antideploy.com/blog/how-to-deploy-a-nextjs-app-with-a-backend-and-database): API routes, Postgres and Prisma. What runs, how migrations work, and why builds fail on environment variables.
- [Your app built successfully but never started listening on its port](https://antideploy.com/blog/your-app-built-successfully-but-never-started-listening-on-its-port): The app built but never answered on its port. Read PORT, listen on 0.0.0.0 and check the logs.

- [Hosting](https://antideploy.com/platform/hosting)
- [Environment variables](https://antideploy.com/platform/environment-variables)
- [Deployments](https://antideploy.com/platform/deployments)
- [Database](https://antideploy.com/platform/database)

Facts on this page were checked against the live platform on 7 October 2026.

## Deploy something. Start with one sentence.

Paste one sentence into your coding agent, click Approve once, and get a live link. No card, no trial clock.

To set this up, give your coding agent this sentence:

```text
Set this project up to deploy on Antideploy. Fetch https://antideploy.com/agent.md and follow it.
```
