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

# Commit e upload

> Envie uma nova aplicação para a Square Cloud ou faça commit de novos arquivos em uma aplicação existente.

## Enviando uma nova aplicação

`api.applications.create(file)` envia um zip e cria uma aplicação nova. O argumento `file` aceita tanto um caminho local quanto um `Buffer`.

```typescript theme={null}
import { SquareCloudAPI } from "@squarecloud/api";
import { join } from "node:path";

const api = new SquareCloudAPI(process.env.SQUARE_API_KEY!);

const result = await api.applications.create(join(__dirname, "minha-app.zip"));

console.log(result.id);   // ID da aplicação recém-criada
console.log(result.name); // nome de exibição
console.log(result.lang); // slug da linguagem (ex.: "javascript")
console.log(result.ram);  // RAM alocada em MB
```

O zip deve conter pelo menos:

* **Arquivo principal** — ponto de entrada da sua aplicação
* **Arquivo de dependências** — `package.json`, `requirements.txt`, etc.
* **`squarecloud.app`** — arquivo de configuração com nome, descrição, arquivo principal, versão, etc. Veja o [guia do arquivo de configuração](/pt-br/getting-started/config-file)

## Fazendo commit de arquivos em uma aplicação existente

`app.commit(file, fileName?)` envia arquivos para uma aplicação já implantada. Passe um zip para substituir vários arquivos de uma vez, ou um único arquivo para atualizar apenas ele.

| Parâmetro  | Tipo               | Descrição                                                                                                    |
| ---------- | ------------------ | ------------------------------------------------------------------------------------------------------------ |
| `file`     | `string \| Buffer` | Caminho local do arquivo ou conteúdo em `Buffer`                                                             |
| `fileName` | `string?`          | Nome anexado ao upload. `.zip` é extraído no servidor; qualquer outra extensão é gravada como arquivo único. |

<Tabs>
  <Tab title="Commit de um único arquivo (Buffer)">
    ```typescript theme={null}
    const content = Buffer.from("console.log('olá')\n");
    await app.commit(content, "index.js");
    ```
  </Tab>

  <Tab title="Commit de um zip do disco">
    ```typescript theme={null}
    import { readFile } from "node:fs/promises";

    const zip = await readFile("./dist.zip");
    await app.commit(zip, "dist.zip");
    ```
  </Tab>

  <Tab title="Commit de um arquivo por caminho">
    ```typescript theme={null}
    import { join } from "node:path";

    const filePath = join(__dirname, "index.js");
    await app.commit(filePath, "index.js");
    ```
  </Tab>
</Tabs>

<Warning>
  Na v3, `commit()` aceitava um terceiro argumento `restart`. **Na v4 esse terceiro parâmetro foi removido** — chame `app.restart()` manualmente após o commit, se precisar reiniciar.
</Warning>

```typescript theme={null}
await app.commit(zip, "dist.zip");
await app.restart();
```
