---
name: azion-desenvolva-com-hono
description: >-
  Crie um projeto Hono com a Azion CLI, execute-o localmente e faça o deploy dele em um domínio da Azion.
---

# Desenvolva com Hono

Use a [Azion CLI](/pt-br/documentacao/devtools/cli/) para criar um projeto Hono a partir de um template, executá-lo no seu computador e fazer o deploy dele. Quando o deploy termina, o projeto roda na Azion e responde em um domínio da Azion.

A Azion executa um projeto Hono como uma [function](/pt-br/documentacao/plataforma/functions/). O seletor do `azion init` oferece Hono como ponto de partida, e o build do projeto usa o preset `typescript`. O deploy cria uma function, uma instância da function e uma regra que executa a function em cada requisição. Ele não cria nenhum bucket de storage. Para os outros frameworks dos quais a Azion faz o build, consulte [Compatibilidade com web frameworks](/pt-br/documentacao/devtools/runtime/frameworks/compatibilidade-frameworks/).

---

## Pré-requisitos

- Uma conta da Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- A Azion CLI instalada e com login feito. Para configurá-la, consulte [Primeiros passos com a Azion CLI](/pt-br/documentacao/devtools/cli/primeiros-passos/).
- Node.js 18 ou posterior e npm.
- Um terminal e um editor de código.

---

## Faça o deploy do projeto

A CLI cria o projeto, faz o build, executa o projeto localmente e cria os recursos que o servem na Azion.

Para criar o projeto, execute `azion init` com um nome:

```bash
azion init --name my-app
```

O comando faz as perguntas em ordem. Dê estas respostas:

1. Em `Choose a preset:`, selecione *Hono*. Você pode digitar `Hono` para filtrar a lista.
2. Em `Choose a template:`, selecione *Hono Boilerplate*. Este guia usa esse template.
3. Em `Do you want to install project dependencies?`, responda `Y`.
4. Em `Do you want to start a local development server?`, responda `n`.
5. Em `Do you want to deploy your project?`, responda `n`.

Para todas as perguntas e as flags que as pulam, consulte [Azion CLI init](/pt-br/documentacao/devtools/cli/init/). O comando imprime esta saída:

```text
? Choose a preset: Hono  [Use arrows to move, type to filter]
> Hono
? Choose a preset: Hono
? Choose a template:  [Use arrows to move, type to filter]
  Azion React Agent
> Hono Boilerplate
? Choose a template: Hono Boilerplate

Fetching selected template...

Template successfully fetched
Template successfully configured
🤔 Do you want to install project dependencies? This may be required to generate initial configuration file (Y/n) Y
Installing application dependencies

added 2 packages, and audited 3 packages in 1s

found 0 vulnerabilities
…
[Azion] [Build] › ℹ  info      Using preset: typescript
[Azion] [Build] › ✔  success   Build completed successfully with only azion.config
[Azion] [IaC] › ✔  success   Manifest generated successfully at <project-dir>/my-app/.edge/manifest.json
🤔 Do you want to start a local development server? (y/N) n
If you want to start a local development server later, run 'azion dev'
Make sure to change to the new working directory before running building or deploying your project
🤔 Do you want to deploy your project? (y/N) n
If you want to deploy your application later, run 'azion deploy'
Make sure to change to the new working directory before running building or deploying your project
Your application my-app was initialized successfully
```

O projeto fica na pasta `my-app`. O arquivo `azion.config.ts` dele define o preset `typescript` e `src/index.ts` como entrada. Para todas as configurações desse arquivo, consulte [azion.config.js](/pt-br/documentacao/devtools/cli/azion-config-js/). A entrada contém o app Hono:

```typescript
import { Hono } from 'hono'
const app = new Hono()

app.get('/', (c) => c.text('Hello Hono Azion!'))

app.fire()
```

O `package.json` do template não tem um script `dev` nem um script `build`. Use `azion dev` e `azion build` no lugar deles.

Para fazer o build do projeto, mude para a pasta do projeto e execute `azion build`:

```bash
cd my-app
azion build
```

O Azion Bundler faz o build da entrada com o preset `typescript` e grava um arquivo de function em `.edge/functions/index.js`. O build imprime um aviso sobre o padrão do handler e termina:

```text
Building your Application. This process may take a few minutes
Running build step command:

$ npx --yes  @aziontech/bundler@1.1.4 build --preset typescript
…
[Azion] [Build] › ℹ  info      Using preset: typescript
[Azion] [Pre-Build] › ℹ  info      Starting pre-build...
[Azion] [Pre-Build] › ℹ  info      Pre-build completed successfully
[Azion] [Build] › ℹ  info      Using entry point(s): src/index.ts
[Azion] [Build] › ⚠  warning   Unsupported handler pattern detected. Generating Service Worker wrapper as fallback.
[Azion] [Build] › ℹ  info      Consider updating your handler to use ES Modules pattern.
[Azion] [Build] › ℹ  info      Starting build...
[Azion] [Build] › ✔  success   Build completed successfully
[Azion] [Post-Build] › ℹ  info      Starting post-build...
[Azion] [Post-Build] › ✔  success   Post-build completed successfully
[Azion] [IaC] › ✔  success   Manifest generated successfully at <project-dir>/my-app/.edge/manifest.json
Your Application was built successfully
```

