> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sondercloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload & Deploy

> Criando uma aplicação a partir de um arquivo .zip

`apps.upload()` cria uma aplicação do zero a partir de um `.zip` de código. É o principal ponto de entrada para colocar uma aplicação nova no ar via SDK.

```ts theme={null}
upload(zipFile: FileInput, options?: UploadAppOptions, fileName?: string): Promise<UploadAppResponse>
```

## Exemplo completo

```ts theme={null}
import { readFile } from 'node:fs/promises';

const zipBuffer = await readFile('./meu-app.zip');

const result = await sonder.apps.upload(
  zipBuffer,
  {
    appName: 'minha-api',
    language: 'node',
    command: 'node index.js',
    memory: 512,
    domain: 'minha-api',
  },
  'meu-app.zip',
);

console.log(result.appId, result.status);
```

## Parâmetro `zipFile`

**zipFile** `FileInput` *required*

Conteúdo do `.zip` a ser enviado. Aceita `Buffer`, `Blob`, `ArrayBuffer` ou `Uint8Array`.

```ts Buffer (Node.js) theme={null}
import { readFile } from 'node:fs/promises';
const zipBuffer = await readFile('./meu-app.zip');
await sonder.apps.upload(zipBuffer);
```

```ts Blob (browser / Node 20+) theme={null}
const blob = new Blob([bytes], { type: 'application/zip' });
await sonder.apps.upload(blob);
```

```ts input[type=file] theme={null}
const file = inputElement.files[0]; // File estende Blob
await sonder.apps.upload(file, {}, file.name);
```

## Parâmetro `options`

**appName** `string`

Nome de exibição da aplicação.

**language** `string`

Linguagem/runtime da aplicação (ex: `node`, `python`).

**command** `string`

Comando de start customizado, sobrescrevendo o padrão detectado.

**memory** `string | number`

Limite de memória em MB.

**domain** `string`

Subdomínio desejado para a aplicação. Depois de criada, esse subdomínio pode ser consultado e ter um domínio customizado apontado para ele — veja [Domínios](https://docs.sondercloud.app/sdk/aplicacoes/dominios.md).

Todos os campos de `options` são opcionais e omitidos da requisição quando não informados — o SDK só anexa ao `FormData` os campos presentes.

## Parâmetro `fileName`

**fileName** `string` (default: app.zip)

Nome do arquivo enviado no campo `file` do `multipart/form-data`.

## Resposta — `UploadAppResponse`

| Campo | Tipo | Descrição |
| - | - | - |
| `appId` | `string` | ID (UUID) da aplicação criada. |
| `name` | `string` | Nome da aplicação. |
| `type` | `string` | Tipo da aplicação. |
| `domain` | `string?` | Domínio atribuído, se houver. |
| `language` | `string` | Linguagem/runtime detectada ou informada. |
| `imageTag` | `string` | Tag da imagem gerada para o build. |
| `containerName` | `string` | Nome do container criado. |
| `buildLogPath` | `string` | Caminho do log de build. |
| `runLogPath` | `string` | Caminho do log de execução. |
| `memoryMb` | `number` | Memória alocada, em MB. |
| `status` | `string` | Status inicial da aplicação após o upload. |

> [!WARNING]
>
> O upload é enviado como `multipart/form-data`. Não defina o header `Content-Type` manualmente ao usar `fetch` customizado — o boundary precisa ser gerado pelo runtime.

> **[Substituir código de uma app existente](https://docs.sondercloud.app/sdk/aplicacoes/commit-backup.md)**
>
> Para reimplantar código em uma aplicação já criada, use `apps.commit()` em vez de `apps.upload()`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.