> ## 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.

# Deploy a Deno App or Bot

> Run Deno apps and bots on Square Cloud: add deno to package.json, start it with npx deno in START and the permissions you need, on the Node.js runtime.

Square Cloud runs Deno on the [Node.js runtime](/en/articles/getting-started-with-nodejs): you add Deno to your project as an npm package and start your app with `npx deno`.

## Before you begin

* Deno on your machine, from the [official Deno installer](https://docs.deno.com/runtime/getting_started/installation/), or the npm package (`npm install deno`).
* A Square Cloud account: [sign up](https://squarecloud.app/en/signup) with your email or GitHub.
* An active plan. See the [plans](https://squarecloud.app/en/pricing) and pick the one that fits your project.

## Configure Square Cloud

<Note>
  If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you.
</Note>

<Card title="Configuration file reference" icon="link" href="/en/getting-started/config-file">
  The `squarecloud.app` file tells Square Cloud how to run your application: its main file, memory, runtime version, name and, for a website, its subdomain.
</Card>

First, add the `deno` package to your project's `dependencies`, so that the `npx deno` command is available on Square Cloud. Don't add it to `devDependencies`: they are not installed in production.

```bash theme={"system"}
npm install deno
```

Then set `RUNTIME=nodejs` and start your app with Deno in the `START` field, with the permissions it needs. A complete configuration file for each kind of app:

<Tabs>
  <Tab title="Bot or worker">
    ```systemd squarecloud.app theme={"system"}
    RUNTIME=nodejs
    START=npx deno run --allow-net --allow-env main.ts
    MEMORY=256
    VERSION=recommended
    DISPLAY_NAME=My bot
    ```
  </Tab>

  <Tab title="Website or API">
    ```systemd squarecloud.app theme={"system"}
    RUNTIME=nodejs
    START=npx deno run --allow-net --allow-env main.ts
    MEMORY=512
    VERSION=recommended
    DISPLAY_NAME=My website
    SUBDOMAIN=mywebsite
    ```
  </Tab>
</Tabs>

Adjust the permissions (`--allow-net`, `--allow-env`, `--allow-read` and others) to what your app uses. If you use tasks defined in `deno.json`, start with `START=npx deno task start`.

## What Square Cloud runs

* `START` is executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters).
* If the app has no `node_modules` folder, Square Cloud runs `npm install --no-audit --no-fund` before starting it, which also installs `deno` and any npm modules listed in `package.json`. Packages in `devDependencies` are not installed, because the runtime sets `NODE_ENV=production`. When `node_modules` already exists, the install step is skipped.

### Port and host for websites and APIs

`Deno.serve()` listens on port 8000 by default and does not read the `PORT` environment variable. Pass the port and host yourself: Square Cloud sets `PORT` to `80`, and `0.0.0.0` accepts connections from outside the container.

```typescript main.ts theme={"system"}
Deno.serve(
  { port: Number(Deno.env.get("PORT") ?? 80), hostname: "0.0.0.0" },
  () => new Response("Hello, World!"),
);
```

Reading `PORT` needs `--allow-env`, and serving needs `--allow-net`, as in the `START` examples above.

## Prepare the project

### Required files

* [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP.
* Your entry file, for example `main.ts`.
* [`package.json`](/en/articles/how-to-create-your-package-json), which lists `deno` in `dependencies`. An upload without it fails with `INVALID_DEPENDENCY`.
* Optionally, a `deno.json` or `deno.jsonc` for tasks, imports and other Deno settings.

<Warning>The configuration file (`squarecloud.app`) must be located at the root of the zip file. Otherwise, Square Cloud will not be able to find it during deploy.</Warning>

### What to leave out

* `node_modules`: Square Cloud removes this folder from your upload and installs the dependencies from `package.json` on the first start.
* `deno_dir` or `.cache/deno`: the Deno cache directory, which Deno fills again on the server.
* Lockfiles: the CLI and the VS Code extension leave `package-lock.json`, `yarn.lock` and `pnpm-lock.yaml` out by default. When you need the exact versions of your `package-lock.json`, re-include it with `!package-lock.json` in your [`squarecloud.ignore`](/en/getting-started/squarecloud-ignore).

## Troubleshooting

<AccordionGroup>
  <Accordion title="PermissionDenied: Requires net or env access" icon="lock" iconType="solid">
    Deno blocks network and environment access unless you allow it. Add the flag named in the error, such as `--allow-net` or `--allow-env`, to your `START` command.
  </Accordion>

  <Accordion title="Insufficient memory" icon="memory" iconType="solid">
    The minimum amount of RAM required to host a bot is 256MB and for
    a site/API it is 512MB. However, depending on the size and complexity of
    your application, it may be advisable to allocate a larger amount of RAM to
    avoid your application running out of memory and crashing.
  </Accordion>
</AccordionGroup>

For other problems, see [Troubleshooting](/en/platform/troubleshooting).

## Deploy

### Via dashboard

<Steps>
  <Step title="Access the Upload Page">
    Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file.
  </Step>

  <Step title="Configure Your Environment">
    After uploading your zip, you will need to configure the name, main file or runtime environment and other settings for your project.\
    If you are uploading a web project, make sure to select "Web Publication" and set a subdomain to your project.
  </Step>

  <Step title="Deploy Your Project">
    Finally, click on the "Deploy" button to host your project on Square Cloud.\
    After deployment, you can monitor your project's status and logs from the dashboard.

    <Frame>
      <img src="https://cdn.squarecloud.app/docs/articles/dashboard/uploading.gif" alt="Uploading application to Square Cloud" style={{ borderRadius: "0.2rem" }} />
    </Frame>
  </Step>

  <Step title="Confirm Your App Is Live">
    Your first deploy usually takes less than a minute. In the [dashboard](https://squarecloud.app/en/dashboard), wait for your application status to show as running and check the logs for any startup errors.\
    If you deployed a website or API, open `https://<your-subdomain>.squareweb.app` in your browser: you should see your application responding. If you deployed a bot, send it a command to confirm it is online.
    <Tip>App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes.</Tip>
  </Step>
</Steps>

### Via CLI

To use this method, your project needs a configuration file named `squarecloud.app` at its root. It tells Square Cloud how to run your application.

<Card title="Configuration file guide" icon="link" href="/en/getting-started/config-file">
  Learn how to create the `squarecloud.app` configuration file that defines your application's environment.
</Card>

<Steps>
  <Step title="Install the CLI">
    Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it:

    <CodeGroup>
      ```bash macOS, Linux, and WSL theme={"system"}
      curl -fsSL https://cli.squarecloud.app/install | bash
      ```

      ```bash Windows with npm theme={"system"}
      npm install -g @squarecloud/cli@latest
      ```
    </CodeGroup>
  </Step>

  <Step title="Log In">
    Run the command below. It opens your browser: approve the login there and the CLI is ready. There is no API key to copy. For scripts and CI, see [CLI authentication](/en/cli-reference/authentication).

    ```bash theme={"system"}
    squarecloud auth login
    ```
  </Step>

  <Step title="Upload Your Project">
    From your project folder, run the command below. The CLI zips the current folder, leaving out what [`squarecloud.ignore`](/en/getting-started/squarecloud-ignore) lists, and uploads it:

    ```bash theme={"system"}
    squarecloud upload
    ```

    To upload a zip you created yourself, pass it with `--file`:

    ```bash theme={"system"}
    squarecloud upload --file <path/to/zip>
    ```
  </Step>

  <Step title="Confirm Your App Is Live">
    Your first deploy usually takes less than a minute. Check your application status and logs directly from the terminal:

    ```bash theme={"system"}
    squarecloud app status
    squarecloud app logs
    ```

    If you deployed a website or API, open `https://<your-subdomain>.squareweb.app` in your browser: you should see your application responding. If you deployed a bot, send it a command to confirm it is online.
    <Tip>App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes.</Tip>
  </Step>
</Steps>

## Next steps

<CardGroup cols={3}>
  <Card title="Environment variables" icon="key" href="/en/platform/environment-variables">
    Keep secrets and settings out of your code and read them at runtime.
  </Card>

  <Card title="Custom domain" icon="globe" href="https://help.squarecloud.app/en-us/article/how-to-set-up-your-own-domain-cnamedns-1fzbrgh/">
    Serve your app on your own domain, on the Standard plan and above.
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/en/platform/troubleshooting">
    Fix an app that does not start or a site that does not respond.
  </Card>
</CardGroup>

## Contact us

If you continue facing **technical difficulties**, our **specialized support team** is available to assist you. [**Contact us**](https://squarecloud.app/en/support) and we'll be happy to help you resolve any issue: support quality is a big part of why developers rate Square Cloud [**4.9/5 across 402 reviews**](https://www.trustpilot.com/review/squarecloud.app) on Google and Trustpilot.


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