Para executar o projeto no seu computador, execute `azion dev` na pasta do projeto:

```bash
azion dev
```

O comando faz o build do projeto novamente e serve a function na porta `3333`:

```text
…
[Azion] [Build] › ℹ  info      Using preset: typescript
[Azion] [Pre-Build] › ℹ  info      Starting pre-build...
[Azion] [Pre-Build] › ℹ  info      Pre-build completed successfully
[Azion] [Build] › ℹ  info      Using entry point(s): src/index.ts
[Azion] [Build] › ⚠  warning   Unsupported handler pattern detected. Generating Service Worker wrapper as fallback.
[Azion] [Build] › ℹ  info      Consider updating your handler to use ES Modules pattern.
[Azion] [Build] › ℹ  info      Starting build...
[Azion] [Build] › ✔  success   Build completed successfully
[Azion] [Post-Build] › ℹ  info      Starting post-build...
[Azion] [Post-Build] › ✔  success   Post-build completed successfully
[Azion] [Server] › ✔  success   Function running on port 0.0.0.0:3333, url: http://localhost:3333
[Azion] [Server] › ℹ  info      Initial scan complete. Ready for changes.
```

Em um segundo terminal, faça uma requisição ao servidor local:

```bash
curl -i http://localhost:3333/
```

A function retorna o texto da rota Hono:

```text
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
Date: Thu, 01 Jan 2026 12:00:00 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Transfer-Encoding: chunked

Hello Hono Azion!
```

O servidor continua em execução até você interrompê-lo. Para as flags do comando, consulte [Azion CLI dev](/pt-br/documentacao/devtools/cli/dev-comando/).

Para fazer o deploy do projeto, execute `azion deploy` na pasta do projeto:

```bash
azion deploy
```

A CLI envia o projeto e abre uma página do Console onde você pode acompanhar o deploy. Se o navegador não abrir, use a URL dessa página, que a CLI também imprime. No final, a CLI imprime a URL do domínio do projeto:

```text
Running deploy command
Uploading source files

Upload completed successfully!
Please visit https://console.azion.com/create/deploy/00000000-0000-0000-0000-000000000001 in case it did not open automatically, to follow up the full deploy process
Your Application was deployed successfully

To visualize your application access the Domain: https://xxxxxxxxxx.map.azionedge.net
Your application is being deployed to all Azion Locations and it might take a few minutes.
```

O deploy cria uma function e uma instância da function. Ele também cria uma [application](/pt-br/documentacao/plataforma/applications/) com uma regra chamada `Execute Function`, que executa a function em cada requisição, e um workload que serve a application no domínio. A saída não lista esses recursos; o arquivo `azion/azion.json` na pasta do projeto registra os IDs deles. Para as flags do comando, consulte [Azion CLI deploy](/pt-br/documentacao/devtools/cli/deploy/).

---

## Verifique o projeto

No final do deploy, o `azion deploy` imprime a URL do domínio da Azion do projeto, no formato `https://xxxxxxxxxx.map.azionedge.net`. Faça uma requisição a essa URL, com o seu domínio no lugar de `<your-domain>`:

```bash
curl -i https://<your-domain>/
```

Depois que o deploy chega à localidade que responde à sua requisição, a function retorna a rota Hono:

```text
HTTP/2 200
date: Thu, 01 Jan 2026 12:15:00 GMT
content-type: text/plain;charset=UTF-8
x-azion-request-id: 0123456789abcdef0123456789abcdef
alt-svc: h3=":443"; ma=86400

Hello Hono Azion!
```

O primeiro deploy pode levar vários minutos para responder a partir de todas as localidades. Até que uma localidade receba o projeto, o domínio responde com uma página `404` que diz `There's nothing here yet`, e essa página pode voltar por um tempo depois da primeira resposta com sucesso. Se você receber essa página, aguarde e solicite a URL novamente.

A function responde em todos os caminhos. Um caminho que o app Hono não define retorna o `404 Not Found` em texto simples do Hono, e não a página `There's nothing here yet`.

---

## Próximos passos

- [Compatibilidade com frameworks](/pt-br/documentacao/devtools/runtime/frameworks/compatibilidade-frameworks.md): Veja de quais frameworks e presets a Azion faz o build.
- [Azion CLI deploy](/pt-br/documentacao/devtools/cli/deploy.md): Leia a saída do deploy e as flags que mudam um deploy.
- [Functions](/pt-br/documentacao/plataforma/functions.md): Entenda como funciona a function que executa o projeto Hono.
- [azion.config.js](/pt-br/documentacao/devtools/cli/azion-config-js.md): Altere a function, as regras e o workload do projeto Hono.
