# Deploy a Bun App or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-bun Run Bun apps and bots on Square Cloud: add bun to package.json, start it with npx bun in START, and deploy on the Node.js runtime with automatic npm install. Square Cloud runs Bun on the [Node.js runtime](/en/articles/getting-started-with-nodejs): you add Bun to your project as an npm package and start your app with `npx bun`. ## Before you begin * Bun on your machine, from the [official Bun installer](https://bun.sh/), or the npm package (`npm install bun`). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. First, add the `bun` package to your project's `dependencies`, so that the `npx bun` command is available on Square Cloud. Don't add it to `devDependencies`: they are not installed in production. ```bash theme={"system"} npm install bun ``` Then set `RUNTIME=nodejs` and start your app with Bun in the `START` field. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} RUNTIME=nodejs START=npx bun index.ts MEMORY=256 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} RUNTIME=nodejs START=npx bun index.ts MEMORY=512 VERSION=recommended DISPLAY_NAME=My website SUBDOMAIN=mywebsite ``` To run a `package.json` script with Bun instead, use `START=npx bun run 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 `bun`. 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 Square Cloud sets the `PORT` environment variable to `80`. `Bun.serve()` reads `PORT` by itself and listens on all network interfaces (`0.0.0.0`) by default, so a plain server works: ```typescript index.ts theme={"system"} Bun.serve({ fetch() { return new Response("Hello, World!"); }, }); ``` ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * Your entry file, for example `index.ts`. * [`package.json`](/en/articles/how-to-create-your-package-json), which lists `bun` in `dependencies`. An upload without it fails with `INVALID_DEPENDENCY`. 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. ### 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. * Lockfiles: dependencies are installed with npm, so `bun.lock` is not used. The CLI and the VS Code extension also 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 `bun` is missing from the `dependencies` of your `package.json`, or it is in `devDependencies`. Run `npm install bun`, upload the new `package.json`, then delete the `node_modules` folder in the dashboard file manager so the next start installs it. 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. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a C# / .NET App or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-csharp Host C# and .NET apps and bots on Square Cloud: point MAIN to your .csproj, and Square Cloud restores packages and starts it with dotnet run on .NET 10. The .NET runtime runs C# bots, workers, APIs and websites on .NET 10. Square Cloud restores your NuGet packages, then builds and runs your project with `dotnet run`. ## Before you begin * The .NET SDK on your machine. If you don't have it, download it from the [official .NET website](https://dotnet.microsoft.com/en-us/download). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. Point `MAIN` to your project file. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=MyBot.csproj MEMORY=512 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=MyApi.csproj MEMORY=512 VERSION=recommended DISPLAY_NAME=My API SUBDOMAIN=my-api ``` ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud runs `dotnet restore` to restore the project dependencies, then `dotnet run --project MAIN` to compile and run the project specified in `MAIN`. If the `START` field is defined, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). ### Port and host for websites and APIs ASP.NET Core does not listen on port 80 by default, and `dotnet run` applies the URLs of `Properties/launchSettings.json`, which point to `localhost`. Set the address in `Program.cs` instead: Square Cloud sets the `PORT` environment variable to `80`, and `0.0.0.0` accepts connections from outside the container. ```csharp Program.cs theme={"system"} var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello, World!"); var port = Environment.GetEnvironmentVariable("PORT") ?? "80"; app.Run($"http://0.0.0.0:{port}"); ``` ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * Your project file (`.csproj`) and source code. If the `.csproj` file is inside a folder, keep the configuration file at the root of the zip and set `MAIN` to its path, for example `MAIN=folder/file.csproj`. The default command first runs `dotnet restore` at the root, which needs a project or solution file there; if the root has neither, set `START=dotnet run --project folder/file.csproj`. 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. ### What to leave out * `bin/` and `obj/`: build output that `dotnet run` creates again on the server. ## Troubleshooting The app listens on another port or only on `localhost`. Set the address with `app.Run($"http://0.0.0.0:{port}")` as shown in [Port and host](#port-and-host-for-websites-and-apis). `dotnet restore` found no project or solution file at the root of the ZIP. Move the `.csproj` to the root, or set `START=dotnet run --project folder/file.csproj`. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Deploy a Deno App or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-deno 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. 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: ```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 ``` ```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 ``` 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. 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. ### 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 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. 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. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Deploy an Elixir App, API or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-elixir Deploy an Elixir app, API or bot on Square Cloud: include mix.exs, and Square Cloud fetches dependencies with mix deps.get and starts it with mix run --no-halt. The Elixir runtime runs Mix projects: bots, workers, APIs and Phoenix websites. Square Cloud fetches your dependencies and compiles your project on the server. ## Before you begin * Elixir on your machine. If you don't have it, follow the [official Elixir installation guide](https://elixir-lang.org/install.html). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=mix.exs MEMORY=512 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=mix.exs MEMORY=1024 VERSION=recommended DISPLAY_NAME=My website SUBDOMAIN=mywebsite START=MIX_ENV=prod mix assets.deploy && MIX_ENV=prod mix phx.server ``` The website example starts a Phoenix app; the [Phoenix guide](/en/tutorials/website/phoenix) covers its assets and environment variables. ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud will execute `mix run --no-halt` to start the project. If the `START` field is defined, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * Before `START`, Square Cloud installs the `hex` and `rebar` tools locally and fetches project dependencies with `mix deps.get`. If one of these steps fails, the app does not start. * `MAIN` only tells Square Cloud that the project is written in Elixir: it must point to an existing `.ex` or `.exs` file (for example `mix.exs`), while `mix run --no-halt` runs your whole Mix project. ### Port and host for websites and APIs Square Cloud sets the `PORT` environment variable to `80` and `HOST` to `0.0.0.0`. Your web server must listen on that port and on all network interfaces. Phoenix does it in production with the `config/runtime.exs` it generates; with Plug or Bandit, read `System.get_env("PORT")` when you start the server. ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * `mix.exs`, required: an upload without it fails with `INVALID_DEPENDENCY`. * `mix.lock`, so the server fetches the same dependency versions as your machine. * Your source code, usually in `lib/` and `config/`. 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. ### What to leave out * `_build/`: files compiled for your machine. Square Cloud compiles the project on Linux. * `deps/`: `mix deps.get` fetches the dependencies again on the server. ## Framework guides ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Deploy a Go App, API or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-go Deploy Go apps, APIs and bots on Square Cloud: include go.mod and go.sum, set MAIN to main.go, and use START=go run . when package main spans several files. The Go runtime compiles and runs your Go module: bots, workers, APIs and websites. Square Cloud downloads your modules and builds the program on the server. ## Before you begin * Go on your machine. If you don't have it, download it from the [official Go website](https://go.dev/doc/install). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=main.go MEMORY=256 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=main.go MEMORY=512 VERSION=recommended DISPLAY_NAME=My API SUBDOMAIN=my-api ``` ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud will execute `go run MAIN` to compile and run the Go file specified in `MAIN`. If the `START` field is defined, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * `go run MAIN` compiles only the file set in `MAIN`. If your `main` package is split across several files, set `START=go run .`. * Square Cloud does not run `go mod tidy`: run it on your machine before uploading so that `go.mod` and `go.sum` list every dependency. `go run` downloads those modules when the app starts. ### Port and host for websites and APIs Square Cloud sets the `PORT` environment variable to `80`. Read it and listen on `":" + port`, which covers all network interfaces: ```go main.go theme={"system"} package main import ( "fmt" "log" "net/http" "os" ) func main() { // Square Cloud sets PORT=80. ":" + port listens on all network interfaces. port := os.Getenv("PORT") if port == "" { port = "80" } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) log.Fatal(http.ListenAndServe(":"+port, nil)) } ``` ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * `main.go`, or the file set in `MAIN`. * `go.mod`, or `go.work` for a workspace: an upload without either fails with `INVALID_DEPENDENCY`. * `go.sum`, required when your module has dependencies. 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. ### What to leave out * Compiled binaries (`.exe` files or the output of `go build`): Square Cloud builds the program itself. * `vendor/`, unless your build uses it on purpose: `go run` downloads the modules listed in `go.sum`. ## Troubleshooting `go.sum` is missing or out of date. Run `go mod tidy` on your machine and upload the updated `go.mod` and `go.sum`. `go run MAIN` compiles only one file. Set `START=go run .` to compile the whole `main` package. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a Static HTML/CSS Website Source: https://docs.squarecloud.app/en/articles/getting-started-with-html Host a static HTML, CSS and JavaScript website on Square Cloud: upload index.html with your assets, add a 404.html or vite.html fallback, and publish it. The static runtime serves HTML, CSS, JavaScript, images and other files straight from your ZIP, with a web server managed by Square Cloud. There is no process of yours to keep running, so it is the lightest way to publish a website. ## Before you begin * A text editor for your HTML and CSS files, such as [Visual Studio Code](https://code.visualstudio.com/). * 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. ## Static sites and server-rendered apps A **static site** is a set of files that is the same for every visitor: plain HTML pages, or the build output of a framework such as Vite, React, Vue, Angular, Astro or Gatsby. The static runtime serves those files as they are. A **server-rendered app** builds pages on each request, with server code such as Next.js, Nuxt, React Router or an API. It needs a process that keeps running, so it runs on a language runtime, such as the [Node.js runtime](/en/articles/getting-started-with-nodejs), with a `MAIN` file or a `START` command. If your framework can do both, a static build is the lighter choice. Each [framework guide](#framework-guides) shows which options it supports. ## Configure Square Cloud If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A `MAIN` that points to an HTML file selects the static runtime: ```systemd squarecloud.app theme={"system"} MAIN=index.html MEMORY=512 VERSION=recommended DISPLAY_NAME=My website SUBDOMAIN=mywebsite ``` 512 MB is the minimum memory for a website, and plenty for static files. ## How the static runtime serves files * The root of the ZIP is the root of your site: `about.html` is served at `/about.html`, and `blog/index.html` at `/blog/`. * `/` serves `vite.html` if it exists, otherwise `index.html`. * When a path does not match any file, the runtime serves `vite.html` if it exists. This keeps client-side routes of single-page apps working on refresh, whatever the framework: rename the `index.html` of the build to `vite.html`. * Without `vite.html`, unknown paths return your `404.html`, or a default 404 page if you don't have one. * Files are compressed on the fly, and your `squarecloud.app` file is never served. Every file in the ZIP is public. Don't upload source code, `.env` files or anything else you don't want visitors to download. ## Prepare the project Put your files at the root of the ZIP, next to `squarecloud.app`: * `index.html`, or `vite.html` for a single-page app. * Your CSS, JavaScript, images and fonts, in any folder structure. * `404.html`, optional: the page for paths that don't exist. For a framework build, zip the contents of the build output folder, not the folder itself. ## Framework guides Each guide shows the build command, the output folder and how to publish it on the static runtime. ## Troubleshooting The page says "Hi, I'm Square Shield": the runtime did not find `index.html` or `vite.html` at the root of the ZIP. You probably zipped the build folder itself instead of its contents: zip the files inside it. Your single-page app handles routes in the browser. Rename its `index.html` to `vite.html` so unknown paths load the app, and update `MAIN`. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a Java App or Bot (JAR) Source: https://docs.squarecloud.app/en/articles/getting-started-with-java Deploy a Java app or Discord bot on Square Cloud: build an executable JAR, set MAIN to the .jar file, and Square Cloud starts it with java -jar on JDK 25. The Java runtime runs executable JAR files on JDK 25: bots, workers, APIs and websites. You build the JAR on your machine, and Square Cloud starts it with `java -jar`. ## Before you begin * A Java Development Kit (JDK) on your machine. If you don't have one yet, you can download Eclipse Temurin from [Adoptium](https://adoptium.net). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. Point `MAIN` to your JAR. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=app.jar MEMORY=512 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=app.jar MEMORY=1024 VERSION=recommended DISPLAY_NAME=My API SUBDOMAIN=my-api ``` `MAIN` accepts up to 32 characters. For a longer path, replace it with `RUNTIME=java` and `START=java -jar `. ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud will execute `java -jar MAIN`, where the file specified in `MAIN` is the JAR file. If the `START` field is defined, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). ### Port and host for websites and APIs Square Cloud sets the `PORT` environment variable to `80`. Your server must listen on that port and on all network interfaces (`0.0.0.0`). With Spring Boot, set `server.port=${PORT:80}` in `application.properties`, as shown in the [Spring Boot guide](/en/tutorials/api/spring-boot). ## Prepare the project Square Cloud does not compile Java projects: build an executable JAR on your machine and upload it. * **Maven:** run `mvn package`; the JAR is written to `target/`. To bundle your dependencies into a single runnable JAR, use the Maven Shade or Assembly plugin and configure it to set `Main-Class`. * **Gradle:** run `./gradlew build` (or `gradle build`); the JAR is written to `build/libs/`. To bundle your dependencies, use the Shadow plugin (`./gradlew shadowJar`) or set `Main-Class` in the `jar` task's manifest. Check that the JAR starts with `java -jar your-app.jar` before uploading it. Compile it for Java 25 or earlier: the runtime cannot run classes built for a newer Java. ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * Your executable JAR, set in `MAIN`. Its `META-INF/MANIFEST.MF` goes **inside** the JAR, not as a separate file, and must declare the `Main-Class` of your application. 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. ### What to leave out * Your source code and build folders are optional: the JAR already contains the compiled application. ## Framework guides ## Troubleshooting The JAR has no `Main-Class` in its manifest, so `java -jar` cannot start it. Build an executable JAR as described in [Prepare the project](#prepare-the-project). The JAR was compiled for a newer Java than JDK 25. Build it for Java 25 or earlier. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a Node.js App, API or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-nodejs Deploy Node.js and TypeScript apps, APIs and Discord bots on Square Cloud: set MAIN and START, install dependencies from package.json and go live in minutes. The Node.js runtime runs JavaScript and TypeScript bots, APIs and server-rendered websites. Square Cloud installs your dependencies from `package.json` and starts your app with Node.js. ## Before you begin * Node.js and npm on your machine. If you don't have them, download them from the [official Node.js website](https://nodejs.org/). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=index.js MEMORY=256 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=index.js MEMORY=512 VERSION=recommended DISPLAY_NAME=My website SUBDOMAIN=mywebsite ``` `VERSION=recommended` runs the current LTS line of Node.js, and `VERSION=latest` the newest release. ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud runs `node MAIN`. When the app has 1024 MB of memory or more, it adds `--max_old_space_size=` (the Node.js heap limit, in MB). If the `START` field is defined, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * If the `START` field is not defined in the configuration file, Square Cloud runs `npx tsx MAIN`, which runs the TypeScript file specified in `MAIN` directly. `tsx` is installed together with your dependencies. If the `START` field is defined, the value in it will be 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. 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 Square Cloud sets the `PORT` environment variable to `80` and `HOST` to `0.0.0.0`. Your server must listen on that port and on all network interfaces, for example with Express: ```javascript theme={"system"} const port = Number(process.env.PORT) || 80; app.listen(port, '0.0.0.0'); ``` Next.js, Nuxt, React Router, Astro and SolidStart read `PORT` by themselves: their [framework guides](#framework-guides) say when there is nothing to change. ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * Your main file, for example `index.js` or `src/index.ts`. * [`package.json`](/en/articles/how-to-create-your-package-json), with your dependencies. An upload without it fails with `INVALID_DEPENDENCY`. 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. Square Cloud runs TypeScript natively with `tsx` (`npx tsx MAIN`), but compiling to JavaScript is still recommended for production: build it on your machine and point `MAIN` to the compiled file. ### 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. That keeps the upload small and builds the dependencies for the server's system. * Lockfiles (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`): the CLI and the VS Code extension leave them out by default, so npm installs the newest versions allowed by the ranges in `package.json`. When you need the exact versions of your lockfile, re-include it with `!package-lock.json` in your [`squarecloud.ignore`](/en/getting-started/squarecloud-ignore). ## Framework guides Single-page apps built with Vite, React, Vue or Preact can also run without Node.js, on the [static runtime](/en/articles/getting-started-with-html). ## Troubleshooting This error occurs when the file defined as "main" for your application in the configuration file does not exist, is written incorrectly, or the path is wrong. If your main file is inside a folder, for example, you must specify `folder/file.js`. The minimum amount of RAM required to host a bot is 256MB and for a site/API 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. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a PHP Website or API Source: https://docs.squarecloud.app/en/articles/getting-started-with-php Host a PHP website or API on Square Cloud: set MAIN to index.php, let Square Cloud install your Composer packages, and serve with the built-in server or Swoole. The PHP runtime serves PHP websites and APIs. It includes Composer, Node.js for asset builds, and the Swoole extension. ## Before you begin * PHP on your machine. If you don't have it, download it from the [official PHP website](https://www.php.net/). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for a website or API: ```systemd squarecloud.app theme={"system"} MAIN=index.php MEMORY=512 VERSION=recommended DISPLAY_NAME=My website SUBDOMAIN=mywebsite ``` ## What Square Cloud runs * If the `START` field is not defined in the configuration file, a local PHP server will be started with the command `php -S 0.0.0.0:80`, with the root of your ZIP as the document root. If the `START` field is defined, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * If your project has a `composer.json` at its root, Square Cloud runs `composer install` before every start, so you don't need it in `START`. It uses the `composer.phar` from your ZIP when there is one, and the Composer included in the runtime otherwise. Upload `composer.lock` too, so the server installs the same versions you tested. ### Port and host The default command already listens on port 80 and all network interfaces (`0.0.0.0`). When you write your own `START`, keep both: Square Cloud sets the `PORT` environment variable to `80`, and a server that listens only on `127.0.0.1` never receives requests. ## PHP with Swoole * Swoole is a tool that improves standard PHP performance enabling the webserver to handle multiple requests asynchronously. * With this tool, you can create microservices, websockets, background queues, among others. It also allows you to execute events just like JavaScript does. * It is also important to mention that Swoole is compatible with other PHP frameworks. A good example of a PHP framework is Laravel which is compatible with Swoole thanks to Octane. * You can use it instead of the standard PHP server by defining your custom START command. Example: ```bash theme={"system"} npm install && npm run build && php artisan optimize && php artisan octane:start --host=0.0.0.0 --port=80 --workers=4 --task-workers=8 --server=swoole ``` * You can check out all the powerful functions of Swoole in the [Swoole manual](https://www.php.net/manual/en/book.swoole.php). ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * `index.php`, or the file set in `MAIN`. * `composer.json` and `composer.lock`, when you use Composer packages. Square Cloud installs the packages listed in `composer.json` on its own. If your project also has Node dependencies (a `package.json`) to build assets, install and build them in `START`. For example: ```systemd squarecloud.app theme={"system"} START=npm install && npm run build && php -S 0.0.0.0:80 ``` 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. ### What to leave out * Your local `.env` file: set your secrets as [environment variables](/en/platform/environment-variables) instead. The default server uses the root of the ZIP as the document root, so any file you upload there can be downloaded. * `vendor/`: Square Cloud installs it from `composer.json`. * `node_modules/`, when your `START` command installs it. ## Framework guides ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a Python App, API or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-python Deploy Python apps, APIs and Discord bots on Square Cloud: set MAIN, install dependencies from requirements.txt or pyproject.toml, and go live in minutes. The Python runtime runs bots, APIs, websites and scripts. Square Cloud installs your dependencies with pip and starts your app with Python 3. ## Before you begin * Python on your machine. If you don't have it, download it from the [official Python website](https://www.python.org/). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=main.py MEMORY=256 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=main.py MEMORY=512 VERSION=recommended DISPLAY_NAME=My API SUBDOMAIN=my-api START=python -m uvicorn main:app --host 0.0.0.0 --port 80 ``` ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud will execute `python MAIN` to run the Python file specified in `MAIN`. If the `START` field is defined in the configuration file, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * Before starting the app, Square Cloud installs your dependencies with pip: `pip install -r requirements.txt` when a `requirements.txt` exists, otherwise `pip install .`, which reads the dependencies from your `pyproject.toml`. Square Cloud does not run Poetry. ### Port and host for websites and APIs Square Cloud sets the `PORT` environment variable to `80` and `HOST` to `0.0.0.0`. Your server must listen on that port and on all network interfaces: pass `--host 0.0.0.0 --port 80` to Uvicorn, `--bind 0.0.0.0:80` to Gunicorn, or read `int(os.environ.get("PORT", 80))` in your code. Run web apps with a production server such as Gunicorn or Uvicorn, not with a framework's development server. ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * Your main file, for example `main.py`. * A dependencies file: [`requirements.txt`](/en/articles/how-to-create-your-requirements), or [`pyproject.toml`](/en/articles/how-to-create-your-pyproject) when there is no `requirements.txt`. An upload without either fails with `INVALID_DEPENDENCY`. 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. ### What to leave out * `.venv`: your local virtual environment. Square Cloud installs the dependencies itself, for the server's system. * `__pycache__`: compiled files that Python recreates. * `ffmpeg`: it comes pre-installed in the Square Cloud environment. * `poetry.lock`: Square Cloud installs dependencies with pip and does not run Poetry, so this file is never read. ## Framework guides To tune a production web server, see [how to use Gunicorn](/en/tutorials/python/how-to-use-gunicorn). ## Troubleshooting This error occurs when the file defined as "main" for your application in the configuration file does not exist, is written incorrectly, or the path is incorrect. If your main file is inside a folder, for example, specify `folder/file.py`. The minimum amount of RAM required to host a bot is 256MB and for a site/API 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. For other problems, see [Troubleshooting](/en/platform/troubleshooting). ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Host a Ruby App or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-ruby Host Ruby apps and bots on Square Cloud: include a Gemfile, set MAIN to your entry file, and Square Cloud runs bundle install and starts it with ruby MAIN. The Ruby runtime runs bots, workers, APIs and Rails websites. Square Cloud installs your gems with Bundler and starts your app with Ruby. ## Before you begin * Ruby on your machine. If you don't have it yet, download it from the [official Ruby website](https://www.ruby-lang.org/en/), or use version managers like [rbenv](https://github.com/rbenv/rbenv) or [rvm](https://rvm.io/). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=main.rb MEMORY=256 VERSION=recommended DISPLAY_NAME=My bot START=bundle exec ruby main.rb ``` ```systemd squarecloud.app theme={"system"} MAIN=app.rb MEMORY=512 VERSION=recommended DISPLAY_NAME=My website SUBDOMAIN=mywebsite START=bundle exec ruby app.rb ``` ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud will execute `ruby MAIN`, where the file specified in `MAIN` is the Ruby file (e.g. `main.rb`). If the `START` field is defined, the value in it will be executed directly. It is common to define `START` as `bundle exec ruby main.rb` or another suitable startup command. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * Before starting the app, Square Cloud runs `bundle install` to install the gems listed in your `Gemfile`. * The runtime sets `RACK_ENV=production`, so Rack apps such as Rails and Sinatra start in production mode. Bundler reads its settings from environment variables, which are loaded before `bundle install` runs. To exclude unnecessary gem groups in production, configure the variable `BUNDLE_WITHOUT=development:test`. ### Port and host for websites and APIs Square Cloud sets the `PORT` environment variable to `80` and `HOST` to `0.0.0.0`. Your server must listen on that port and on all network interfaces. Rails does it with no changes in production; with Puma or Sinatra, read `ENV.fetch("PORT", 80)` and bind to `0.0.0.0`. ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * `main.rb`, or the file set in `MAIN`: your Ruby entry point. * `Gemfile`, required: an upload without it fails with `INVALID_DEPENDENCY`. * `Gemfile.lock`, generated by Bundler: include it so the server installs the same gem versions. 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. ### What to leave out * `vendor/bundle` and `.bundle`: gems installed for your machine. Square Cloud runs `bundle install` on the server. * `log/` and `tmp/`, when your app creates them. ## Framework guides ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # Deploy a Rust App, API or Bot Source: https://docs.squarecloud.app/en/articles/getting-started-with-rust Deploy Rust apps, APIs and bots on Square Cloud: upload your Cargo project with Cargo.toml, set MAIN to src/main.rs, and it builds with cargo run --release. The Rust runtime builds and runs your Cargo project in release mode: bots, workers, APIs and websites. Square Cloud compiles the code on the server. ## Before you begin * Rust on your machine. If you don't have it, install it from the [official Rust website](https://www.rust-lang.org/tools/install). * 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 If you upload your application through the dashboard, you can skip this section: the dashboard creates the `squarecloud.app` configuration file for you. 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. A complete configuration file for each kind of app: ```systemd squarecloud.app theme={"system"} MAIN=src/main.rs MEMORY=512 VERSION=recommended DISPLAY_NAME=My bot ``` ```systemd squarecloud.app theme={"system"} MAIN=src/main.rs MEMORY=1024 VERSION=recommended DISPLAY_NAME=My API SUBDOMAIN=my-api ``` Compiling uses more memory than running: give large projects extra memory if the build fails. ## What Square Cloud runs * If the `START` field is not defined in the configuration file, Square Cloud will execute the command `cargo run --release` to compile and run the code in release mode. If the `START` field is defined in the configuration file, the value in it will be executed directly. For more information about configuration file parameters, visit [configuration parameters](/en/getting-started/config-file#configuration-parameters). * `MAIN` only tells Square Cloud that the project is written in Rust: it must point to an existing `.rs` file, such as `src/main.rs`, while `cargo run --release` builds the whole Cargo project. You can set `RUNTIME=rust` instead of `MAIN`. ### Port and host for websites and APIs Square Cloud sets the `PORT` environment variable to `80`. Bind your server to `0.0.0.0` on that port, for example: ```rust theme={"system"} let port = std::env::var("PORT").unwrap_or_else(|_| "80".to_string()); let addr = format!("0.0.0.0:{port}"); ``` Pass `addr` to your server's bind or listen call. An address such as `127.0.0.1:8080` never receives requests. ## Prepare the project ### Required files * [`squarecloud.app`](/en/getting-started/config-file), at the root of the ZIP. * `Cargo.toml`, required: an upload without it fails with `INVALID_DEPENDENCY`. * `Cargo.lock`, so the server builds the same dependency versions. * `src/`, with `src/main.rs`. 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. ### What to leave out * `target/`: build output, often hundreds of megabytes. Square Cloud builds the project itself. ## Deploy ### Via dashboard Access the [upload page](https://squarecloud.app/en/dashboard/new) and upload your project zip file. 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. 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. Uploading application to Square Cloud 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ### 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. Learn how to create the `squarecloud.app` configuration file that defines your application's environment. Install the [Square Cloud CLI](/en/cli-reference/installation). If you already have it, run the same command to update it: ```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 ``` 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 ``` 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 ``` 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://.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. App not starting? See the [Troubleshooting guide](/en/platform/troubleshooting/app-wont-start) for the most common causes and fixes. ## Next steps Keep secrets and settings out of your code and read them at runtime. Serve your app on your own domain, on the Standard plan and above. Fix an app that does not start or a site that does not respond. ## 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. # How to Create a package.json for Node.js Source: https://docs.squarecloud.app/en/articles/how-to-create-your-package-json Create a package.json for a Node.js app: initialize it with npm init, add start scripts and dependencies, and see what Square Cloud installs in production. The `package.json` file is the heart of any Node.js project. It acts as a manifest that lists dependencies, defines automation scripts, and configures the project's behavior. This guide teaches how to configure a robust `package.json`, ensuring your project is reproducible, organized, and compatible with the Square Cloud environment. *** The safest way to create the file is by using the NPM CLI. Navigate to the root of your project and choose one of the options: **Option A: Interactive (Recommended for beginners)** Answer the questions step-by-step to configure custom metadata. ```bash theme={"system"} npm init ``` **Option B: Automatic (Default)** Generates the file immediately accepting all default settings. ```bash theme={"system"} npm init -y ``` Open the generated `package.json`. For a professional project, ensure these fields are filled correctly: * `name`: Unique project identifier (use kebab-case, e.g., `my-project-api`). * `version`: Follows the SemVer standard (e.g., `1.0.0`). * `main`: The entry point of the application (usually `index.js` or `src/index.js`). * `type`: Set as `"module"` if using ES Modules (import/export) or remove to use CommonJS (require). The `scripts` section is vital for automation. This is where you define how your application should be started, tested, or built. ```json theme={"system"} "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" } ``` **About initialization on Square Cloud:** By default, Square Cloud runs `node MAIN` (the file set in `MAIN`), but it offers full flexibility. You can (and should) explicitly configure which command the system should execute to start your application. For example, you can configure the **Start Command** in the dashboard or in the Square configuration file to execute `npm run start`, ensuring that the script defined above is respected. Here lie the essential libraries for your code to run in production. To install and automatically save to this list: ```bash theme={"system"} npm install package-name ``` **Attention to `devDependencies` and Build on Square Cloud:** Tools used only in local development (like `eslint` or `prettier`) stay in `devDependencies`. **Important:** Square Cloud performs installation in production mode by default, which means packages listed in `devDependencies` are **NOT** installed. If you need to run a **build** process in the cloud (e.g., compile TypeScript or run post-install scripts), you must move those tools to `dependencies`. Otherwise, the build will fail due to missing packages. For more complex projects, `package.json` offers powerful control features: **1. Overrides (Force versions):** Useful when a dependency you use installs a sub-dependency with multiple vulnerabilities. You can force resolution to a safe version: ```json theme={"system"} "overrides": { "vulnerable-package": "2.0.1" } ``` **2. Imports (Path aliases):** Avoid long relative paths like `../../../utils`. With `imports`, you create native internal shortcuts (requires recent Node): ```json theme={"system"} "imports": { "#utils/*": "./src/utils/*.js", "#database": "./src/core/database.js" } ``` This allows importing in code using `import db from '#database'`. *** ## Tips and best practices * **Semantic Versioning**: Prefer fixing critical versions by removing `^` (e.g., use `"14.14.1"` instead of `"^14.14.1"`) to prevent automatic updates from breaking your production code. * **Security**: Run `npm audit` regularly to identify vulnerabilities in your dependencies. The `overrides` field taught above is the ideal solution to fix these issues. * **package-lock.json**: Keep it in Git: it records the exact dependency tree that worked on your machine. The Square Cloud CLI and the VS Code extension leave lockfiles out of uploads by default, so Square Cloud installs the newest versions allowed by the ranges in `package.json`. When you need the pinned versions, re-include it with `!package-lock.json` in your [`squarecloud.ignore`](/en/getting-started/squarecloud-ignore). * **Organization**: Keep the file clean. If the `scripts` section gets too big, consider using external automation tools or separating into files. *** ## Final file example Below, an example of a modern and optimized `package.json`: ```json package.json theme={"system"} { "name": "square-cloud-project", "version": "1.0.0", "description": "Professional Node.js API", "main": "src/index.js", "type": "module", "scripts": { "start": "node src/index.js", "lint": "eslint ." }, "imports": { "#services/*": "./src/services/*.js" }, "dependencies": { "discord.js": "14.14.1", "dotenv": "16.3.1", "typescript": "5.3.3" }, "devDependencies": { "eslint": "8.56.0" } } ``` *** ## Next steps With your `package.json` file configured: 1. Commit it to your Git repository. 2. Host your project with the [Node.js runtime guide](/en/articles/getting-started-with-nodejs), or follow a framework guide such as [Express](/en/tutorials/api/express) or [Next.js](/en/tutorials/website/nextjs). 3. [Deploy automatically from GitHub](https://help.squarecloud.app/en-us/article/how-to-connect-your-github-repository-and-deploy-automatically-mr6srt/) on every push. # How to Create a pyproject.toml File Source: https://docs.squarecloud.app/en/articles/how-to-create-your-pyproject Create a pyproject.toml for a Python app: declare project metadata, pinned dependencies and a build system so Square Cloud can install it with pip. The `pyproject.toml` file is a modern way to specify all your project's build system requirements and dependencies in a single file. This guide shows how to create, configure and use `pyproject.toml` to ensure consistency between development and production environments. ## What is a pyproject.toml file? A `pyproject.toml` lists dependencies, build system and other metadata for your Python project. This allows: * You and your team to maintain identical environments * New collaborators to reproduce the environment exactly * Set up development and production dependencies separately *** First, create a file named `pyproject.toml` in the root of your project. In the `pyproject.toml` file, start by defining your project metadata. We will define the project name, version, description, and other relevant information.\ The project name must consist of ASCII letters, digits, underscores “\_”, hyphens “-” and periods “.”. It must not start or end with an underscore, hyphen or period. For example: ```toml pyproject.toml theme={"system"} [project] name = "my-python-project" description = "A sample Python project using pyproject.toml" version = "1.0.0" ``` Next, we will list the dependencies required for our project. We can specify both development and production dependencies. The production dependencies are listed under the `dependencies` section, while development dependencies can be listed under `optional-dependencies` with a specific group name (e.g., `dev`).\ You can specify versions for your dependencies using comparison operators like `==`, `>=`, `<`... In the example below, every dependency is pinned to an exact version with `==`. It is recommended to specify exact versions to ensure reproducibility and prevent breakage from incompatible updates in production. ```toml pyproject.toml theme={"system"} [project] name = "my-python-project" description = "A sample Python project using pyproject.toml" version = "1.0.0" dependencies = [ "discord.py==2.7.1", "aiohttp==3.14.3" ] [project.optional-dependencies] dev = [ "pytest==9.1.1", "black==26.5.1" ] ``` Finally, we need to specify the build system requirements. This is necessary for tools like pip to know how to build and install your project. We will use `setuptools` as our build backend, which is a common choice for Python projects, but you can choose others like `poetry`. The `py-modules = []` line under `[tool.setuptools]` tells setuptools that there is no module to package, so `pip install .` only installs the dependencies. Without it, an app with several top-level folders (for example `cogs/` and `utils/`) fails with `Multiple top-level packages discovered in a flat-layout`. ```toml pyproject.toml theme={"system"} [project] name = "my-python-project" description = "A sample Python project using pyproject.toml" version = "1.0.0" dependencies = [ "discord.py==2.7.1", "aiohttp==3.14.3" ] [project.optional-dependencies] dev = [ "pytest==9.1.1", "black==26.5.1" ] [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [tool.setuptools] py-modules = [] ``` *** ## Install dependencies with pip To install the dependencies listed in your `pyproject.toml` file, you can use pip or other tools that support `pyproject.toml`. This allows you to work on your project while having the dependencies installed. ```bash theme={"system"} pip install . ``` This command will read the `pyproject.toml` file, install the dependencies listed under `dependencies`, and set up your project for development. It is also what Square Cloud runs when your upload has a `pyproject.toml` and no `requirements.txt`. If you want to install the development dependencies as well, you can use: ```bash theme={"system"} pip install .[dev] ``` This will install both the production and development dependencies, allowing you to work on your project with all the necessary tools. ## Best practices and tips * **Keep updated**: Review and update `pyproject.toml` regularly as you add new dependencies * **Use exact versions**: Always use `==` instead of `>`, `>=` or no version to avoid surprises in production * **Versioning**: Commit `pyproject.toml` to git to track dependency changes and version updates * **Isolated environment**: Maintain one virtual environment per project to avoid global conflicts * **Test locally**: Before deploying, test the file with `pip install .` in a new environment *** ## Next steps With your `pyproject.toml` file configured: 1. Commit it to your Git repository. 2. Host your project with the [Python runtime guide](/en/articles/getting-started-with-python), or follow a framework guide: [Django](/en/tutorials/api/django), [Flask](/en/tutorials/api/flask) or [FastAPI](/en/tutorials/api/fastapi). 3. [Deploy automatically from GitHub](https://help.squarecloud.app/en-us/article/how-to-connect-your-github-repository-and-deploy-automatically-mr6srt/) on every push. # How to Create a requirements.txt File Source: https://docs.squarecloud.app/en/articles/how-to-create-your-requirements Create a requirements.txt for a Python app: generate it with pip freeze inside a virtual environment, pin versions with ==, and deploy it on Square Cloud. The `requirements.txt` file is the industry standard for specifying and managing dependencies in Python projects. This guide shows how to create, configure and use `requirements.txt` to ensure consistency between development and production environments. ## What is a requirements.txt file? A `requirements.txt` file lists all external Python packages your project needs, with their specific versions. This allows: * You and your team to maintain identical environments * New collaborators to reproduce the environment exactly * Deploy on Square Cloud to work with the correct dependencies *** Working inside a virtual environment is essential to keep your project dependencies isolated from the global Python system. This avoids version conflicts and ensures reproducibility. Create the virtual environment in the root of your project (use `python3` if `python` is not found on macOS/Linux): ```bash theme={"system"} python -m venv .venv ``` Activate it with one of the commands below, depending on your system: **Windows:** ```bash theme={"system"} .venv\Scripts\activate ``` **macOS/Linux:** ```bash theme={"system"} source .venv/bin/activate ``` Then install the packages your project uses, for example: ```bash theme={"system"} pip install discord.py python-dotenv ``` Always specify exact versions with `==` to ensure reproducibility and prevent breakage from incompatible updates in production. ### Option A: Generate with pip freeze (recommended) With the virtual environment activated, write every installed package and its exact version to the file: ```bash theme={"system"} pip freeze > requirements.txt ``` Inside a virtual environment, `pip freeze` lists only the packages installed in it (your dependencies and their sub-dependencies), already pinned with `==`. Outside a virtual environment, `pip freeze` lists every package installed on your system. Review the file and remove what your project does not use. ### Option B: Create manually Create a `requirements.txt` file in the root of your project and list the packages your project uses, with their versions: ```plaintext requirements.txt theme={"system"} discord.py==2.7.1 requests==2.34.2 python-dotenv==1.2.3 ``` Open the `requirements.txt` file in your text editor and: 1. Review the package list 2. Remove unnecessary dependencies 3. Update versions as needed 4. Ensure you are using exact versions (with `==`) To install all listed dependencies: ```bash theme={"system"} pip install -r requirements.txt ``` This command guarantees that all collaborators and production environments use exactly the same versions. With `requirements.txt` ready, you can: * Share it with your team * Put it in version control (git) * Ensure everyone works with the same versions * Simplify deployment on Square Cloud When you host your project on Square Cloud, the `requirements.txt` file is automatically detected and its dependencies are installed with `pip install -r requirements.txt` before your app starts. *** ## Best practices and tips * **Keep updated**: Review and update `requirements.txt` regularly as you add new dependencies * **Use exact versions**: Always use `==` instead of `>`, `>=` or no version to avoid surprises in production * **Review pip freeze**: If using `pip freeze`, review the file before committing, as it may include unnecessary auxiliary packages * **Versioning**: Commit `requirements.txt` to git to track dependency changes * **Isolated environment**: Maintain one virtual environment per project to avoid global conflicts * **Test locally**: Before deploying, test the file with `pip install -r requirements.txt` in a new environment *** ## Next steps With your `requirements.txt` file configured: 1. Commit it to your Git repository. 2. Host your project with the [Python runtime guide](/en/articles/getting-started-with-python), or follow a framework guide: [Django](/en/tutorials/api/django), [Flask](/en/tutorials/api/flask) or [FastAPI](/en/tutorials/api/fastapi). 3. [Deploy automatically from GitHub](https://help.squarecloud.app/en-us/article/how-to-connect-your-github-repository-and-deploy-automatically-mr6srt/) on every push. # Migrate from Heroku to Square Cloud Source: https://docs.squarecloud.app/en/articles/migrating-from-heroku Migrate from Heroku to Square Cloud: map your Procfile, Config Vars, Postgres and logs, deploy with the CLI and point your custom domain. ## What you get on Square Cloud * **Predictable flat pricing in BRL**: one monthly plan price covers the RAM and vCPU your applications use. See [Plans and Pricing](/en/platform/plans). * **Dedicated resources**: RAM and vCPU are reserved for your applications. * **Deploy in seconds**: upload a zip or push via CLI and your application is running. ## Concept mapping | Heroku | Square Cloud | | - | - | | `Procfile` (`web:`/`worker:` process types) | [`squarecloud.app` configuration file](/en/getting-started/config-file): `MAIN`/`START` fields | | Buildpacks | [Runtimes](/en/runtimes/introduction): automatic language detection, no buildpack to choose | | Config Vars | [Environment variables](/en/platform/environment-variables), set in the dashboard or uploaded from a `.env` file | | `$PORT` | `PORT`, set to `80` on Square Cloud, plus `HOST=0.0.0.0`: code that listens on `process.env.PORT` keeps working | | Heroku Postgres | [Square Cloud managed databases](/en/services/databases) (PostgreSQL, MySQL, MongoDB, Redis) | | `heroku logs --tail` | [`squarecloud app realtime`](/en/cli-reference/logs#squarecloud-app-realtime) to stream live logs, [`squarecloud app logs`](/en/cli-reference/logs#squarecloud-app-logs) for the most recent lines, or the dashboard logs | | Custom domains (paid dynos) | Custom domains on the [Standard plan or higher](/en/platform/plans) | ## Migration steps Replace your `Procfile` with a `squarecloud.app` file at the root of your project. A Heroku `Procfile` like: ``` web: node index.js ``` becomes: ```systemd squarecloud.app theme={"system"} MAIN=index.js MEMORY=512 VERSION=recommended DISPLAY_NAME=My migrated app SUBDOMAIN=my-app ``` A `web` process must listen on host `0.0.0.0` and on the port in `PORT` (`80`). For a worker process type, drop `SUBDOMAIN` and set `START` to your worker's start command instead. See the [configuration file reference](/en/getting-started/config-file) for every field. Export your Heroku Config Vars (`heroku config`) and set the same keys on Square Cloud, either from the dashboard's environment variables panel or by uploading a `.env` file: ```bash theme={"system"} squarecloud app env set --from-file .env --app ``` Then restart the application: it reads environment variables when it starts. See [Environment variables](/en/platform/environment-variables). Upload your project via the CLI or the dashboard: ```bash theme={"system"} squarecloud upload ``` See [How to Host your Website/API](/en/tutorials/how-to-deploy-your-website) for a full walkthrough of both methods. Once the app is live at `.squareweb.app`, point your domain's DNS at Square Cloud and attach it from the CLI: ```bash theme={"system"} squarecloud app network domain example.com --app ``` Custom domains require an active Standard plan or higher. For the DNS records, see [how to set up your own domain](https://help.squarecloud.app/en-us/article/how-to-set-up-your-own-domain-cnamedns-1fzbrgh/) in the help center. ## Key differences to plan for * **Region and latency.** Square Cloud's data center is located in New York: see the [Platform Overview](/en/platform/overview) for infrastructure details. If most of your users are in a different region than your current Heroku dyno region, measure latency before cutting over. * **An active plan is required.** Every application runs on one. See [Plans and Pricing](/en/platform/plans) to pick the right tier for your workload. * **Databases move separately.** Migrating Heroku Postgres data means exporting it (e.g. `pg_dump`) and restoring it into a new [Square Cloud managed database](/en/services/databases): plan a maintenance window for the cutover. ## Next steps Every field of the file that replaces your Procfile. Move your Config Vars and keep secrets out of your code. Create the database that replaces Heroku Postgres. ## 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. # Migrate from Railway to Square Cloud Source: https://docs.squarecloud.app/en/articles/migrating-from-railway Migrate from Railway to Square Cloud: map railway.json, variables and database plugins, deploy with the CLI and move to flat monthly plan pricing. ## What you get on Square Cloud * **Predictable flat pricing in BRL**: one monthly plan price for the RAM and vCPU your applications use, independent of how much traffic they handle. See [Plans and Pricing](/en/platform/plans). * **Dedicated resources**: RAM and vCPU are reserved for your applications. * **Deploy in seconds**: upload a zip or push via CLI and your application is running. ## Concept mapping | Railway | Square Cloud | | - | - | | `railway.json` / Nixpacks | [`squarecloud.app` configuration file](/en/getting-started/config-file) + automatic [Runtimes](/en/runtimes/introduction) | | Usage-based billing | Flat monthly [plan pricing](/en/platform/plans) | | Postgres/Redis plugins | [Square Cloud managed databases](/en/services/databases) (PostgreSQL, MySQL, MongoDB, Redis) | | Environment variables | [Environment variables](/en/platform/environment-variables), set in the dashboard or uploaded from a `.env` file | | `PORT` variable | `PORT`, set to `80` on Square Cloud, plus `HOST=0.0.0.0`: code that listens on `process.env.PORT` keeps working | | `railway up` | `squarecloud upload` | | Custom domains | Custom domains on the [Standard plan or higher](/en/platform/plans) | ## Migration steps Replace `railway.json`/Nixpacks detection with a `squarecloud.app` file at the root of your project: ```systemd squarecloud.app theme={"system"} MAIN=index.js MEMORY=512 VERSION=recommended DISPLAY_NAME=My migrated app SUBDOMAIN=my-app ``` Square Cloud's [Runtimes](/en/runtimes/introduction) detect your language automatically from the extension of your `MAIN` file and check its dependency file, such as `package.json` or `requirements.txt`. A web service must listen on host `0.0.0.0` and on the port in `PORT` (`80`). See the [configuration file reference](/en/getting-started/config-file) for every field. Recreate the variables from your Railway project's Variables tab, either from the dashboard's environment variables panel or by uploading a `.env` file: ```bash theme={"system"} squarecloud app env set --from-file .env --app ``` Then restart the application: it reads environment variables when it starts. See [Environment variables](/en/platform/environment-variables). Upload your project via the CLI or the dashboard, in place of `railway up`: ```bash theme={"system"} squarecloud upload ``` See [How to Host your Website/API](/en/tutorials/how-to-deploy-your-website) for a full walkthrough of both methods. If your project used a Railway Postgres, MySQL or Redis plugin, provision the equivalent [Square Cloud managed database](/en/services/databases) and point your app's connection string at it. Once the app is live at `.squareweb.app`, point your domain's DNS at Square Cloud and attach it from the CLI: ```bash theme={"system"} squarecloud app network domain example.com --app ``` Custom domains require an active Standard plan or higher. For the DNS records, see [how to set up your own domain](https://help.squarecloud.app/en-us/article/how-to-set-up-your-own-domain-cnamedns-1fzbrgh/) in the help center. ## Key differences to plan for * **Billing model.** There is no per-second usage meter to watch: cost is fixed per plan regardless of traffic. Size your plan by RAM/vCPU need rather than projected usage. See [Plans and Pricing](/en/platform/plans). * **Region and latency.** Square Cloud's data center is located in New York: see the [Platform Overview](/en/platform/overview) for infrastructure details. Measure latency from your user base before cutting over if you were running in a different Railway region. * **Databases move separately.** Migrating a Railway Postgres/Redis plugin's data means exporting it and restoring it into a new [Square Cloud managed database](/en/services/databases): plan a maintenance window for the cutover. ## Next steps Every field of the file that replaces railway.json. Move your variables and keep secrets out of your code. Create the database that replaces your Railway plugin. ## 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. # Changelog Source: https://docs.squarecloud.app/en/changelog Discover the latest news and improvements in Square Cloud. Follow product releases, performance optimizations, and much more. ## 🔗 Git webhooks * **Tags and deleted branches no longer block a deploy:** a push of a tag (or any ref that isn't a branch) and a push that deletes a branch are answered with `202` and never deployed, and they no longer use up the webhook's limit of 1 push per 15 seconds. A release sent with `git push --follow-tags`, or a merged pull request whose branch is deleted automatically, no longer holds back the deploy of the branch push that arrives with it. * **The reply says why:** it starts with `GIT_REF_NOT_SUPPORTED` or `GIT_BRANCH_DELETED`, shown on GitHub in **Settings > Webhooks > Recent Deliveries**. See [Webhook deliveries](/en/api-reference/endpoint/apps/deploy/webhooks#webhook-deliveries). ## ⚙️ Applications * **Start, stop and restart during a restore:** while a snapshot restore runs on an application (up to about 2 minutes), these actions now answer `403 RESTORE_IN_PROGRESS` right away, instead of waiting and then failing. Wait for the restore to finish and try again. ## 🔌 AI Gateway: when to retry * **`Retry-After` on limits:** `429 rate_limit_exceeded` carries the plan's pacing, so the OpenAI SDKs wait and retry on their own, and `503 server_overloaded` asks for 2 seconds. The daily and weekly limits, and `503 daily_capacity_reached`, carry the time until the reset plus `x-should-retry: false`, so the SDKs stop repeating requests that can only fail again. See [Retries](/en/api-reference/ai-gateway#retries). ## 🤖 Cubic: larger limits * **Daily limits raised on every plan:** Hobby 5M tokens (was 2M), Standard 10M to 20M (was 5M to 10M), Pro 30M to 40M (was 15M) and Enterprise 50M to 100M (was 25M to 50M). * **New weekly limit** of 4x the daily one, reset on Monday at 00:00 UTC. A heavy day is fine: only near-maximum use almost every day of the week reaches it. When it does, Cubic answers `AI_WEEKLY_LIMIT_REACHED` until the reset. ## 🔌 AI Gateway: its own limits * **Separate from Cubic:** gateway requests now count only against the gateway's own token limits, so an API key never uses up your Cubic allowance, and vice versa. * **Token limits per plan:** Standard 2.5M tokens per day, Pro 5M and Enterprise 10M to 20M by plan size, each with a weekly limit of 4x, reset on Monday at 00:00 UTC. The new `429 weekly_limit_reached` tells the weekly limit apart from the daily `daily_limit_reached`. See [Plans and limits](/en/api-reference/ai-gateway#plans-and-limits). * **Fair-use allowance recalibrated:** Pro now has 2x the base allowance and Enterprise 5x. ## 💻 Square Cloud CLI * **Log in from the browser:** `squarecloud auth login` shows a code and opens the authorization page. Approve it and the CLI receives its own API key, limited to the permissions it uses and valid for 90 days. For scripts and CI, use `--token`, `--with-token` or the `SQUARECLOUD_API_KEY` environment variable. See [Authentication](/en/cli-reference/authentication). * **`squarecloud.ignore` with real gitignore rules**, the same file the VS Code extension reads: `!` re-includes, `**`, folder-only and root-only patterns. See the [squarecloud.ignore guide](/en/getting-started/squarecloud-ignore). * **Eight languages:** German, French, Italian and Japanese join English, Portuguese, Spanish and Chinese. Help and flag descriptions are translated too, and the language follows your system on every run. * **More reliable transfers:** large uploads and commits are no longer cut off after 30 seconds, `app realtime` stays connected, and `app file write`, `app file read` and `app file delete` work with any file, binary included. * **New:** `app env remove --all`, `--json` on `app logs`, `upload` and `auth whoami`, a confirmation before `app file read -o` overwrites a local file, and clear hints when a key expired or a rate limit was hit. * **Install:** the install script verifies the release checksums and supports 32-bit x86 and ARMv7, and the npm package installs on arm64 and ARMv7. Update with `npm install -g @squarecloud/cli@latest`. **Read before upgrading CI jobs.** The [Scripts and CI](/en/cli-reference/global-flags-and-ci#scripts-and-ci) section has the details. * Commands that ask for confirmation exit with code 1 when there is no terminal and no `-y`, instead of doing nothing. Pass `-y`. * `auth login` no longer prompts for a key. In scripts, set `SQUARECLOUD_API_KEY` or use `auth login --with-token` or `--token `. * More failures exit with code 1, and an npm install now passes the real exit code through. Check exit codes, not message text. * Commands without JSON output reject `--json`, and `app logs --json` prints `{"logs": "..."}`. * Errors, prompts and the update notice go to stderr, and `app realtime` prints log lines as they are, with `[status] ` only when the status changes. * Table headers are translated on non-English systems: parse `--json`, or run with `LC_ALL=en_US.UTF-8`. * `package-lock.json`, `pnpm-lock.yaml` and `yarn.lock` are no longer uploaded by default: add `!package-lock.json` (or your lockfile) to `squarecloud.ignore` to keep it. Patterns follow gitignore rules, so review rules that relied on name-suffix matching. * `app env replace` needs at least one variable (use `app env remove --all -y` to clear them all), and with `--from-file` an unquoted value ends at ` #`. * `locale` in the config file is ignored: the language follows the system, or `LC_ALL`/`LANG`. ## 🧩 VS Code extension The extension now has its own [documentation](/en/vscode-extension/installation): installation, features, commands and troubleshooting. * **Get Started walkthrough:** `Square Cloud: Get Started` opens a ten-step guide (connect, config file, upload and commit, logs and metrics, snapshots, databases, workspaces, GitHub deploys and edge analytics) with buttons that run the real commands. * **Redesigned sign-in and dashboard** with the Square Cloud look: a step-by-step sign-in that explains each permission, skeletons while loading, illustrated empty and error states, paging and a filter for long application lists, and full keyboard and high-contrast support. * **Eight languages**, like the Square Cloud website. * **From the command palette:** application and database actions ask which one to use, and pickers offer only what fits (Start lists applications that aren't running). * **Official JavaScript SDK v6** underneath: the extension shows the API's real error codes and messages, times calls out and retries only what is safe to retry. * **Same ignore file as the CLI:** `squarecloud.ignore` with gitignore syntax and the same defaults. `.gitignore` is no longer read in its place, and a `\` makes the next character literal. * **Fixes:** an expired authorization asks you to connect again, snapshot restore uses the listing's own identifiers, snapshots stream to disk, deleting keeps the application when the recovery snapshot is still being generated, and the 24h metrics show RAM correctly. ## 🧰 SDKs rewritten from scratch The JavaScript, Python and Go SDKs have new major versions, rewritten for the current API. All three cover the same **67 operations** plus snapshot downloads, share the same structure and examples, and have **zero runtime dependencies**. The [SDK documentation](/en/sdks/introduction) was rewritten for them. | SDK | Version | Migration guide | | - | - | - | | `@squarecloud/api` | 6.0.0 (Node.js 22+, Deno, Bun, edge) | [v5 → v6](/en/sdks/js/migrating_to_v6) | | `squarecloud-api` | 5.0.0 (Python 3.11+) | [v4 → v5](/en/sdks/py/migrating_to_v5) | | `github.com/squarecloudofc/sdk-api-go/v3` | 3.0.0 (Go 1.22+) | [v2 → v3](/en/sdks/go/migrating_to_v3) | | `@squarecloud/blob` | 4.0.0 (Node.js 20+ and browsers) | [v3 → v4](/en/sdks/blob/migrating_to_v4) | **These are breaking releases.** Methods now take the id first and return the API's own data (no classes, no cache, no events), and every failure is a single error type with the HTTP `status`, the API's `code` and the server's `message`. Read the migration guide before upgrading. * **One error type per SDK:** `SquareCloudAPIError` (JavaScript and Python) and `*APIError` (Go). Codes the SDK used to invent are gone: an expired key is `401 ACCESS_DENIED`, and a response without a code is `UNKNOWN_ERROR` with the real status. * **Timeouts:** 30 seconds by default, and at least 120 seconds for calls the server holds open (start, stop, restart, snapshots, database creation and AI). * **Retries only when safe:** network errors on `GET` and `503 UPLOAD_BUSY`/`ANALYTICS_BUSY`, with backoff. A `429` is never retried. * **New in all three:** [AI Gateway](/en/api-reference/ai-gateway) chat, network analytics, realtime logs and status with automatic reconnection, GitHub App deploys with an API key, streamed uploads and snapshot downloads, and apps shared through a workspace (`-`). * **Python:** a sync `SquareCloud` and an async `AsyncSquareCloud` client, using only the standard library. The app cache and listeners were removed. * **Go:** `context` on every call, and the license is now MIT. ## 🗂️ Blob SDK v4 * The new [Blob SDK documentation](/en/sdks/blob/client) covers uploads, objects, links, shares, rules, stats and the S3 gateway. * A `429` is never retried, and writes get a single attempt. Reads and multipart parts are retried on network errors and any `5xx`. * `maxRetries` now defaults to `2` (was `5`) and the backoff is capped at 8 seconds. Pass `{ maxRetries: 5 }` to keep the old read budget. ## 🛡️ API and Blob Storage **If your code checks `RATE_LIMIT` or `RATE_LIMIT_EXCEEDED`, switch to `RATE_LIMITED`.** The account or API key request limit and the temporary block for invalid keys in the [API](/en/api-reference/authentication), the [network](/en/api-reference/endpoint/apps/network/analytics) routes, [`GET /v2/users/snapshots`](/en/api-reference/endpoint/users/snapshots) and the account limit and invalid-credential block in [Blob Storage](/en/blob-reference/errors) now all answer `429 RATE_LIMITED`. `KEEP_CALM` and the other `429` codes don't change. * **Database start and stop:** when the cluster refuses the action, [start](/en/api-reference/endpoint/databases/start) and [stop](/en/api-reference/endpoint/databases/stop) now answer `409` with the error code (`CONTAINER_ALREADY_STARTED`, `CONTAINER_ALREADY_STOPPED`, `CONTAINER_TEMPORARILY_SUSPENDED` or `ACTION_FAILED`), instead of `200` with `status: "error"`. * **Application start, stop and restart:** the `409` body carries only `status` and `code`, and a failure to reach the cluster answers `ACTION_FAILED`. * **Database creation:** `memory` must be a whole number of MB. A decimal or a string answers `400 INSUFFICIENT_MEMORY`. * **AI Gateway:** a request that takes longer than **90 seconds** in total answers `503 server_overloaded` and can be retried. See the [error table](/en/api-reference/ai-gateway). * **GitHub App:** [linking a repository](/en/api-reference/endpoint/apps/deploy/github-app-link) needs write (push) or admin permission on it (`403 REPOSITORY_PERMISSION_REQUIRED`), and a repository and branch can be linked to only one application on the whole platform. ## 📁 File manager in base64 **[Read File](/en/api-reference/endpoint/apps/filemanager/content) without `encoding` is deprecated.** The `{ "type": "Buffer", "data": [...] }` response will be removed on **March 27, 2027**, when base64 becomes the default. Send `?encoding=base64` now to get `{ "encoding": "base64", "data": "" }`. Until then, the legacy response carries the `Deprecation` and `Sunset` headers. * **Writing in base64:** [Create/Modify File](/en/api-reference/endpoint/apps/filemanager/put) accepts `encoding: "base64"`, the recommended format for binary files. An empty `content` (`""` or `[]`) writes an empty file. * [List Files](/en/api-reference/endpoint/apps/filemanager/list) answers `404 FILE_NOT_FOUND` for a directory that doesn't exist, instead of an empty list. ## 🔧 More API changes * **Git webhook replies:** the [webhook URL](/en/api-reference/endpoint/apps/deploy/webhooks) answers in plain text whether a deploy was queued, so **Recent Deliveries** on GitHub shows what happened to each push. A `200` is sent only once the deploy is stored in the queue. A `503` means nothing was deployed: redeliver the push or push again. * **AI Gateway:** every error, including authentication, scope, rate-limit and invalid-body errors, now uses the OpenAI format with a lowercase `code` (`access_denied`, `missing_scope`, `rate_limited` and others). See the [error table](/en/api-reference/ai-gateway). * **Expired API keys** answer `401 ACCESS_DENIED`, exactly like an invalid key. The `APIKEY_EXPIRED` code no longer exists. * **Database creation:** a creation that fails leaves nothing behind, so it is safe to [try again](/en/api-reference/endpoint/databases/create). ## 🗂️ The biggest Blob Storage update yet Blob Storage got its biggest update since launch and is now **out of beta**. You can now store **private** files, hand files out through **temporary links** or **share links**, use **S3 tools** (aws-cli, boto3, rclone, the AWS SDKs), let the **browser upload directly** without exposing your API key, set **rules per prefix** and upload files of up to **10 GiB**. The [Blob documentation](/en/services/blob) was rewritten from scratch, with a page for every route. **What changes if you already integrate with Blob:** * **New files have an id starting with `pub/` or `prv/`** (`pub//images/logo.png`). Existing files keep their id, and every route accepts both forms. Store the `id` as it comes and treat it as opaque: it changes when the file changes visibility or expiry. * **New public files are served from `https://blob.squarecloud.dev/pub/...`.** The existing URLs on `public-blob.squarecloud.dev` keep working for **30 days, until October 25, 2026**: move those files with [`POST /v1/objects/copy`](/en/blob-reference/endpoint/copy) (`move: true`) to get their new URL. * **Read a file's expiry from `expires_at`**, present in the upload, list and info responses. Don't parse the date out of the file name. * **Options that depend on the plan answer `403 UPGRADE_REQUIRED`**, with a `message` naming the plan that unlocks the feature. ## 🔒 Private files and links * **`private=true` on upload** stores the file without a public URL. It is read through the API, the S3 gateway or a link. * **Change visibility any time** with the new [`PATCH /v1/objects`](/en/blob-reference/endpoint/update). Making a file private removes the public copy before answering, and the CDN stops serving it in about 60 seconds. Making files private works even on an account without an active plan. * **Temporary links** with the new [`GET /v1/objects/download`](/en/blob-reference/endpoint/download): valid from 60 seconds to 24 hours, no credential needed, `Range` support (resumable downloads and video) and a choice of the name the file is saved as. * **Share links** with the new [`POST /v1/shares`](/en/blob-reference/endpoint/shares-create): up to 30 days, **revocable** at any time, with an optional **download cap** and, on Pro and Enterprise, a **password**. The link page follows the visitor's language in the platform's 8 languages. * A share link whose file was deleted, moved or changed visibility answers `404` right away, before any password page and without spending a download, and leaves the list of links. * A share link to a **public** file ends in a redirect to the file's permanent URL, so the password, the download cap and the expiry only truly protect **private** files. Share private files when the protection matters. * The [Links and sharing](/en/blob-reference/links-and-sharing) page compares the three kinds of link and when to use each. ## 🪣 S3-compatible * An **S3 gateway** at `https://s3-blob.squarecloud.app` works with aws-cli, boto3, rclone, Cyberduck and the AWS SDKs. * The key pair comes from the new [`GET /v1/s3/credentials`](/en/blob-reference/endpoint/s3-credentials) and is **derived from your API key**: revoking or regenerating the key does the same to the pair, and a key with only `blob:read` gives a read-only pair. * Three fixed buckets per account: `public`, `private` and `legacy` (legacy files, uploaded before this update, with read, list and delete). * Rate limits per plan, every 10 seconds: Hobby 100, Standard 200, Pro 400 and Enterprise 600 requests. S3 requests don't count against your plan's API request limit. * Supports listing with folders, `Range`, multipart uploads of up to 10 GiB, server-side copy, batch delete of up to 1000 keys, presigned URLs of up to 7 days and checksum verification. Details in [S3 compatibility](/en/blob-reference/s3-compatibility). * `Content-MD5` is always verified, even alongside an `x-amz-checksum-*` header, and a mismatch answers `BadDigest`. * Gateway responses are never cached at the edge: a presigned URL stops working exactly when it expires, when the API key is revoked or when the file is deleted. * Keys can have up to about 1000 bytes. Past that, `KeyTooLongError` says the exact limit for your account. ## 🌐 Direct browser uploads * The new [`POST /v1/upload-tokens`](/en/blob-reference/endpoint/upload-tokens) mints, on your server, a short-lived **upload token** (`squp_...`) that the browser uses instead of the API key. * The token pins the name, prefix, visibility, expiry, maximum size, accepted extensions and metadata. It lasts from 1 to 60 minutes and 1 to 100 uses, and only works on upload routes. * Without a pinned name, the browser picks one and it always gets the security hash, so a leaked token can never replace existing files. ## ⚙️ Rules per prefix * The new [`PUT /v1/account/settings`](/en/blob-reference/endpoint/settings-put) saves your rules (5 on Hobby and Standard, 10 on Pro, 20 on Enterprise), each applying to the files under a prefix. * **Defaults:** visibility, expiry and cache. * **Limits:** maximum size and accepted extensions. * **Automatic deletion** after N days, which also applies to files that already existed and to files written over S3. It only starts acting **24 hours after** the rule is saved, so there is time to adjust a prefix that is too broad. ## 🧰 Server-side operations * **Batch updates** with [`PATCH /v1/objects`](/en/blob-reference/endpoint/update): visibility, expiry, cache, `Content-Disposition` and metadata of up to 50 files per request, with one result per file. * **Copy, move and rename** without downloading the file with [`POST /v1/objects/copy`](/en/blob-reference/endpoint/copy). * **File details** with [`GET /v1/objects/info`](/en/blob-reference/endpoint/info): type, ETag, expiry, cache, original name and metadata. * **Batch delete:** [`DELETE /v1/objects`](/en/blob-reference/endpoint/delete) accepts up to 100 files per request and reports what was deleted, what didn't exist and what failed. With a single id, the behavior is unchanged. ## 📤 Uploads * **Chunked uploads of up to 10 GiB**, with up to 2048 parts of 5 to 32 MB and up to 32 open uploads per account. * **Resume:** the new [`GET /v1/objects/chunked`](/en/blob-reference/endpoint/chunked-status) shows which parts already arrived, and [`GET /v1/objects/chunked/open`](/en/blob-reference/endpoint/chunked-open) lists the account's open uploads with the token of each. Uploads idle for 24 hours are aborted automatically. * **New upload parameters:** `private`, `overwrite`, `disposition`, `cache_control`, `metadata` and `checksum_sha256` (when the file doesn't match the checksum, the upload is refused with `CHECKSUM_MISMATCH` and nothing is stored). * **More flexible names:** 1 to 128 characters, accepting `.` and `-`, and prefixes up to 8 folders deep. * **Expiry in hours or days:** `6h`, `30` or `30d`. * The upload response includes the file's `sha256` and whether it replaced another file (`replaced`). ## 📋 Listing and metrics * [`GET /v1/objects`](/en/blob-reference/endpoint/list) gained a visibility filter (`private`), folders (`delimiter=/`), `limit` and the `cursor` parameter. Each entry carries `private`, `url` and `etag`, and the limit is now 30 requests per 30 seconds. * A malformed or outdated `cursor` answers `400 INVALID_CONTINUATION_TOKEN`: start again without it. * [`GET /v1/account/stats`](/en/blob-reference/endpoint/stats) shows this **month's average usage** (`month.average_storage`). * A public health check at `https://blob.squarecloud.dev/pub/status` answers `OK` and is never cached, ready for your monitoring. ## 💎 Features by plan Every plan gets the full API. A few options depend on the plan: | Feature | Plans | | - | - | | Rules per prefix | 5 on Hobby and Standard, 10 on Pro, 20 on Enterprise | | Custom metadata (up to 5 keys, 512 bytes) | Pro and Enterprise | | Password-protected share links | Pro and Enterprise | | Uploads without the 1-per-second limit | Pro and Enterprise | | Expiry and automatic deletion under 7 days (down to 1 hour) | Enterprise | | Files served without edge cache (`no-cache`) | Enterprise | Enterprise includes **250 GB** of storage. Rules saved before a downgrade keep applying, and the next change must fit the new plan. ## 🖥️ Blob in the dashboard The [Blob page](https://squarecloud.app/en/dashboard/blob) of the dashboard was rebuilt on top of the new API, in all 8 languages. * **File explorer** with grid and list views, folders, a visibility filter, sorting and multi-select. Bulk delete, visibility, expiry and move show progress and only retry the files that failed. * **Upload queue** with progress, cancel and resume, files of up to 10 GiB, and a choice of folder, visibility and expiry. Leaving the page while uploads run asks first. * **File details:** rename, move, copy, visibility, expiry, headers and metadata. Private previews only load when you ask. * **Share links and temporary links**, each window explaining the difference. Sharing a public file shows a warning with a one-click **Make private**, and deleting, moving or renaming a shared file warns that its links will stop working. * **Folder rules**, with a counter of how many your plan allows. * **S3 access** tab, which creates an API key for Blob and shows its S3 key pair. * Options that depend on the plan say which plan unlocks them. Accounts without an active plan can still view, delete and make files private. * The public [Blob Storage page](https://squarecloud.app/en/blob) was rebuilt around the new features, with a refreshed price comparison. Importing from a URL was removed from the upload window. ## 🧾 Activity feed * The [activity feed](https://squarecloud.app/en/dashboard/activity) was redesigned: days grouped in cards, times on the right and the IP on each row. * The first page covers the **last 24 hours**, and older activity loads as you scroll or click, up to your plan's history window (2 days on Standard, 7 on Pro and 30 on Enterprise). * Blob Storage actions have their own names in the feed: file updates, copies, share links created and revoked, upload tokens and rule changes. ## 🩺 One-click fixes for crashes When an application crashes with a known error, the console now shows **exactly what to change** and applies it for you: it edits the file, environment variable or configuration, restarts the application and watches the result. It says so when the fix worked, when the error came back or when the application didn't start. * Covers the most common crashes: npm install scripts blocked by `allowScripts` (with the ready `package.json` snippet), dependencies installed from Git, peer dependency conflicts, native binaries built for another system, a missing `MAIN` file, missing npm or pip packages, ES modules and Node.js versions, among others. * Only fixes it can prove: a module that is a file of your own project is never offered as a package to install, and edits made while the window is open are kept. * Every fix respects workspace permissions, and "Ask for help" hands the diagnosis to Cubic or support. * Changing custom domains too often now explains that you should wait about 30 minutes. ## ✨ Website and dashboard * The Product page became **[Features](https://squarecloud.app/en/features)**, and every service page was redesigned with fixed facts and clearer copy. The old address redirects. * The **[AI Gateway](https://squarecloud.app/en/dashboard/ai-gateway)** page got an animated diagram, a 3-step quickstart, real examples in JavaScript, Python and cURL, a limits table per plan and a table of error codes. * The **[Domains](https://squarecloud.app/en/dashboard/domains)** page lists each domain with its runtime and shortcuts to metrics and network settings, with search and an illustrated guide to connect a custom domain. * The **[Load Balancers](https://squarecloud.app/en/dashboard/loadbalancers)** page was rebuilt with a live traffic simulation, showing round-robin and failover between replicas. * **Pricing:** a plan chosen before signing in is kept after sign-in, pages only offer the plans that include the feature they describe, Hobby accounts see an upgrade card on databases instead of a paywall, and renewal no longer shows up when a saved card already renews the plan. * **Faster:** the sign-in button no longer waits for the CAPTCHA, Cubic streams answers with a fraction of the work, and the application overview spends far less time on live metrics. * Layout fixed down to 320 px wide in every language. ## 🛡️ API * **Network analytics:** cache misses of the [analytics](/en/api-reference/endpoint/apps/network/analytics), errors, logs and performance routes share one limit of **20 requests per minute** per owner, and cached responses don't count. When edge analytics are busy the routes answer `503 ANALYTICS_BUSY`, or return the most recent cached data for the window. * **Upload and commit:** the request body is capped at **101 MB** (a file of up to 100 MB plus the form), and a larger request is refused while it is still uploading. * **Protection against invalid keys:** an IP that insists on API keys that don't belong to any account is blocked for a few minutes. Valid keys in normal use are not affected. Details in [Authentication](/en/api-reference/authentication). * **AI Gateway:** the new `503 daily_capacity_reached` means the platform's shared daily capacity is used up until 00:00 UTC, different from your key's own `429 daily_spend_limit_reached`. See the [error table](/en/api-reference/ai-gateway). * The [OpenAPI document](/en/api-reference/openapi) no longer lists the routes that only work with a dashboard session, since they never accepted an API key. * **GitHub App with an API key:** [linking](/en/api-reference/endpoint/apps/deploy/github-app-link) and [unlinking](/en/api-reference/endpoint/apps/deploy/github-app-unlink) a repository through the Square Cloud GitHub App now work with an API key that has the `apps:deploy` scope, so the SDK methods for it no longer need a session token. Linking a repository that is not covered by an installation of your own GitHub account answers `403 REPOSITORY_NOT_AVAILABLE`. ## 📚 Documentation * The documentation has a new home page and a refreshed design, with new icons and diagrams. * New pages: [Errors](/en/blob-reference/errors), [S3 compatibility](/en/blob-reference/s3-compatibility), [Links and sharing](/en/blob-reference/links-and-sharing) and a page for every new route. * [Authentication](/en/blob-reference/authentication) shows which scope (`blob:read` or `blob:write`) each route needs. * Everything is available in the 8 languages of the documentation. ## 🎨 Redesigned dashboard, updated runtimes and more capacity This entry gathers everything shipped since the end of August that was not yet in this changelog. The dashboard was reviewed end to end, with configurable navigation and a full mobile pass. Restoring a snapshot now takes a single window. Every runtime and database moved to a new version, billing got clearer, and two new public clusters went live. **If you create databases through the API with a pinned full version, update the `version` field.** [`POST /v2/databases`](/en/api-reference/endpoint/databases/create) accepts the exact current version or a prefix of it. With the new images, a full version that is not the current one now returns `400 INVALID_DATABASE_VERSION`. Send only the major (`"8"`, `"17"`, `"9"`), which always resolves to the latest version of that major. For Redis, the major is now `8`. ## 🖥️ Dashboard ### Configurable navigation * **Navigation position:** left (default), right, top or bottom. The side positions also offer a **compact icon-only rail**, with each item's name on hover. * **Plan accent color** (Standard, Pro and Enterprise) on the navigation and dashboard details. On by default, and it can be turned off. * Set it under **Account → Interface** or from the account menu in the sidebar. The choice is saved on the device and applied before the page first paints, together with the theme, so nothing shifts after loading. * On phones, the top bar and bottom navigation stay the same in every position. * Switching between light and dark theme is now instant, and the CAPTCHA follows the theme. ### Full mobile pass * A swipe from the left edge opens the sidebar. * Inside an application, the top bar gained shortcuts to overview, logs, files and settings. * Larger touch targets on menus, selects, file manager actions, environment variables, DNS, logs, notifications, Blob and paginators. * Dialogs open as bottom sheets, the on-screen keyboard resizes the content instead of covering it, the save button sticks to the bottom, and iOS safe areas are respected across the dashboard and the website. * The plan memory bar and the renew and upgrade buttons fit on screen, and snapshot badges wrap instead of squeezing. * On desktop, the layout is unchanged. ### Loading, error and empty states * Every skeleton on the website and dashboard was audited, and each data-dependent block got its own error state. * The file tree, the application log list and the network logs were redesigned, with empty and error states that say why. * A newly created application shows a notice while its first metrics are collected. * Stripe card errors now come with guidance on the next step, and upload capacity messages are clearer. * When a repository download fails because the GitHub connection expired, the error notice itself offers **one-click reconnection**. On phones, an interrupted upload suggests checking your connection. ### Console and realtime * A console that had timed out from inactivity reconnects on its own when you start, stop or restart, complementing the automatic stream reconnection announced on September 5. * On applications that write a lot of logs, a tab that cannot keep up no longer piles up messages without limit, without affecting the status or other tabs. * Relative timestamps, such as "2 min ago", update on their own. * If a new dashboard version is published while your tab is open, the page recovers on its own instead of failing to load parts of the code. ### Performance Code is now loaded per route, dialogs and the paywall only on click, dashboard translations per section, and billing requests no longer block the initial load. ### Other fixes * Workspace quick actions open the correct application again. * Renewal invoices show up in the notification bell, and upgrade buttons no longer preselect the yearly cycle. * In the activity feed, a batch cache purge done by Cubic shows up as a single row, with the details of each application. * The PostgreSQL recommendation when creating a MySQL database is more concrete, with one-click creation. * The button to resend the sign-in code by email works again. * The GitHub connection is more stable. * Discord role sync waits out Discord's rate limit instead of failing. ## 🗂️ Snapshots * **Restore in a single window**, the same on the account snapshots page and on each application and database page: snapshot summary, target choice (with the origin preselected) and a confirm button that names the target. On an application or database page, the target is fixed and the choice does not appear. If the origin no longer exists, nothing is preselected. * **Create a new database during the restore:** the dashboard creates the database, waits until it is running, restores, and shows the connection URL once, at the end. If the creation fails, the form comes back filled in. If the restore fails after the creation, the retry goes straight to the newly created database. * **Origin and runtime** appear on each row (see the September 17 API change), and the downloaded file name carries the same suffixes. Daily automatic snapshots and those taken when a plan expires are now tagged too. * Restores of large snapshots now get up to 5 minutes to extract their files. * The [Snapshots](https://squarecloud.app/en/resources/snapshots) page now describes retention: each daily snapshot stays available for 7 days, and the most recent one is kept for up to 30 days. ## 🌐 Domains * When setting up a custom domain, the dashboard shows the exact value to add at your DNS provider, ready to copy. * **Accented domains (IDN):** a hostname such as `gestão.site.com` is normalized in the browser (scheme, path, port and trailing dot removed) and converted to Punycode, and only the ASCII form (`xn--gesto-dra.site.com`) reaches the API. The dashboard shows how the domain was saved and displays the readable form in the application header, in Domains and in Load Balancers. Links and DNS records stay in ASCII. * Through the API, [`POST /v2/apps/{app_id}/network/custom`](/en/api-reference/endpoint/apps/network/custom) still expects the hostname in ASCII: convert accented domains to Punycode before sending. ## 💳 Plans and billing ### Downgrade * The flow starts with the reason (cost, low usage, pausing or other) and shows a side-by-side comparison of the plans with prices, what changes, what stays the same, how long you have already paid for, and what the yearly cycle of your current plan would cost. * A downgrade swaps the plan **keeping your current expiry date, with no prorated credit for the difference**. The [pricing](https://squarecloud.app/en/pricing) FAQ describes the rule in all 8 languages and points to **Account → Billing**, where the downgrade is made. * The button is blocked when the account uses more than the lower plan allows: allocated RAM above its limit, custom domains or workspaces the lower plan does not include, or databases without permission. Blob usage above the lower plan's quota only shows a warning. ### Renewal * **Ready-to-pay renewal PIX:** accounts without a saved card receive, when entering the renewal window (3 days before expiry) and again in the last 6 hours, an email with the **QR code in the message itself** and the copy-and-paste code. It is the same charge in both emails and on the invoice page, valid until the end of the plan. * **Expiry reminders** at 14 and 7 days for every account with an active plan. For monthly renewers, the 14-day reminder shows the comparison with the yearly cycle. * **After expiry**, reminders at 3 and 21 days. * **Receipt for renewals after expiry:** a payment that reactivates an expired account generates its own receipt, which explains how to restore your applications from the snapshots taken at expiry. ### Emails * **Plan welcome**, sent a few minutes after the first purchase or a plan step-up (Hobby → Standard → Pro → Enterprise), introducing what the new plan unlocks. * **Plan full notice:** when applications and databases already allocate 95% or more of the plan's RAM, the account receives a suggestion of the next plan, at most once every 30 days. * **Open invoice:** a reminder shortly after creation and a follow-up after 24 hours, if the payment has not happened yet. * Every platform email, including sign-in emails, was rewritten in all 8 languages on a new layout, with the reason for the email in the footer. Sign-in code emails state how long the code is valid and include "Was it you?" and "Wasn't you?" shortcuts for account security. ## 🤖 Cubic * **Guidance mode for accounts without an active plan:** Cubic answers questions about the platform, hosting and development by looking up the platform knowledge base, service status and the web. Each message accepts up to 2,000 characters, with no image attachments and a budget of 500K tokens per day (reset at 00:00 UTC). Actions on applications remain exclusive to accounts with an active plan. * **Batch cache purge:** Cubic purges the cache of up to 50 applications at once and reports, per application, what was not found or has no domain. * **More reliable on long file tasks**, with fewer interruptions in the middle of an edit. * **Knowledge base reviewed** against the documentation: a custom domain is always your own domain, pointed with the three DNS records, and Cubic cites more pages of these docs. * Cubic got a pixel art mascot, which shows up on paginators, empty lists and error screens. ## 📡 Capacity Two new public clusters, **Iara** and **Rigel**, joined the placement of new deploys. ## ⚙️ Containers * **Memory limit without swap:** containers created from now on use only the RAM you allocated. On reaching the limit, the process is terminated (OOM) instead of staying slow with memory stuck at the ceiling. Existing containers follow the rule on their next RAM change. * **Maintenance without interrupting operations:** deploys, commits, restores, database creation and snapshots in progress finish before maintenance starts. ## 📦 Runtimes and databases The new versions apply to deploys made from now on. The `VERSION` field of the [configuration file](/en/getting-started/config-file) still chooses between `recommended` and `latest`. | Runtime | Before | Now | | - | - | - | | Node.js \[JS & TS] (`recommended`) | `24.15.0` | `24.21.0` | | Node.js \[JS & TS] (`latest`) | `26.1.0` | `26.9.0` | | Python (`recommended`) | `3.13.13` | `3.14.7` | | Python (`latest`) | `3.14.5` | `3.14.7` | | Go | `1.26.3` | `1.27.1` | | Rust | `1.95.0` | `1.98.1` | | PHP | `8.5.6` | `8.5.10` | | Ruby | `4.0.4` | `4.0.7` | | .NET/C# | `10.0.8` | `10.0.12` | | Elixir | `1.19.5` | `1.20.4` | | Java | JDK `25` | JDK `25.0.4` | The `recommended` Python version moved from 3.13 to 3.14. If a dependency of your project does not publish packages for Python 3.14 yet, check compatibility before your next deploy. The images still ship ffmpeg, Chromium and the build libraries used by native packages. | Database | Version | | - | - | | MongoDB | `8.3.11` | | PostgreSQL | `17.11` | | MySQL | `9.7.2` | | Redis | `8.8.3` | The new versions apply to databases created from now on; existing databases stay on the version they were created with. All of them keep TLS connections, and Redis 8.8.3 includes the JSON, Search (`FT.*`), TimeSeries (`TS.*`), probabilistic (`BF.*`, `CF.*`, `TDIGEST.*`) and Vector Sets modules. ## ✨ Website * **New [Features](https://squarecloud.app/en/features) page:** an overview of the platform in seven categories (deploy, network, scale, observe, storage, automate and trust). The "Services" header menu became "Features". * **New pages:** [APIs and backends](https://squarecloud.app/en/apis), [SaaS](https://squarecloud.app/en/saas) and [Domains](https://squarecloud.app/en/resources/domains). * Every `/resources` page was redesigned and got its own illustrations. * The [support center](https://squarecloud.app/en/support) was redesigned with Cubic as the first line of help, and the status button takes signed-in users straight to the status page in the dashboard. * The [Enterprise](https://squarecloud.app/en/enterprise) page got a new contact section, and the Enterprise checkout now stacks on phones. ## 📦 Snapshots know their runtime and origin Every snapshot listing (`GET /v2/apps/{app_id}/snapshots`, `GET /v2/databases/{database_id}/snapshots` and `GET /v2/users/snapshots`) now carries two extra fields per entry: | Field | Values | Meaning | | - | - | - | | `runtime` | the application's language (`javascript`, `python`, ...) or the database engine (`mongo`, `mysql`, `postgres`, `redis`) | What the snapshot was taken from. | | `origin` | `manual` or `automatic` | Whether it was requested (API, dashboard, CLI) or taken by the daily schedule. | Both are `null` on snapshots taken before this change. The `name` of a new snapshot carries the same information as suffixes (`__`), so the download URL format is unchanged. The restore endpoints (`POST .../snapshots/restore`) accept the `name` exactly as the listing returns it: pass it through unchanged as `snapshotId`. ## 🧭 Clearer error codes A handful of endpoints answered some failures with a bare `{ "status": "error" }` and no code, or with a `400` for something that was really "not found". Those cases now carry a code and the right HTTP status. Nothing was renamed: every code below already existed in the API's vocabulary and in the SDK types. ### Workspaces | Endpoint | Before | Now | | - | - | - | | `DELETE /v2/workspaces` | `400` with no code when the workspace was already gone | `404 WORKSPACE_NOT_FOUND` | | `POST` / `DELETE /v2/workspaces/applications` | `400` with no code when the workspace vanished mid-request | `404 WORKSPACE_NOT_FOUND` | | `POST /v2/workspaces/members` | `400` with no code when the workspace vanished mid-request | `404 WORKSPACE_NOT_FOUND` | | `PATCH` / `DELETE /v2/workspaces/members` | `400` with no code when the member had already left | `404 MEMBER_NOT_FOUND` | `INVALID_ID` (`400`) is unchanged, but it is now answered before anything else runs, so a malformed `workspaceId` no longer counts against the endpoint's rate limit. ### Files, logs, cache and deploys | Endpoint | Change | | - | - | | `PUT /v2/apps/{app_id}/files` | `content` officially accepts three shapes: a UTF-8 string, a plain array of byte values (`[]` writes an empty file) or a `{ type: "Buffer", data }` object. Content over **10 MB** is refused with `413 FILE_TOO_LARGE`; writes are limited to **10 per 5 seconds** per user (`429 KEEP_CALM`). | | `GET /v2/apps/{app_id}/logs` | The `404` now carries `LOGS_UNAVAILABLE` (or the application's own reason) instead of no code. | | `POST /v2/apps/{app_id}/network/purge_cache` | A failed purge answers `500 PURGE_CACHE_FAILED` instead of no code. | | `POST /v2/apps` and `POST /v2/apps/{app_id}/commit` | When too many uploads are being processed at once, the API answers `503 UPLOAD_BUSY` instead of failing the upload. Just retry in a moment. | ### Two codes any endpoint can return | Code | HTTP | Meaning | | - | - | - | | `KEEP_CALM` | 429 | The endpoint's rate limit was exceeded; wait and retry. | | `DATABASE_UNAVAILABLE` | 503 | The service is briefly unavailable; retry in a few seconds. Existing applications and databases are **never** reported as not found in this state. | ### Dashboard * The application console now reconnects on its own whenever the live stream drops, instead of staying disconnected until you click reconnect. * Removing a member or an application that was already removed elsewhere simply refreshes the list. ## 🗞️ Other updates ### 🤝 New partner program We are introducing a new, fully public partner program. Learn more and apply at [squarecloud.app/partners](https://squarecloud.app/partners). ### 🤖 Cubic and the AI Gateway on a new AI infrastructure In late August we migrated Square Cloud's entire AI layer to a new infrastructure, focused on faster responses, more stability and more generous limits. ZDR, our full privacy policy and zero logs are unchanged. **Cubic (the dashboard assistant)** * **Faster answers.** The first token arrives in about 2 seconds even in long conversations; the tens-of-seconds wait before a reply started is gone. * **No queue.** Capacity scales per request: the "AI at maximum capacity" message no longer exists. If a model provider fails, Cubic switches to another one automatically. * **Images with more formats and more memory.** Besides JPEG and PNG, Cubic accepts WebP. Attached images go through a dedicated analysis that transcribes text, errors and visible details, and that description stays in the conversation for later messages. * **Faster web search**, with results in about 1 second. **Voice transcription** remains on every plan, with the same 5-second to 2-minute window. * **New daily token limits per plan** (reset at 00:00 UTC): Hobby 2M; Standard 5M (4 GB), 7M (6 GB) and 10M (8 GB); Pro 15M; Enterprise unchanged. The unlimited-usage period has ended; usage counts against the plan's daily budget, visible in the chat's usage bar. **AI Gateway (OpenAI-compatible API)** * Routed by the same engine as Cubic, with the same drop in latency. * New limits per plan: * **Standard:** 1,000 requests per day, base fair-use allowance, 16,384-token context, up to 4,096 output tokens, 1 concurrent request, a minimum 5s interval (was 4s). * **Pro:** 5,000 requests per day, base allowance, 24,576-token context, up to 6,144 output tokens, 1 concurrent request, 2s interval. * **Enterprise:** unlimited requests, 5x the base allowance, 32,768-token context, up to 8,192 output tokens, 2 concurrent requests, no interval. * New 429 codes in the OpenAI format: `daily_request_limit_reached` (daily request ceiling) and `daily_spend_limit_reached` (daily fair-use allowance). Both reset at 00:00 UTC. * Still no streaming and no images; the built-in `web_search` keeps working. **About the permitted use of the AI Gateway.** The AI Gateway is a beta product and is currently **completely free**, offered as a courtesy to the Standard, Pro and Enterprise plans so you can add AI to your own projects hosted on Square Cloud. **Reselling, relaying or exposing the AI Gateway for mass third-party use is not allowed** (offering the API to other users, feeding third-party AI services, or distributing access through a single plan). We identified this kind of activity consuming most of the capacity; the new limits and the fair-use allowance exist to stop exactly that, and a project with normal usage is unlikely to get anywhere near them. Accounts that keep this pattern may have their AI Gateway access suspended. Full details in the [AI Gateway documentation](/en/api-reference/ai-gateway). ## 🔑 Up to 10 scoped API keys per account Your account used to have **one** API key, with access to everything: deploys, files, environment variables, databases and object storage. If a CI pipeline, a third-party script or any tool needed access, that was the key you handed over. Now you create **up to 10 named keys** from your account settings, and each one carries two independent axes: **what** it can do, and **where** it can act. **Your existing key keeps working and needs no action from you.** The token format did not change, so nothing you already have integrated broke. It now appears in your key list like any other, with its last-use timestamp and a revoke button. The secret of a new key is shown **exactly once** and is never readable again. Keys are stored as an irreversible hash. ### The 18 permissions | Scope | Grants | | - | - | | `account:read` | Read your account data | | `apps:read` | List applications, read status, logs and metrics | | `apps:control` | Start, stop and restart | | `apps:write` | Edit application configuration | | `apps:deploy` | Ship new code | | `files:read` | Browse and read the file tree | | `files:write` | Create, edit and delete files | | `envs:read` | Read environment variables | | `envs:write` | Create and change environment variables | | `snapshots:read` | List and download backups | | `snapshots:write` | Generate and restore backups | | `databases:read` | List databases and read status | | `databases:write` | Create, alter and delete databases | | `databases:credentials` | View and rotate database credentials | | `workspaces:manage` | Manage workspaces and members | | `ai:chat` | Use the AI Gateway | | `blob:read` | List and download objects | | `blob:write` | Upload and delete objects | Pass exactly `["*"]` for full access, which also covers scopes added in the future. Some scopes are broader than their name suggests. `files:write` and `apps:deploy` amount to arbitrary code execution in your container, `snapshots:read` returns the whole application **with its environment variables inside**, `databases:credentials` is your database password, and `workspaces:manage` grants access to **other accounts** in a way that survives revoking the key. Request the minimum. ### Restricting a key to specific resources `resources` takes application and database ids. A CI key that only sees the project of that pipeline exists, works, and simply cannot reach the rest of your account. Omit it for whole-account access. `resources` **cannot be combined with `blob:read`/`blob:write`** (nor with `["*"]`, which includes them), and the request answers `CONFLICTING_RESOURCES`. Object storage belongs to the account and no object carries an application id, so the restriction would have nothing to apply to there. Create one key for the applications and another for object storage. ### New error codes | Code | HTTP | Meaning | | - | - | - | | `MISSING_SCOPE` | 403 | The key lacks the scope this route requires | | `RESOURCE_NOT_ALLOWED` | 403 | The key is restricted to resources that do not cover this request | | `CONFLICTING_RESOURCES` | 400 | `resources` was combined with a blob scope or `["*"]` | | `APIKEY_LIMIT_REACHED` | 400 | The account is at 10 live keys | ## 💻 Connect the VS Code extension without pasting your key The VS Code extension now requests authorization **as an application**, instead of asking you to paste your account key into a text field. The extension opens a request, shows an 8-character code on screen, and you type that code in the dashboard to approve. What it receives is a **key of its own**: minimum scope, valid for 90 days, and listed alongside your other keys so you can revoke it whenever you want. The 8-character code exists only on the extension's screen: it never travels in the link and no endpoint returns it. An authorization link that reached you through any other channel will not work without it. After connecting, the extension shows which account it was bound to — check it. The authorization is bound to the extension that started it, so a request intercepted along the way cannot be completed by anything else. ## 👥 More workspaces The cap went up: **5 workspaces** on Standard and **10** on Pro and Enterprise. ## 🤖 AI Gateway (Beta): use Square Cloud's AI in your own apps You can now use Square Cloud's hosted AI model inside your **own** products — chatbots, assistants, automations — through the new **AI Gateway**, an **OpenAI-compatible** chat completions API. If your code already speaks the OpenAI API, no rewrite is needed: point the SDK at our base URL, use your account API key, and set the model to `cubic`. ```javascript theme={"system"} import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.squarecloud.app/v2/ai", apiKey: process.env.SQUARECLOUD_API_KEY, }); const completion = await client.chat.completions.create({ model: "cubic", messages: [{ role: "user", content: "Hello!" }], }); ``` * **Works with any OpenAI SDK** (JavaScript, Python, or plain HTTPS) at `POST /v2/ai/chat/completions`. * **Built-in web search**: the model searches the web on its own when the conversation needs current information, citing result URLs in the answer. * **Function calling** in the standard OpenAI format, with up to 32 tool definitions per request. * **Per-plan limits**: Standard gets a 16,384-token context and 4,096-token output; Pro raises it to 24,576/6,144; Enterprise to 32,768/8,192 with 2 concurrent requests. Every request bills its real tokens against the plan's **daily AI token budget** — the same one the dashboard AI assistant uses (reset at 00:00 UTC). * **Beta with free early access**: during the beta there is no extra charge beyond your plan's daily AI token budget. Available on Standard plans and above. See the full [AI Gateway reference](/en/api-reference/ai-gateway) for the request contract, error codes and examples. ## 📋 Blob Storage actions in the account activity feed The account activity feed (available on Standard plans and above) now lists **Blob Storage actions** alongside your application actions: uploads, deletions, and chunked uploads being started, completed or aborted — each with the source IP, user agent and authentication type. Individual chunk parts are deliberately left out, so a large chunked upload shows up as clean start/complete events instead of hundreds of rows. ## 📦 1 GiB uploads from the dashboard Following the chunked upload flow released on July 31, the dashboard's Blob page now uses it automatically: files above 100 MB (up to **1 GiB**) upload in chunks, with real byte-level progress and a cancel button for in-flight uploads. ## 📦 Blob Storage: 1 GiB uploads, any file type, friendlier limits The Blob Storage API gained a chunked upload flow that raises the maximum object size from 100 MB to **1 GiB**, dropped the MIME allowlist in favor of accepting practically any file type, and had its rate limits retuned so bursts of normal usage no longer trigger long lockouts. ### ⬆️ Chunked uploads up to 1 GiB `POST /v1/objects` is unchanged and still caps a single request at 100 MB (the largest body Cloudflare's edge accepts). Files above that now go through a four-step flow on `/v1/objects/chunked`: 1. [Open the upload](/en/blob-reference/endpoint/chunked-init) (`POST`) and receive an opaque `upload` token plus the chunk limits. 2. [Send each chunk](/en/blob-reference/endpoint/chunked-part) (`PUT`) as a raw body of 5 to 32 MB, in any order, up to 6 in parallel; a failed part can simply be re-sent. 3. [Complete](/en/blob-reference/endpoint/chunked-complete) (`PATCH`) with just the token: the part list is read back from storage, so the client never tracks ETags. 4. [Abort](/en/blob-reference/endpoint/chunked-abort) (`DELETE`) to cancel and free the stored chunks (idempotent, and recommended whenever the user gives up). There is no server-side session: the token is the whole upload state, so uploads survive page reloads, and each account can keep up to 8 uploads open at once. If the account's quota fills up while parts are uploading, completion fails with `STORAGE_QUOTA_EXCEEDED` but the upload is left open, so you can free space and retry instead of re-uploading the whole file. ### 📁 Any file type accepted The MIME allowlist is gone. The stored extension now comes from the **filename you send**, so formats with no registered MIME type (`.bam`, `.vcf`, `.fasta`, `.fastq`, `.parquet`, `.h5`, `.npy` and so on) upload just fine, and compound compression suffixes are preserved (`reads.fastq.gz` stays `.fastq.gz`). Unknown formats are served as `application/octet-stream`, browser-renderable formats (`.html`, `.svg`, `.xml`) keep being forced to download, and only executables/installers are refused, with the new `BLOCKED_FILE_TYPE` code. ### ⚙️ Retuned limits * **Expiration range is now 7 to 1825 days** (5 years). Values below 7 days are rejected with `INVALID_OBJECT_EXPIRE`; update any preset shorter than a week. * **Minimum file size dropped from 1 KB to 512 bytes.** * \*\*Storage overage now costs R$ 0.20 per started GiB** (was R$ 0.25). * **Rate-limit blocks now expire with their window** instead of punishing bursts: object deletes went from 1 per second to 10 per 10 seconds, listing overruns block for 30 seconds instead of 5 minutes, stats overruns for 60 seconds instead of 5 minutes, and the chunked routes allow parallel opens, completes and cancels. * Chunk sending is exempt from the account-wide API budget, so a long upload cannot exhaust your API quota for the rest of the platform. See the updated [Blob Reference](/en/blob-reference/authentication) for the full contract, including the new error codes (`TOO_MANY_OPEN_UPLOADS`, `TOO_MANY_CONCURRENT_CHUNKS`, `INVALID_UPLOAD_TOKEN`, `INVALID_CHUNK_PART`, `CHUNK_TOO_LARGE`, `CHUNK_TOO_SMALL`, `EMPTY_CHUNK`, `NO_CHUNKS_UPLOADED`, `UPLOAD_NOT_FOUND`). ## 🚀 Load Balancers, CLI v3 and a new generation of SDKs This is one of the largest tooling waves we have ever shipped at once: a brand new **Load Balancer** capability for custom domains, the official CLI at **v3** with full platform parity, and new releases across **every official SDK**: JavaScript v5, Go v2, Blob v2, Python v4.1 and API Types v3. The public API and the Blob Storage API also gained new endpoints and richer responses, and the documentation you are reading is now fully available in 8 languages. ### ⚖️ Load Balancers: one domain, multiple applications You can now attach the **same custom domain to more than one application**. Traffic is balanced across the applications at the edge, with **automatic failover**: if one application goes offline, requests keep flowing to the healthy ones. * Per-plan capacity for applications sharing one domain: **2 on Standard, 5 on Pro and 10 on Enterprise** (going over it returns `LOAD_BALANCER_LIMIT_REACHED`). * Inspect your balancers through the API (`GET /v2/apps/load-balancers`), the SDKs, or the CLI (`squarecloud app load-balancers`). * The new `GET /v2/apps/domains` endpoint complements it by listing every domain configured across your applications in one call. ### ⌨️ Square Cloud CLI v3 The CLI went from exposing a small slice of the platform to **full parity** with it. Everything you can do in the dashboard, you can now do from the terminal. See the updated [CLI reference](/en/cli-reference/installation) for every command. * **Platform health:** `squarecloud status` shows the health of Square Cloud services. * **Deep application tooling:** `app info`, `app metrics` (last 24 hours of CPU, RAM, and network), `app realtime` (live event stream, Ctrl+C to exit), `app domains`, `app load-balancers`, `app status --all`, and `commit --path` to commit a subdirectory. * **Environment variables:** `app env list/set/remove/replace`, including bulk import with `--from-file .env`. * **Remote file manager:** `app file list/read/write/move/delete` straight from the terminal. * **Deploys and Git:** `app deploy list/current/webhook`, plus GitHub App `link`/`unlink`. * **Network suite:** `app network dns/domain/analytics/errors/logs/performance/purge-cache`, with analytics filters and custom time ranges. * **Snapshot restore:** both `app snapshot restore` and `db snapshot restore`. * **Complete `db` tree:** list, create, info, update, delete, start/stop, status, metrics, credentials (certificate and rotation), and snapshots. * **Complete `workspace` tree:** create, manage members and roles, share applications, and generate invite codes. * **Better UX everywhere:** a global `--json` flag for scripting, optional app/database IDs (resolved from the `squarecloud.app` config file or an interactive picker), y/N confirmation on every destructive action with `-y` to skip, Ctrl+C cancels in-flight requests, and `SQUARECLOUD_DEBUG=1` for request-level debugging. * **Fixes that matter:** authentication failures now exit with code 1, the application picker no longer hides API errors, and editing the `squarecloud.app` config file preserves your existing keys. ### 📦 A new generation of SDKs Every official SDK shipped a new release in this wave, all aligned with the same current API contract. **JavaScript SDK v5 (`@squarecloud/api`)** — see the updated [SDK reference](/en/sdks/js/client) and the [v4 → v5 migration guide](/en/sdks/js/migrating_to_v5): * The snapshots transition is complete: the old backup classes and methods were removed in favor of `Snapshot`/`DatabaseSnapshot`. * New `domains()` and `loadBalancers()` account modules, richer `create()`/upload results (language name and version, CPU, description, subdomain), and `dns()` returning the actual record list with per-record status. * Analytics with **11 drill-down filters** and **4 new breakdowns** (IPs, status codes, bots and content types). * The `APIErrorCode` export follows the standardized error codes, keeping the old names as deprecated aliases so existing comparisons keep working. **Go SDK v2 (`sdk-api-go`)** — rewritten from scratch, now covering the **entire Square Cloud API** with zero external dependencies: * Applications (metrics, realtime SSE stream, snapshots with restore, file manager, environment variables, deploys with GitHub App integration, DNS, analytics and the network suite), a complete databases interface, a complete workspaces interface, and platform status. * Machine-readable errors: failures return `*rest.APIError` with the HTTP status and the public error code (for example `APP_NOT_FOUND`), plus the `rest.ErrorCode(err)` and `rest.IsRateLimit(err)` helpers. * Real context support (`rest.WithContext(ctx)` propagates cancellation and deadlines) and the new module path `github.com/squarecloudofc/sdk-api-go/v2`. **Python SDK v4.1 (`squarecloud-api`)** — a big feature sync: * Application and database **metrics** (last 24 hours), **realtime** status streaming over SSE, GitHub App deploy `link`/`unlink`, and database snapshot list/create. * Edge network suite for websites: errors, logs, performance and cache purge, plus domain analytics with the full set of drill-down filters and custom time windows. * Account-level calls: platform status, user snapshots, domains and load balancers. **Blob SDK v2 (`@squarecloud/blob`)** — synced with the current Blob Storage contract: * Paginated listing via `continuationToken`, and `objects.delete` now accepts the object's public URL directly. * Uploads are validated client-side (name, size, expiration and MIME type) and queued to respect the concurrency limit, with automatic retry when the service is busy. * Errors now expose the machine-readable `error.code`, following the standardized error codes. **API Types v3 (`@squarecloud/api-types`)** — the canonical TypeScript contract, fully synced: * Types for the new domains and load balancer endpoints, the analytics filters and breakdowns, raw status variants, and the `APIErrorCode` union with the pre-standardization names kept as deprecated aliases. ### 🔌 Public API and Blob Storage improvements * **New endpoints:** `GET /v2/apps/domains` (every domain across your applications) and `GET /v2/apps/load-balancers`. * **Deeper analytics:** the domain analytics endpoint now accepts 11 drill-down filters (`country`, `ip`, `path`, `status`, `os`, `browser`, `protocol`, `referer`, `provider`, `content_type`, `bot`) applied to every breakdown at once, and returns 4 new breakdowns: IPs, status codes, bots and content types. * **The SDKs caught up with the full contract:** capabilities the API already offered are now first-class across the official SDKs and typings, such as creating a database with just the engine's major version (for example `"8"`), committing into a subdirectory via the `path` query parameter, raw status variants with `rawData=true` and the ruby runtime. * **Blob Storage:** paginated object listing via a continuation token and the standardized machine-readable error codes are now exposed end to end through the Blob SDK v2. ### 🛡️ Platform and account improvements * **Stay signed in, safely:** sessions now renew automatically while you use the platform, so active users are not asked to log in again; idle sessions expire sooner, which tightens security without getting in your way. * **Reinforced card security:** we extended the bank's 3DS authentication to more card charges for extra protection against fraud, and when the bank requires an action you receive a clear e-mail to complete the payment. * **Brazilian invoices (NFSe):** service invoices are now issued with complete fiscal data (company name, CPF/CNPJ and address), and you can set your CNPJ directly in the dashboard. When your NFSe is available, you automatically receive a personalized e-mail with a breakdown explaining what the invoice is and what it covers. * **Proactive RAM alerts:** if an application stays close to its allocated memory limit, the owner receives an e-mail warning before it becomes a problem. * **More stable long-lived connections at the edge:** realtime streams (SSE) and WebSockets no longer drop on long sessions, and the edge error pages were redesigned with proper localization. * **Smarter renewal reminders:** expiry notices now understand when automatic renewal is handling your cycle, and the transactional e-mails were revised in all 8 languages. ### 📚 Documentation, now in 8 languages * The documentation is now fully available in **English, Portuguese, Spanish, French, German, Italian, Japanese and Simplified Chinese**. * The **API reference** was enriched endpoint by endpoint with unique explanations, examples and per-route error tables. * The **CLI reference** was rebuilt for v3 (every command documented), the **JavaScript SDK** section was updated for v5 with a dedicated migration guide, and the **Blob Storage reference** was audited against the live service. ### 📊 Quick version summary | Product | Version | Main highlight | | - | - | - | | Load Balancers | new | One custom domain served by multiple applications, with automatic failover | | Square Cloud CLI | **v3** | Full platform parity: databases, workspaces, file manager, env vars, deploys, network suite, and `--json` everywhere | | JavaScript SDK | **v5** | Snapshots naming completed, domains and load balancers, deeper analytics, standardized error codes | | Go SDK | **v2** | Complete rewrite with full API coverage, typed errors, and zero dependencies | | Python SDK | **v4.1** | Metrics, realtime SSE, GitHub App deploys, edge network suite, database snapshots | | Blob SDK | **v2** | Pagination, typed error codes, client-side validation, smarter uploads | | API Types | **v3** | Full sync with the current API contract, `APIErrorCode` with deprecated aliases | ## 🧹 Standardized error codes across the API and Blob Storage We renamed a batch of error codes in the Square Cloud API and the Blob Storage API to follow a single, predictable convention: `INVALID_X`, `X_NOT_FOUND`, `X_FAILED` and `X_LIMIT_REACHED`. If your integration matches on error codes, update it to the new names below. ### API — renamed codes | Old code | New code | | - | - | | `ID_INVALID` | `INVALID_ID` | | `CODE_INVALID` | `INVALID_CODE` | | `NAME_INVALID` | `INVALID_NAME` | | `MEMORY_INVALID` | `INVALID_MEMORY` | | `DATABASE_TYPE_INVALID` | `INVALID_DATABASE_TYPE` | | `DATABASE_VERSION_INVALID` | `INVALID_DATABASE_VERSION` | | `UNKNOWN_WORKSPACE` | `WORKSPACE_NOT_FOUND` | | `UNKNOWN_MEMBER` | `MEMBER_NOT_FOUND` | | `MAX_APPLICATIONS_REACHED` | `APPLICATIONS_LIMIT_REACHED` | | `MAX_MEMBERS_REACHED` | `MEMBERS_LIMIT_REACHED` | | `FAILED_WORKSPACE_CREATION` | `WORKSPACE_CREATION_FAILED` | | `FAILED_DATABASE_CREATION` | `DATABASE_CREATION_FAILED` | | `FAILED_CLUSTER_SELECTION` | `CLUSTER_SELECTION_FAILED` | | `FEW_MEMORY` | `INSUFFICIENT_MEMORY` | | `FAILED_READ` | `READ_FAILED` | | `FAILED_DELETE` | `DELETE_FAILED` | | `FAILED_RENAME` | `RENAME_FAILED` | | `FAILED_TO_SAVE` | `SAVE_FAILED` | | `FAILED_RESET` | `RESET_FAILED` | | `FAILED_UPLOAD` | `UPLOAD_FAILED` | | `FAILED_UPLOAD_DATA` | `STORAGE_UPLOAD_FAILED` | | `DELETE_ERROR` | `DELETE_FAILED` | | `COMMIT_ERROR` | `COMMIT_FAILED` | | `INTERNAL_ERROR` | `INTERNAL_SERVER_ERROR` | | `REGEX_VALIDATION` | `INVALID_DOMAIN` | | `CAN_NOT_SET_SUBDOMAIN` | `CANNOT_SET_SUBDOMAIN` | | `INVALID_APP` | `METRICS_NOT_SUPPORTED` | | `SUBSCRIPTION_REQUIRED` | `UPGRADE_REQUIRED` | Notes: `INVALID_APP` was renamed only on `GET /v2/apps/{app_id}/metrics` (it signals that applications under 512 MB of RAM do not collect metrics). `KEEP_CALM`, the short-lived rate-limit code of the main API, keeps its name. ### Blob Storage — renamed codes | Old code | New code | | - | - | | `RATELIMIT` | `RATE_LIMITED` | | `ACCESS_DENIED` | `PERMISSION_DENIED` | | `FAILED_DELETE` | `DELETE_FAILED` | | `FAILED_LIST` | `LIST_FAILED` | | `INVALID_FILETYPE` | `INVALID_FILE_TYPE` | | `PAYLOAD_TOO_LARGE` | `FILE_TOO_LARGE` | Notes: the authentication `ACCESS_DENIED` (401 for a missing or invalid API key) is unchanged; only the active-plan gate on object upload now returns `PERMISSION_DENIED`. `FILE_TOO_LARGE` replaces `PAYLOAD_TOO_LARGE` on the object upload 413 (100 MB cap). ## 🌍 8 languages, a faster dashboard, smarter renewals, and improvements across the platform! Since the last changelog, we focused this window on two goals: making Square Cloud truly yours anywhere in the world, and making day-to-day use faster and smoother. The big highlight is the arrival of **four new languages** — now **eight** — covering the website, the dashboard, your account emails, and the sign-in flow. Alongside it comes an extensive round of performance, billing, integration, and experience improvements. ### 🌍 Square Cloud now speaks 8 languages The platform gained **four new languages**: **Japanese (日本語), French (Français), German (Deutsch), and Italian (Italiano)**, joining Portuguese, English, Spanish, and Chinese — for a total of **eight languages**. * **Full coverage:** the translation spans the **entire website, the dashboard, your account emails, and the whole sign-in flow**, for a consistent end-to-end experience. * **A language that follows you:** your language preference now **persists across sessions** and stays in sync when you switch languages. ### ⚡ Faster, from the cluster to the dashboard We invested in end-to-end performance — from the platform core to your browser — so everything responds faster, on any connection. * **Cluster \~2x faster:** deep optimizations in the platform core made communication with your apps and containers about **2x snappier**. * **Modernized to React 19** with deferred loading of heavy chunks (charts, payments, animations), speeding up page loads. * **Images and assets \~59% smaller** after a full recompression of the site. * **Faster marketing pages** via prerendering, preconnect, and trimmed translation payloads. * **Smoother scrolling**, with a less janky header and fewer re-renders in background animations. * **Improved PWA:** correct theme color, maskable icon, iOS standalone support, and a smoother sign-in flow in the installed app. ### 🎨 What's new in the dashboard * **Bulk file upload** in the file manager, with automatic compression and validation. * **Redeem history:** a new **redeemed gift codes** section in your account, plus a redesigned redeem page with FAQ and "how it works" sections. * **Auto-renewal, rethought:** setting it up takes seconds — save a card and your plan renews on its own, with the next charge's status always clear and visible in the dashboard. Less friction to set up, and peace of mind around expiry. * **Smart PostgreSQL suggestion** when creating a MySQL database, helping you pick the right tool for the job. * **Snapshot experience:** cooldown and processing feedback modals, and dark/light theme file previews. * **Google account connection** suggested directly in your notifications. * **Clearer file-content modal**, with save support. ### 🤝 A more integrated Discord * **Roles always up to date:** when you sign in with Discord, your account **automatically rejoins the Square Cloud server and re-syncs your roles**, keeping your access correct even if something drifted. * **More reliable sign-in:** linking and signing in with Discord became more robust, with better error handling and automatic retries. ### 🌐 Hosted sites * **Faster real-time:** we improved support for **WebSocket and Server-Sent Events** connections to your hosted apps — more speed and smoothness for live dashboards, chats, and long-lived streams. * **DNS up to 6x faster:** analysis of newly added domains and subdomains is now about **6x faster**, making them reachable much sooner. ### 💳 Billing and renewals * **Smarter auto-renewal:** added a card right before your plan expires? Renewal still happens on time — with safeguards to make sure **you're never billed twice** for the same cycle, including when a manual payment is in flight. * **Richer history:** your **gift codes redeemed in the last 12 months** now appear alongside your invoices. * **More robust payment** processing. ### 📦 API and storage * **Large-app snapshots in the background:** heavy snapshots now build in the background and show up in your list automatically when ready — fire it off and keep working. * **More reliable daily snapshots:** automated daily snapshots can now resume from where they left off if a run is interrupted. * **Faster loading** of workspaces and the dashboard, thanks to backend performance improvements. * **Clearer errors and docs:** oversized file reads now return a proper "file too large" response, and several endpoint descriptions are more precise. * **More flexible API key rotation** and a smoother experience for accounts without an active plan when accessing features that need a plan. * **Storage (Blob):** **faster object listing** and **more stable uploads** even when you push several at once. ### 📧 Your account emails, rethought We refined the whole account-email experience this cycle: * **Localized in all 8 languages**, matching the platform's new translation coverage. * **Refreshed onboarding:** welcome messages now show how to get the most out of the platform — the **VS Code extension** (deploy straight from your editor), the **CLI**, and the **mobile app** to monitor and restart your apps from anywhere. * **Clearer follow-up emails** (welcome, tips, and reminders), better organized and consistently formatted. ### 📈 Web, privacy, and discovery * **llms.txt** so AI search assistants can accurately describe Square Cloud's plans, runtimes, and features. * **Privacy controls** for analytics (GA4) with a granular preferences panel on the Privacy page. * **2026 revision** of the Terms of Service, Usage Policy, and Privacy Policy. ### 🔐 Security and reliability We continue with **ongoing security and session-reliability improvements** behind the scenes, keeping your account protected without getting in your way. ### 📊 Quick summary | Area | Highlight | | - | - | | Languages | **+4 languages** (Japanese, French, German, Italian) → **8 total**, covering website, dashboard, emails, and sign-in | | Performance | **Cluster \~2x faster**, React 19, assets **\~59% smaller**, faster pages | | Dashboard | Bulk upload, rethought auto-renewal, redeems, and snapshot experience | | Discord | Server rejoin + role re-sync on sign-in | | Hosted sites | Faster real-time (WebSocket/SSE), **DNS \~6x faster** | | Billing | Smarter auto-renewal with no double-billing, gift-code history | Thank you for building with Square Cloud. Every one of these updates was born from the feedback of people who use the platform every day — keep your ideas and suggestions coming. There's much more on the way. ❤️ ## 🚀 New VS Code extension, Node.js SDK v4, stable types, and a completely rethought dashboard! Ten days of intense work across nearly every Square Cloud product, and the result is one of the largest batches of releases we have ever shipped in a single window. We rewrote the VS Code extension from scratch, published a new major version of the official Node.js SDK, stabilized the API types, updated and expanded the OpenAPI documentation, and redesigned a large part of the dashboard experience — from the notification center to a brand new plan upgrade system. ### 🧩 VS Code Extension v5 The Square Cloud extension for Visual Studio Code received its **biggest update since launch**. This was not a small set of incremental improvements: the extension was **completely rewritten** on top of the new generation of our SDK, opening the door to features the community had been asking for and leaving the codebase much more solid for what is still to come. * **Workspaces directly in the editor:** the full workspace organization of your applications, previously available only in the web dashboard, is now accessible directly from the VS Code sidebar. * **Databases at your fingertips:** support for MongoDB, Redis, PostgreSQL, and MySQL inside the editor — view your instances and the overview of your data infrastructure without opening the browser. * **Environment variables:** check and adjust your application variables without leaving VS Code. Perfect for debugging configuration issues in seconds. * **Status in the editor status bar:** the state of your applications appears in real time in the VS Code status bar, without needing to open any tab or panel. * **More stable, more consistent:** the rewrite on top of SDK v4 made the extension predictable, with a polished experience across all supported languages. ### 📦 Official Node.js SDK v4 The official Square Cloud SDK for JavaScript/TypeScript reached its **new major version: v4**, and this is by far the largest evolution of the library in its entire history. v4 opens programmatic access to nearly the entire platform, with entirely new modules and deep improvements to the existing ones. * **Databases (brand new module):** list, create, and check the status of your instances. The new `Database` class gives you complete control: start, stop, update, delete, metrics, TLS certificate read, password/certificate rotation, and **database snapshots** with list, create, and **restore**. * **Workspaces:** manage them entirely through code — `list`, `find`, `create`, `leave`, and `delete` workspaces, generate invite codes, manage members (add, update, remove, roles), and share/unshare applications. * **Environment variables:** dedicated application module with `list`, `set`, `replace`, and `delete` — perfect for deploy automations and keeping environments in sync. * **Metrics and realtime:** `getMetrics()` returns the time series of **CPU, RAM, and network from the last 24 hours**. `realtime()` opens a **Server-Sent Events** stream with live updates from your application. * **GitHub-integrated deploys:** `linkGithubApp()`, `unlinkGithubApp()`, and `current()` to automate your deploy pipeline directly from the SDK. * **Application snapshots and restore:** the old "backups" concept became **snapshots** across the entire library, with clearer naming and **snapshot restore** (`snapshots.restore`) — a long-requested feature. Listing snapshots in the user scope is also available. * **Edge analytics and Network suite:** complete observability with **errors**, **logs**, **performance**, and **cache purge**, plus **DNS** data. `purgeCache()` was simplified and now clears the cache for the entire application. * **Platform health and new data:** `service.status()` in a single call, new fields on databases (language, creation date), applications (domain, custom domain, creation date), and users, plus **public error codes** accessible via `err.code` (e.g., `err.code === "FAILED_READ"`). * **Next-generation types and quality:** consumption of the new **API Types** line (now stable), more accurate autocomplete, several bug fixes, and **runnable examples** ready to copy and run. > **Breaking changes (3.x → v4):** `client.users.*` became `client.user.*`; `app.backup` / `app.backups` became `app.snapshots`; `app.deploys.list()` returns `Deployment[][]` (use `.flat()` for the old behavior); `app.network.dns()` returns `{ ownership, ssl }`; `app.network.analytics()` requires `{ start, end }`; in workspaces, `members` / `applications` became `memberList` / `applicationList`; **minimum Node is now 20+**. ### 🔌 Public API and official types The Square Cloud public API, the entry point for any integration with the platform, received a significant round of improvements. * **Revised and expanded OpenAPI documentation:** we expanded coverage to more endpoints and enriched the schemas for applications, databases, runtime statistics, file uploads, and more. Descriptions, response messages, and status codes were reviewed — you spend less time guessing the format of a response and more time building your integration. * **New Network endpoints:** focused on performance and errors, exposing data that was previously hard to access. These same endpoints power the new Network module in the Node.js SDK. * **Richer responses:** workspaces and users now carry the join moment (`joinedAt`), runtime statistics gained more detail, file reading now handles UTF-8 content better, and descriptions were revised across multiple endpoints. * **API Types v1.0: stable types.** The official API types reached their first stable version, with proper semantic versioning, full predictability for those who depend on them, and coordinated evolution alongside the simplification of the cache purge feature. ### 🎨 Dashboard The web dashboard, where most people experience Square Cloud day to day, is where we concentrated the largest volume of improvements during this period. Dozens of refinements, from brand new features to careful usability polish. * **New notification center with 1-click renewal:** redesigned bell and notification system from scratch. When your plan is close to expiring, the notification itself offers immediate renewal, without you needing to navigate through several screens. Usage and expiration notices migrated to this new system. * **New plan upgrade system:** * **Upgrade at any time, including mid-cycle** — the larger resources take effect immediately, without waiting for renewal. * **Proportional (pro-rata) charge with preview before confirming** — you see exactly how much you will pay, calculated based on the time remaining in your current cycle. * **Plan transition without overlapping charges** — the replaced plan's charge is automatically cancelled, with a unified calculation for the migration. * **Clearly identified invoices** in the history and **updated FAQ** explaining how everything works. * **New credit card experience:** redesigned flow, mobile-optimized, with **3DS authentication** from banks when needed. Lighter loading and more direct form filling. * **Reformulated billing page:** the old "invoices" gave way to the new **Billing** section, with much clearer history and details, identification of upgrade-related charges, and a dedicated tab for billing details. * **New pricing page and updated FAQ:** clearer and more direct plan presentation, working side by side with the new upgrade system. * **Redesigned file manager:** performance improvements when opening files and folders, smoother navigation, and clearer messages on actions like folder deletion. * **Improved analytics and logs:** quick content copy directly from the table, making issue investigation much faster. * **New section on the Bots page**, with more relevant information for those hosting bots. * **Translated DNS status** in every language. * **Light/dark theme** with several fine adjustments to contrast, icons, and logos. * **Broad mobile improvements**, with online/offline status, snapshots, and deploy screens redesigned for touch. * **More robust automatic reconnection** on real-time screens and stability fixes that make navigation feel solid overall. ### 📊 Quick version summary | Product | Version | Main highlight | | - | - | - | | VS Code Extension | **v5** | Workspaces, databases, environment variables, and real-time status, in a complete rewrite | | Official Node.js SDK | **v4** | New modules for databases, workspaces, environment variables, metrics, realtime (SSE), GitHub deploys, and edge analytics | | API Types | **v1.0** | First stable version of the official types | | Dashboard | n/a | New plan upgrade system (pro-rata with preview), notification center with 1-click renewal, new card experience, redesigned billing and pricing | Thank you for building with Square Cloud. Each of these releases was born from feedback from those who use the platform every day. Keep sending your ideas and suggestions — there is much more to come. ## 🚀 Mobile App, Runtime Hub, updated environments, and broad improvements across the entire platform! This cycle brings updates to every corner of Square Cloud: we launched a dedicated runtime hub with a specific page for each supported language, officially integrated our Android app into the platform, updated the full environment matrix, completed the light theme across the entire website, and shipped a broad round of UX, performance, and security improvements. ### 📱 Official Mobile App * **Native Android app** officially integrated into the platform. Square Cloud links now open directly in the app when you have it installed, without going through the browser. * **New dedicated page at `/resources/app`** presenting the app, its features, and the download link. * **Feature spotlight on the website** inviting users to try the app from strategic navigation points. * **Optimized installation size** to fit comfortably on any phone, with accurate descriptions in every supported language. * Available in **Portuguese, English, Spanish, and Chinese**, with full content parity across languages. ### 🧭 New Runtime Hub We launched a complete set of pages dedicated to the languages supported by the platform: * **Index page at `/runtimes`** with a visual grid and comparison table across all languages — available versions, key features, and a direct link to each specific page. * **Dynamic `/runtimes/[language]` page** with a custom hero, technical specifications, real use cases, available version listings, and a ready-to-copy configuration example for your `squarecloud.app`. * **Website header and mobile dropdown** updated with direct runtime navigation — now your language documentation is one click away. * **Shared FAQ across all pages** with the most common questions about each environment. * **Localized sitemap, metadata, and banners** for SEO in every supported language. * Everything is available in **PT-BR, EN, ES, and ZH**. ### 🆕 Environment Updates We keep our runtime matrix on the latest stable versions in the industry. These are the versions available starting with this cycle: * **JavaScript \[Node.js]** → Recommended: `24.15.0` | Latest: `26.1.0` * **Python** → Recommended: `3.13.13` | Latest: `3.14.5` * **DOTNET** → Recommended/Latest: `10.0.8` * **Rust** → Recommended/Latest: `1.95.0` * **Ruby** → Recommended/Latest: `4.0.4` * **PHP** → Recommended/Latest: `8.5.6` * **Go** → Recommended/Latest: `1.26.3` Node application cold starts became slightly faster in preliminary tests with the new matrix (this varies a lot by workload — we are still validating the real production numbers). ### ⚡ Faster and More Robust API * **Faster responses** on routes that depend on multiple checks, with no changes required on your end. * **Lower memory usage under load**, helping maintain stability during traffic peaks. * **Graceful shutdown** during maintenance and deployments — in-flight requests are completed correctly before maintenance proceeds. * **Improved handling of abrupt disconnections**, preventing ghost connections in monitoring tools and dashboards. * **More resilient workspace cleanup**, with clearer error handling in maintenance operations. ### 🛡️ Security and Privacy * **New account deletion page**, fully aligned with the **LGPD**. You always had this right — now the path is documented, translated, and one click away. * **Hardened upload validation:** file names, content types, and payload limits are now checked more consistently by scope. * **Improved workspace permission checks** on administrative actions. * **Refined security headers:** CSP and Referrer-Policy adjusted across the entire site for better protection against XSS and referrer leaks. * **Hardened token and API key comparison routines.** * **Improved validation for return links and redirects.** * External links now use `rel="noopener noreferrer"` across the entire website. ### 🎨 Renovated Website A large part of the website was touched in this cycle: * **New landing page** with a redesigned visual identity and header fixes. * **Complete light theme:** every component, modal, chart, and page now respects your system preference (light/dark). * **Bundle reduced by approximately 43%.** The site loads faster on any connection. * **New `/about` page** telling our story. The old page was moved to the documentation. * **New `/support` page** with chat, email, and contact channels organized clearly. * **New Help Center** in developer resources, grouping documentation, guides, and useful links. * **New Blob dashboard** with grid and list views, image previews, debounced search, and much faster object management. * **New Workspace creation page** with a simplified flow and clearer messages. * **New mobile header navigation** that feels much smoother. * **Footer with links grouped by category** — much easier to find what you are looking for. * **Complete refactor of the `/services` and `/resources` pages** for a more consistent experience across verticals. ### 📦 Upload and File Manager * **Bulk delete with live progress** and a "select all" action in the File Manager — managing many files is finally fast. * **Stricter upload validations** with clear error messages for invalid, empty, or corrupted files. * **New code editor** with autocomplete, automatic bracket closing, and better shortcuts — designed for long editing sessions. * **Automatic environment variable detection** in the upload context was kept and refined. ### 🗄️ Blob and Storage * **Automatic cleanup of orphaned objects** in storage — saving space and optimizing costs. * **Faster and more reliable inactive account reconciliation**, with better error reporting at each step. ### 💳 Billing and Checkout * **Selected duration remembered** between checkout screens — no more selecting monthly or yearly twice. * **Enterprise plan slider** redesigned with a dedicated label and better readability. * **Billing logic adapted** to the light theme across all components (payment cards, plan duration, etc.). * **Tier order reorganized** in the plan selector for a more intuitive path between options. * **Plan notices** refactored for better visual structure and clearer copy. ### ♿ Accessibility * **Hidden element behavior** fixed to work properly with screen readers and keyboard focus. * **Full `prefers-reduced-motion` support** across the entire site — animations and transitions are automatically disabled for users who prefer reduced motion. * **Optimized images** for better perceived performance and lower data usage. ### 🌍 Internationalization * **Full translation refactor** in **PT-BR, EN, ES, and ZH** with paired quality review across all 4 languages. * **FAQs about services, bots, and databases** are now 100% covered in Chinese. * **Language disclaimer** added to legal pages in all 4 languages, making it clear which version prevails in case of divergence. * **Standardized the term `workspace`** in Spanish as `espacio de trabajo` across all texts. * **Standardized database naming** (`MongoDB Hosting`, `Redis Hosting`, etc.) across the entire site, copy, and metadata. * Fixed several typos and grammar issues in existing translations. ### 🆘 Support and Communication * **New Support page** with live chat, email, and alternative channels clearly organized. * **WhatsApp** added as an official contact channel. * **Live chat** with automatic real-time online status detection. * **Chat synchronized** with the site theme (light/dark) and the user's session. ### 🤖 PWA and Android App Links * **Native Android app integration** published — platform links can be opened directly in the app without the browser prompt. * **Manifest and icons revised** for a better experience on any device. * **Improved metadata** for mobile application support on every relevant page. ### 🧩 Modals and CTAs * **Unified modal system** across all pages, with consistent performance and usability. * **New useful modals:** gift code redemption, insufficient memory, and verification code confirmation. * **Shared CTA** replacing duplicated CTAs across all product pages — communication is now consistent across the entire site. ### 🔧 Hotfixes and Quality of Life * Fixed pending redirects from the old `/sac` to `/support` across links, sitemap, and redirects. * Headers, modals, alerts, and tooltips received visibility fixes in the light theme. * Correct truncation of long IDs on mobile in application and database listings. (thanks to everyone who reported this!) * SEO structure with localized structured data by language and breadcrumb support on all main pages. * Several spelling and grammar fixes in existing translations. ## 🚀 Faster API, stronger infrastructure, and completely renovated dashboard! This is the largest update cycle at Square Cloud since the platform's launch. We rewrote the API core, expanded Realtime, completely redesigned Snapshots, and delivered a faster and more beautiful dashboard — all at the same time. ### 🧭 New API Foundation We rewrote how our routes process requests internally. The result is visible without any changes on your end: * **Faster responses** on all routes that depend on multiple checks. * **Fairer quota:** invalid requests are now rejected before consuming your limit. * **Correct rate limits in workspaces:** workspace members share the limit accurately — no loopholes. * **HTTP codes aligned with standards:** 401, 403, and 404 where they should be. No more generic errors that don't explain what happened. * **Improved compatibility** with clients that send non-standard headers. * **More secure file manager:** reinforced path validation by the File Manager to prevent human errors and improved speed when handling large directories. ### 🔌 Realtime with more capacity * **Up to 10 simultaneous connections per application** (previously 5). Live dashboards, logs, and observability tools now work without competing for slots. * Abrupt disconnections are handled much more robustly — terminated connections are completely freed, without accumulation over time. * Clearer error messages when the connection limit is reached. ### 🗄️ Snapshots and Backups The snapshot system was completely rewritten from scratch during this cycle: * **More efficient engine:** lower resource usage during backup generation, with adaptive compression based on snapshot type. * **Restore with guaranteed integrity:** restores keep the **60-second** stabilization window introduced in the February update, ensuring all data is completely stable before your application goes back online. * **Lists and details cached** for longer, reducing wait time when browsing between snapshots. * Errors during backup generation are now reported correctly — no silent failures. (thanks to everyone who reported this!) ### 🤖 New AI Engine * AI response generation migrated to a new provider and now **automatically selects the best available model** with each request. Direct result: faster and more consistent responses. * New **AI Analytics dashboard** available in the dashboard, with insights from your application. Available in Portuguese, English, Spanish, and Chinese. ### 🔁 Deploy via Git * We blocked the creation of two deploys pointing to the **same repository + branch** on the same account, preventing accidental duplicate deploys and confusion when managing multiple environments. * Deploy and code commits now complete correctly even under adverse network conditions — no silent errors or timeouts without response. ### 🎨 Renovated Dashboard * **Much faster real-time console** — logs appear almost instantly, without the sensation of freezing. * **Lighter dashboard** with pages that open faster especially on mobile. * **Improved mobile filter navigation** — filters take up less screen space, leaving more room for content. * **New pricing page (`/pricing`):** clearer comparisons, duration selection that remembers your choice, and reorganized layout. * **New paywall** on application and database pages — more visual, with rotating testimonials and direct button to choose a plan. * **New header and new footer** with reorganized links and more accessible language button. * **Redesigned heroes** on `/bots`, `/sites`, `/blob`, and `/databases`. * **New page `/resources/infrastructure`**. * **Revised banners** across the platform, with more consistent visuals. * **New code editor** with better shortcuts (including indentation with `Tab`), more readable syntax highlighting, and new font optimized for extended reading. ### 📦 Application Upload * We accept **`.zip` files up to 1GB on upload** to identify and inform exactly what needs to be removed (`node_modules`, caches, `.git`) — instead of simply rejecting the file. * The **platform's real limit remains 100MB**, but the experience of reaching that limit is now much clearer and friendlier. * If your `.zip` already contains a `squarecloud.app` or `.env` file, we ask if you want to **import the configuration automatically**. * Much clearer error messages for corrupted, empty, or unsupported format files. * Compressed files uploaded to the platform now go through extra validations and inappropriate files are **automatically blocked**. ### 🤝 Workspaces and Members * **Workspace members** can now add and remove subdomains without needing the account owner. * **Resource-specific paywalls** clearly inform, in a friendly way, what each plan unlocks — no surprises. ### 💳 Billing and Checkout * Checkout, renewal, and upgrade **preserve the chosen duration** between screens — no confusion. * **Blindsided downgrade:** before reducing the plan, we check if there are workspaces or custom domains incompatible with the destination plan. * (it was an intentional feature, but we noticed it could lead to inconsistencies even if domains were deactivated some time after the downgrade). * Canceled invoices go straight to checkout — no need to look for the right button. * Downgrade modal with step-by-step explanations and more human messages. ### 🔐 Account and Security * **Discord signup** now available, with all legal notices in place. (we resumed accepting new Discord registrations after we had disabled it). * Simplified login flow — fewer intermediate screens, less confusion. * More reliable sessions and logout in case of account switching. ### 🧱 General Stability * Reinforced internal network infrastructure, preventing connectivity issues in corporate environments. * Reduction of processing spikes during high-volume deploy hours. * When a workspace doesn't exist, the response is now a **clear 404** — no ambiguity. * Commits per minute limit adjusted to reduce burst deploy abuse. ### 🌍 Translations * **Portuguese, English, Spanish, and Chinese** reviewed end-to-end. * Correction of various typos and standardization of technical terms in all languages. * Regulatory notices (PayPal, Pix) with dedicated text in each language. (thanks to everyone who pointed this out!) ### 📈 Observability * The log pipeline was migrated to a more secure and modern authentication method, making integration simpler to operate. * The log buffer was reinforced to not lose events in the first few seconds after application boot. * We expanded the capacity of simultaneous connections made by the platform to external services. Fewer queues during peak times, fewer sporadic timeouts for your applications. ## 🚀 Brutal Performance, Data Intelligence and New Era of Infrastructure! Today we deliver the biggest technical leap in Square Cloud's history. We're not just scaling hardware; we're rewriting our platform's core with low-level algorithms to ensure an unprecedented development experience. > **CEO Note:** "This update sets the new efficiency standard at Square Cloud. By optimizing processing to $O(1)$ and refining snapshot orchestration, we deliver infrastructure that doesn't just host, but amplifies the growth of every project." ### ⚡ Performance Engineering: O(1) Core Engine We dove deep into our network and telemetry layer to eliminate every millisecond of overhead: * **Rate Limiting 2.0 (200x Gain):** We migrated to a more efficient constant-flow model. Traffic validation is now instant, regardless of load. * **Accelerated Realtime-Console:** We reduced round-trips and streamlined active connection handling. The console now responds in real time. * **Lean Runtime:** We performed stripping of obsolete dependencies and redundant validations in the execution environment, guaranteeing more actual CPU and RAM for your application. * **Smart Analysis System:** Intelligent system that automatically tracks deploys and performs random re-analyses hours later to ensure runtime integrity. ### 🗄️ Databases: Integrity, Encryption and Snapshots We solved complex orchestration challenges to ensure your data is always accessible: * **Credential Consistency Fix (MongoDB/MySQL):** Fixed a credential consistency issue after database snapshot restoration. Restores now keep account access flows consistent. * **Snapshots Management:** Restore cooldown increased from **30s to 60s** to ensure physical data stabilization and index propagation. * **Dedicated Pages:** Launch of optimized dashboards for `Redis`, `MySQL`, `PostgreSQL` and `MongoDB`. ### 📦 Runtime Update (2026 Stack) Maintaining our commitment to the state of the art, we updated our official environments: * **DOTNET:** Updated to **10.0.2**. * **ELIXIR:** Updated to **1.19.5**. * **GOLANG:** Updated to **1.25.7**. * **RUST:** Updated to **1.93.0**. ### 🛠️ Developer Experience (DX) and UX We optimized the workflow to make file and deployment management more fluid: * **File Manager Pro:** Added support for **bulk selection (up to 50 files)**, deletion confirmation via modal and `ESC` shortcut for quick deselection. * **Smart Upload:** Support for **Drag & Drop .zip files** with content visualization and automatic framework detection (**Next.js, Vite and Vue**). * **Git App (Case-Sensitivity):** Fixed bug that forced branches to lowercase. Now, the system respects original casing (e.g., `Dev` remains `Dev`). * **Network Intelligence:** Quick buttons to copy URLs and new `/network/logs` route (exclusive PRO/Enterprise) with date filters (`?start` and `?end`). ### ⚖️ Sustainability and Pro Infrastructure We redefined our limits to ensure global stability at all levels: * **New PRO Tier (24GB):** 12 high-performance vCPUs and 250GB Blob Storage. * **Enterprise Scale-Out:** Now starting at **16 base vCPUs** and support for **Enterprise-1024** (up to 1024 distributed vCPUs). * **Burst Logic 2.0:** New contextual CPU allocation algorithm that allows performance spikes based on project's actual need. * **Hobby Plan Focus:** To preserve global performance, the Hobby plan now focuses exclusively on applications, removing dedicated database instances and massive global snapshots to ensure 100% network availability. We continue building the future of hosting, one commit at a time. 🚀 ## 🚀 Visual Overhaul, LGPD and Core Optimizations! Today we’re launching an update focused on a visual overhaul of our main pages, critical improvements to the developer experience (DX), and a major data cleanup for compliance and performance. > **Black Friday Note:** Thank you for the massive participation! Our infrastructure operated with total stability during the period. The focus now is 100% back on product evolution. ### 🎨 New Design and User Experience (UX) We redesigned key areas of the platform to make it more modern and accessible: * **New Home and Authentication:** A completely new and smooth login/signup experience. * **Documentation Improvements:** General review and enhancement for greater technical clarity. * **Workspace Experience:** Admins now have better visual feedback on permissions, and Owners receive clearer guidance on resource allocation. ### 🔐 Secrets Tab Redesign By popular demand, we rebuilt the UI/UX for environment variable management to be more productive: * **SQUARECLOUD\_APP\_ID:** Automatic injection of this ENV with the application ID. * **Quick Actions:** Button to clear all ENVs and new validation on export. * **Advanced Interaction (Shift):** Holding `SHIFT` turns the menu button into a trash can for quick deletion. * **Direct Editing:** Click the input to edit the value immediately, no need to open menus. * **Compact Design:** Reduced overall padding for a denser and more efficient information view. ### 🛠️ Deploy and File Features We expanded your control over files and databases: * **Directory Handling:** You can now **rename and move directories** directly from the dashboard. * **Commit API (`?path=`):** Added support for allocating commits to specific subdirectories via API. * **Static Environments:** When deploying via runtime, the system automatically detects HTML/CSS projects, hides unnecessary commands, and makes publishing easier. * **Postgres:** PostgreSQL databases now start with the `squarecloud` database created by default, avoiding connection errors for beginners. ### 🔒 Security, LGPD and Infrastructure We focused on privacy and core platform stability: * **Data Cleanup (LGPD):** In compliance with privacy regulations, we permanently deleted **50,000+ support chats** and **40,000+ contacts** inactive for over 365 days. * **squareweb.app Scope:** Now accepts and manages connections from the Tor network (with security challenge). * **Smart Cache Reset:** New intelligent global cache cleaning system. * **VSCode Extension:** Fixes applied to resolve involuntary logouts. * **Hobby T1 Standardization:** Multithreading adjustment in this tier for standardization with the rest of the existing plans. ### 📉 Data Lifecycle Optimization We refined backup retention to improve storage efficiency and eliminate obsolete data: * **Application Snapshots:** Old versions now last up to **44 days** (30 days primary + 14 days retention). * **Database Backups:** Old versions now last up to **21 days** (14 days + 7 days retention). We continue working to make Square Cloud more and more efficient. ## 🚀 Black Friday, MySQL, Articles and Globalization! Today we're launching an update focused on tooling improvements, globalization of several areas, and enhanced overall platform usability. And there's more: the **only promotion of the year** is now live! ### 🎉 Black Friday — THE ONLY 2025 PROMOTION **Annual discount DOUBLED: 30% OFF** on any renewal, upgrade, or first purchase on the annual plan. Discounted pricing examples: (values in BRL) * **Standard T1:** from **34,90** to **24,43** month * **Pro T1:** from **100** to **70** month Take advantage of this exclusive opportunity to save and scale your projects on Square Cloud! ### ✨ Dashboard styling overhaul and bug fixes We completely redesigned the platform navigation, making several areas more accessible and modern: * Redesigned navigation to facilitate access to important features. * Optimizations to improve the experience for developers who rely on screen readers. * New rendering logic across much of the website, making everything more dynamic and faster. * Improved visualization of what gets removed when downgrading a plan. * Semiannual option removed — we now offer only two clearer and easier-to-understand options (monthly and annual). * Fixed several bugs that impacted navigation. * Improved compatibility with legacy browsers. ### 🛠️ Deploy experience improvements + new Database We expanded database support and optimized the deployment process: * **MySQL v9:** Now available and optimized for production. * **Elixir:** Runtime issues fixed + updated to version **1.19.2**. * Implemented more aggressive limits on file viewing via File Manager API (no more trying to view a 1GB file 😊). * Fixed a Git integration issue that caused higher-than-expected latency: * Listing reduced to the last 5 deploys. * Improved error notifications in responses. * **\~14ms global reduction** in deploys with the new architecture. * Fixed error that prevented viewing the Snapshots tab in some workspaces. * Fixed bug that imported empty environment variable when deploying with a partially invalid file. ### 📚 New articles and tutorials We added comprehensive guides to facilitate deployment of different frameworks and technologies: * **Angular:** [How to deploy an Angular project](https://docs.squarecloud.app/en/tutorials/website/angular) * **AstroJS:** [How to deploy an AstroJS project](https://docs.squarecloud.app/en/tutorials/website/astrojs) * **Nuxt:** [How to deploy a Nuxt project](https://docs.squarecloud.app/en/tutorials/website/nuxt) * **Gatsby:** [How to deploy a Gatsby project](https://docs.squarecloud.app/en/tutorials/website/gatsby) * **Laravel:** [How to deploy a Laravel API](https://docs.squarecloud.app/en/tutorials/api/laravel) * **Spring Boot:** [How to deploy a Spring Boot API](https://docs.squarecloud.app/en/tutorials/api/spring-boot) These tutorials cover everything from initial configuration to complete deployment, helping you get your projects live quickly. ### 🌍 Globalization and general improvements We continue expanding and improving the platform's international experience, with focus on accessibility, performance, and communication clarity. These are just some of the new features! We continue listening to the community and working daily to make Square Cloud even better. ## What's new and improvements (11/06/2025) We shipped an important set of usability, media-preview and runtime infrastructure improvements — all designed to speed up your workflows and make the platform friendlier for everyone, from trial users to high-traffic teams. ### Improved dashboard for users without an active plan The dashboard now offers a warmer, more informative experience for users who don't have an active plan. The UI highlights recommended actions (start a deploy, connect a repository, redeem credits), with clearer navigation and panels focused on what new users need most. ### Enhanced Blob previews The Blob page now lets you preview images and videos directly in the browser without downloading them. This makes content inspection faster, speeds up validations and reduces the time spent debugging multimedia assets. ### Dynamic application listing Application lists now adapt automatically to the user's screen height, making better use of vertical space on large monitors and providing a consistent experience across devices. ### Better empty states Sections such as "Applications" and "Databases" received redesigned empty states: clearer messaging, suggested next steps and helpful CTAs that make the first-time experience more guided and actionable. ### Plan downgrade now available You can now downgrade your plan directly from the **My Account** tab — fully automated, secure and transparent, with confirmation steps and an audit history. ### Export environment variables We added a one-click export button in the **Environment Variables** panel. Download all your variables in common formats (dotenv / JSON) for backups or fast migration between projects. ### GitHub upload with automatic configuration When uploading from GitHub the platform will attempt to auto-detect and configure the repository (package manager, start command, build scripts), reducing configuration errors and accelerating the first deploy. ### Search button in the file editor We implemented a native search button in the file editor optimized for mobile devices — making it easier to find code snippets directly from your phone. ### Global rate limit display fixed > We fixed an issue that in some scenarios caused a client-side exception when displaying the global rate limit. The UI is now stable and resilient. ### Website now uses the React Compiler We migrated the site to the React Compiler, improving rendering performance, reducing TTFB and making navigation smoother on pages with dynamic content. ### Snapshot filename format standardized Snapshot download filenames are now standardized to include app name, timestamp and app id for easier organization and traceability. New pattern: ``` _2025-12-31_12-59-59_.zip ``` ### Detailed plan comparison The **Pricing** page has been redesigned with a visual comparison of tiers. It's now easier to understand limits, benefits and pick the plan that fits your needs. ## Environment updates We updated and expanded runtime and language support: * **Ruby \[New runtime]** * Available for production workloads. * `recommended`/`latest`: **3.4.7**. * **Java \[Gradle & Maven support]** * `recommended`/`latest`: **JDK 25**. * **Node.js** * `recommended`: **v24.11.0** (LTS) — now adopted as default. * `latest`: **v25.1.0** — supported; in tests we observed up to **\~40% web-performance gains** in specific scenarios. * *Note: Node 25 is recommended for performance-focused workloads — test before migrating production.* * **Python** * `recommended`: **3.13.9**. * `latest`: **3.14.0**. * **C# (ASP.NET)** — `recommended`/`latest`: **9.0.10**. * **Elixir** * `recommended`/`latest`: **1.91.1**. * **Rust** * `recommended`/`latest`: **1.91.0**. * **PHP** * `recommended` & `latest`: **8.4.14**. * **Go** * `recommended` & `latest`: **1.25.4**. Notes: Ruby support was implemented in this release; Java now supports Gradle and Maven projects. Node 24 LTS is the default runtime; Node 25 is available for users who need extra performance. ## Fixes & minor adjustments * UX refinements across panels and modals (multiple friction points reduced). * Snapshot filename normalization and download improvements. * Small fixes in GitHub upload flow and repository auto-validation. * Blob now validates available capacity faster for large uploads. These updates are rolling out gradually. We're listening to the community and prioritizing changes that directly boost your productivity. ## Upload and GitHub Integration Redesign We have focused our efforts on revolutionizing the deployment and GitHub integration experience, bringing significant improvements that make the workflow simpler, more modern, and efficient. Check out the main new features that are now available: ### New Upload Experience We've created a completely rethought upload experience for modern developers. * **New upload page:** We now have a page dedicated exclusively to uploads, completely redesigned to offer a simpler, more modern, and intuitive experience. * The upload page is now available at `/upload` instead of `/dashboard/upload`. In addition to convenience, this change contributes to the site's SEO, making the upload page public and improving its indexing in search engines. ### Revolutionized GitHub Integration We have drastically simplified the process of integrating with GitHub repositories. * **Upload via GitHub (without an access token):** We've made the repository integration process even easier. You can now upload directly from GitHub without needing to manually enter an access token. * **Full integration with GitHub repositories:** You can connect your GitHub repository directly to your application, simplifying the deployment flow and making automation even more practical and secure. * **Direct connection with your GitHub account:** Connecting to GitHub is now even easier: just authenticate with your account to enjoy all integration features in a centralized and transparent way. * **Login via GitHub:** In addition to connecting for integrations, you can now use your own GitHub account to log in or create an account on our platform, making the authentication process fast, secure, and hassle-free. ### UI and SEO Improvements We have enhanced the platform's visual experience and online presence. * **Complete redesign of the "My Account" tab:** The profile and settings section has undergone a complete redesign, featuring a cleaner, more modern, and organized interface, allowing you to manage your information more simply. * **Website SEO improvement:** In addition to the new route, the site has undergone technical and content adjustments aimed at search engine optimization, ensuring better indexing performance and greater visibility on Google. ### Enhanced VSCode Extension We have improved the development experience directly from your favorite editor. * **Improved extension loading:** We have optimized the loading process of the VSCode extension, making initialization faster and more efficient for a smoother development experience. ### Modernized Snapshot System We have completely replaced the previous system with a more advanced solution. * **Complete migration from backups to snapshots:** The old backups have been replaced by the snapshot system, offering greater efficiency, faster restoration speeds, and better management of your application's version history. ### Modernized Tax Invoice System We have updated our fiscal infrastructure for greater compatibility and efficiency. * **Migration to the new ISSNet from the Goiânia City Hall:** Our electronic service tax invoice (NFSe) system has been completely migrated to use the new ISSNet from the Goiânia City Hall, ensuring greater stability, compliance, and agility in issuing service tax invoices. ### PHP + Swoole Improved Swoole support has been launched in conjunction with PHP version 8.4.12. ### Critical Fixes We have resolved important issues that affected file integrity. * **Fix in the file upload and compression process:** We identified and corrected a bug that affected the recompression of files uploaded through the platform. In some specific cases, this flaw resulted in the generation of corrupted binary files after the upload. The process has now been fully adjusted and validated to ensure that all files are stored and distributed with integrity and reliability, eliminating the risk of inconsistencies. These improvements represent a significant milestone in the evolution of Square Cloud, solidifying our position as **the most modern and intuitive platform for the new generation of developers.** ## EVEN MORE affordable plan and + DISCOUNTS! We continue our mission to listen to you and optimize every detail of the platform. We have gathered a series of **performance improvements, new features, and quality of life adjustments** that are already available and will boost your development experience. Check out what we have prepared: ## New Hobby plan and discounts = Square Cloud listening to you. Following the philosophy of going **against the market**, we brought more advantages for your pocket. * **Real-Time Downgrade:** We launched the new **instant downgrade** system. No waiting, no bureaucracy, you have full control of your plan. * **New Affordable Hobby Plan:** We introduced the Hobby plan with two tiers, with prices starting at **R\$ 9.99/month** on the annual cycle. * **MORE DISCOUNTS, BECAUSE YOU DESERVE IT:** We increased the discounts! Now it's **10% for the semiannual plan** and **15% for the annual plan**. ### Performance and speed optimizations We made everything even faster so you can focus on what matters: your code. * **Instant sync:** When updating RAM, the CPU is now adjusted in real time, with no delay. * **Ultra-fast realtime:** We reduced latency in primary loads, with an average improvement of 45ms. - We improved loading speed when interacting with bots and sites hosted on the platform. ### More control and flexibility for Your Account We upgraded customization tools so you have total autonomy. * **Editable subdomain and runtime:** Now you can edit your subdomain (`.squarecloud.app` and `.config`) and set the `RUNTIME` (javascript, typescript, etc.) directly in the application. (documentation for the `RUNTIME` field will be released soon). * **New "My Account" page and language:** Manage your information on a redesigned page and change the region/language to receive standardized emails. - We increased the limit to up to 3 username changes per day for your Square Cloud account. ### Experience and interface improvements We refined the interface for a cleaner and more productive workflow. * **Completely rewritten Logs tab:** The tab has been redesigned, including realtime, and now allows you to **delete all old records with a single click**. * **More intuitive dashboard:** We added icons for each language in the dashboard, making it easier to identify your applications. - We fixed an error that permanently redirected cookies to the login page in some cases. ### General Platform Adjustments * The API now returns the status `CONTAINER_TEMPORARILY_SUSPENDED` in cases of request abuse to ensure stability. * Inactive workspaces of users without active plans are now removed within 24 hours. These are just **some** of the new features we implemented with you in mind. Our commitment is to keep listening to the community and evolving to be **the best and most complete platform for the new generation of developers.** ## New Documentation in PT-BR and PostgreSQL Support! Once again, we listened to the community and brought some really cool news, focusing on improving the developer experience on our platform. It's time to present a series of improvements — some have been available for a few days, but may have gone unnoticed. Check them out below: ### Completely Renewed Documentation in Portuguese We created top-notch documentation, designed for Brazilian developers. * 100% in Portuguese (BR): Not a translation, but fully localized content, including images and tutorials. * Comprehensive Content: New guides, tutorials for specific scenarios, and detailed information about the platform. Check it out: **[https://docs.squarecloud.app/en/getting-started/overview](https://docs.squarecloud.app/en/getting-started/overview)** ### Enterprise-Scale PostgreSQL Support Create your PostgreSQL database with professional-level performance and security. * No limit on outbound and inbound network transfer. * Generous IOPS with NVME Enterprise. * Exclusive peer-to-peer certificate per database (mTLS). * Dedicated memory and CPU according to the plan. * Smart daily snapshots. * MySQL will be available in the coming days. * Square Cloud does not launch services that are not ready for production. ### Faster Snapshots We optimized the performance and stability of our backup system. * Performance: We doubled the internal bandwidth, processing up to 1,000 snapshots per minute. * Instant and free restoration of any snapshot from the last 30 days. ## Environment Update We are always improving our services to ensure you have access to the latest and most stable versions of the main programming languages. Check out what's new in this update! ### **New versions available:** * **JavaScript \[Node.js]** → Recommended: 22.18.0 | Latest: 24.5.0 * **Python** → Recommended: 3.13.6 | Latest: 3.13.6 * **Elixir** → Recommended: 1.18.4 | Latest: 1.18.4 * **Rust** → Recommended: 1.89.0 | Latest: 1.89.0 * **Go** → Recommended: 1.24.6 | Latest: 1.24.6 * **PHP** → Recommended: 8.4.11 | Latest: 8.4.11 \-- Improved support for Redis & MongoDB, with native support for the C-written library for Redis. What does this mean for you? * More stability and compatibility with modern applications. The updates are already available. 😄 ## General Platform Improvement (LOTS OF AMAZING NEWS!) Recently, we focused our efforts on **revolutionizing** the developer experience on our platform. It's time to present a series of **powerful new features** — some have been available for a few days, but may have gone unnoticed. Check out the improvements already live below: ### 100% Integrated Environment Variables * Now you can set environment variables directly via deploy or API. * Variables are automatically injected with a simple **restart** of the application. No need to use `.env` or extra packages! * Public routes available for **POST, PUT, DELETE, and GET** of variables. ### New Snapshot System (goodbye, manual backups) * Extremely generous limits: each plan can generate `(RAM / 256) * 2` snapshots per day. E.g.: Hobby plan with 2048MB = **16 daily snapshots** or up to **480/month**! * **Instant and FREE restoration** — recover any snapshot from the last 30 days in seconds. (gradual release for everyone in the coming days) * Square is going **against the market**: no charges, no hassle. ### Real-Time Configurable Start * Forget redeploying just to change the start script (START field in your config file). * Now you can **edit the START line directly**, restart the app, and that's it. All in real time and hassle-free. ### Advanced Databases (Redis & Mongo available!) * Create your real database with just 1 click. * **Exclusive peer-to-peer certificate** per database (no generic certificates). (mTLS) * RAM and processing from your plan, with total dedicated performance for the database. * 10GB of enterprise storage included with future expansion plans. * **Daily and automatic snapshots**. * **Intelligent and proactive snapshot system**: detects suspicious deletions and creates emergency backup (beta). * No bandwidth limitation and up to **512 simultaneous connections** per database. * Certificate and password reset in **one click**. * Databases already available: **Redis** and **MongoDB** — new databases coming soon! ### Faster and Smoother Dashboard * New "Settings" tab inside an application. * Deploys tab moved to Settings → Deploys. * Dedicated Environment Variables panel (Settings → Environment Variables). * Settings page now segmented into **5 sections** for easier navigation: General, Deploys, Environment Variables, Network, and Risk Zone. * New Pricing page and new page about Square Cloud Enterprise infrastructure and its exclusive plans (/enterprise). * New Analytics tab (viewing new data and interactive charts), with extremely accurate and improved insights for websites hosted on Square Cloud. * New application upload, more fluid and beautiful, with automatic detection of environment variables via .env file or internal context (automatic import). Oh, you can also paste variables using Ctrl+C and Ctrl+V. * The API now returns realtime records with surgical precision since the application start. These are just **some** of the improvements we are releasing for you. We keep listening to the community and working daily to make Square Cloud **the best platform for next-generation developers.** Note: we have greatly reduced and compacted the release notes, changed a lot in recent weeks, and focused on improving your experience. Thanks to everyone who participated or participates in our early access or beta test programs. @everyone ## General Security and Performance Update Recently, we have focused our efforts on improving the performance of some critical Square Cloud services. ### Security and Encryption * **Minimum TLS:** We now require TLS 1.2 as the standard for all of Square Cloud, including custom domains. * **Custom domains:** All custom domains have been configured to a minimum of TLS 1.2. * **Square Cloud proprietary domains:** For anti-phishing domains and enterprise scopes, the minimum TLS is 1.3. ### Log Management * **Application Log Limitation:** The maximum number of logs per category (logs/crash) in `.squarecloud` files has been reduced from 10 to 5. * **Log Infrastructure Change:** We have migrated our log infrastructure to a new, more modern and scalable observability stack. * **Log Coverage and Retention:** We now log 100% of requests to our main infrastructure (API, Website, Blob, etc.), with a 7 times greater data retention. ### Performance Optimization * **Asset Pre-processing:** We have improved asset pre-processing in our infrastructure, resulting in higher processing capacity (throughput). * **IAM Optimization:** We have optimized the encoding of each validation layer of IAM (Identity and Access Management). * **Blob Performance:** Direct actions on the Blob are 20-35% faster, and full logging has been implemented. ### API and Environment Improvements * **New Query for Application Status:** The `/v2/apps/status` route now accepts the `"workspaceId"` query to facilitate state data collection. * **Clearer Error Messages:** Environments now return specific error messages like `"CONTAINER_ALREADY_STARTED"` or `"CONTAINER_ALREADY_STOPPED"`, instead of the generic `"ACTION_FAILED"`, for direct scenarios. Fun facts about Square Cloud: Even though this is the Square Cloud community server, we are currently the **second largest programming server on the Brazilian Discord**, behind only Rocketseat. ### API Update – Extended Support for Workspaces We are excited to announce the addition of new API routes to facilitate the complete management of **workspaces**, **applications**, and **members**. This update provides greater control and flexibility for developers and team administrators. ### Workspaces * `GET /v2/workspaces`: Lists all workspaces of the authenticated user. * `GET /v2/workspaces/:workspaceId`: Retrieves the details of a specific workspace. * `POST /v2/workspaces`: Creates a new workspace. **Body:** `{ name: string }` **Validation:** Name must follow the regex `/^[\w ]{1,32}$/`. * `DELETE /v2/workspaces`: Removes an existing workspace. **Body:** `{ workspaceId: string }` * `DELETE /v2/workspaces/leave`: Allows a user to leave a workspace. **Body:** `{ workspaceId: string }` ### Workspaces – Applications * `POST /v2/workspaces/applications`: Associates an application with a workspace. **Body:** `{ workspaceId: string, appId: string }` * `DELETE /v2/workspaces/applications`: Removes an application from a workspace. **Body:** `{ workspaceId: string, appId: string }` ### Workspaces – Members * `GET /v2/workspaces/members/code`: Generates an invitation code for new members to join a workspace. * `POST /v2/workspaces/members`: Adds a new member to the workspace using an invitation code. **Body:** `{ workspaceId: string, code: string, group: string }` * `PATCH /v2/workspaces/members`: Updates a member's group within the workspace. **Body:** `{ workspaceId: string, memberId: string, group: string }` * `DELETE /v2/workspaces/members`: Removes a member from the workspace. **Body:** `{ workspaceId: string, memberId: string }` Workspaces now adopt Square's unique ID model (40 characters). Square no longer deletes a workspace when its creator's plan expires. By default, **we have reset all teams on the platform**, meaning: **teams created before this update milestone have been deleted**. These changes aim to make workspace management more robust, collaborative, and efficient. 🚀 General changes: * New route for GLOBAL listing of backups: `/v2/users/backups` (GET). * The global application status listing route now defaults to listing only your applications; workspace applications require the `workspaceId` query. For more technical details, consult the official API documentation. > A new documentation update is expected to be published within 24 hours. ## Environment Update We are always improving our services to ensure you have access to the latest and most stable versions of the main programming languages. Check out what's new in this update! ### New versions available: * **JavaScript \[Node.js]** → Recommended: 22.15.1 | Latest: 24.0.2 * **Python** → Recommended: 3.13.3 | Latest: 3.13.3 * **Elixir** → Recommended: 1.18.3 | Latest: 1.18.3 * **Rust** → Recommended: 1.87.0 | Latest: 1.87.0 * **PHP** → Recommended: 8.4.7 | Latest: 8.4.7 * **Go** → Recommended: 1.24.3 | Latest: 1.24.3 ### New for PHP environments: Node.js v22 updated & npm updated by default. COMPOSER\_HOME set to application (base of your project), we also improved the general interoperability of PHP environments. 1. * Extensions active by default: `pdo`, `pdo_mysql`, `pdo_pgsql`, `pdo_sqlite`, `pgsql`, `mysqli`, `mbstring`, `exif`, `pcntl`, `bcmath`, `gd`, `zip`, `opcache`, `sockets`, `intl`, `ldap`, `xml`, `tidy`, `xsl`, `gmp`, `sodium`, `curl`, `ctype`, `fileinfo`, `posix`, `simplexml`, `xmlreader`, `xmlwriter`, `dom`. 2. Libraries and dependencies have been improved, ensuring better integration with PHP frameworks. List: `build-essential`, `git`, `curl`, `wget`, `unzip`, `sqlite3`, `libonig-dev`, `libsqlite3-dev`, `libpq-dev`, `libzip-dev`, `libpng-dev`, `libjpeg-dev`, `libfreetype6-dev`, `zlib1g-dev`, `libssl-dev`, `libcurl4-openssl-dev`, `libldap2-dev`, `unixodbc-dev`, `libicu-dev`, `libxslt-dev`, `libtidy-dev`, `libmemcached-dev`, `libxml2-dev`, `libevent-dev`, `libgmp-dev`, `libreadline-dev`, `libargon2-dev`, `libsodium-dev`, `ca-certificates`, `gnupg`, `nodejs`. 💡 **What does this mean for you?** * More stability and security in all environments. * More compatibility for modern and production-focused applications. The updates are already available. 😄 Note: Redis support will be released soon in version 7.4.0, initially in open testing with users. ## Technical and general balancing changes. Over the past week, we have made a series of adjustments aimed at improving the performance and stability of our API. Here are the main highlights: `/v2/apps/status` * Now returns statuses in **real-time**, without using cache. * New limit of **15 requests per 60 seconds** (rate class: `KEEP CALM`). `/v2/apps/:appId/logs` * Reduced cooldown between requests: from **10s to 5s**. `/v2/apps/:appId/metrics` * **Increased rate and throughput**. * Output now with **compression enabled**. * New limit: **10 requests every 5 seconds**. `/v2/apps/:appId/commit` * Cooldown reduction: from **5s to 3 seconds**. POST `/v2/apps` * Cooldown reduction: from 10s → 5s → **now: 3 seconds**. DELETE `/v2/apps/:appId` * New execution limit: **1 request per second**. * This prevents human errors that could cause serious impacts on the integrity of the user's applications. We have also globally updated some important topics on Square Cloud. **1. Custom domains:** The system now **automatically removes** domains with pending, inactive, deleted, or moved DNS for more than **24h**. **2. GitHub Integration:** Global cooldown reduced between deploys of the same ID: 90s → 60s → **now: 30 seconds**. **3. Deploys (globally) and general commits:** Fixed an issue where poorly formatted requests (e.g., incorrect `Content-Type`) resulted in **proxy timeouts**. We now return a clear and developer-friendly error, with an error code for correction. **4. Invoices:** The service description now displays the **account ID**, replacing the email. This change aims to avoid validation errors caused by limitations of the Goiânia City Hall with certain characters. **5. Global compression:** Note: this was **included for free in all plans**, at no cost and with no limits. * We have enabled an extra layer of compression on our API responses, websites on our infrastructure, and web assets. * You should notice improved responses from your web applications (specifically APIs that return a lot of data for download). * Compression is applied only if possible, in the order: **ZSTD → Brotli → Gzip → \[no compression]**. (it is exactly in this order). Fun facts about Square Cloud: Did you know that Square Cloud is the largest Discord bot hosting platform in Latin America? 🥰 Note: We never really imagined we would grow so much. We also never invested heavily in marketing, which is quite evident if we analyze some numbers and work with triangulated data, we can state with good accuracy that: about **70% of our customers come from recommendations**. These improvements reinforce our commitment to the performance, clarity, and security of your experience with Square Cloud. ## User experience improvement. We took advantage of the last few days of the holiday to focus on improving the overall experience of our site, bringing important improvements that make navigation more fluid, fast, and intuitive. 1. New Redeem page. `/account/redeem` We completely removed that annoying button and modal from the control panel's home page and created an exclusive page for redeeming codes. 2. New Dashboard layout. We have significantly improved the experience on mobile devices; the control panel's home page now takes up less initial space, improving the browsing experience. We also fixed several issues that caused strangeness in the loading of some functions. 3. Actions in the context menu. It is now possible to perform quick actions such as: start, restart, and stop an application directly from the 3 dots of an application in the control panel. 4. Improved log viewing The application's 'Logs' tab has been significantly improved, providing a clearer view of the records and much faster loading. 4. Blob Calculator. The Blob service page now has a new layout and a very cool calculator, allowing you to get an idea of a future cost you might have using our Blob service. It is worth noting that the price per GB and Objects has not yet been fully defined. (There is no active billing for Blob). We have also improved the plan renewal experience and fixed several front-end bugs that impacted this action on our site. In addition, we have made optimizations that improved the overall performance of the platform. Other miscellaneous updates: 1. We improved the invoice experience; now an invoice is automatically canceled 24 hours after its creation date (in case of non-payment). 2. We improved the general stability of our API and reduced infrastructure costs by 27% using new stream handling algorithms and reducing the cost of repetitive actions. 3. We fixed a bug that resulted in an IP swap below a safe margin in the clusters, which caused a 'rebound' effect and the same application received the same IP in some specific scenarios. In simpler terms: we improved the stability of the entire network. 😌 Fun fact about Square Cloud: In the last 7 days, we processed 532 million and 59 thousand requests in our infrastructure. A very impressive number, right? 🤪 > What do you think about me bringing a random fun fact in every changelog? I think it's a cool way to bring the community closer. ## Overhaul of error pages. We have changed the functionality and improved the experience of all error pages within the web scope of our platform. 1. "This site could be yours." When accessing a subdomain (squareweb.app) that does not yet exist, visitors will see an elegant and explanatory page stating that the address is available, meaning: it can be easily activated through a deploy. A simple and intuitive way to show the potential of Square Cloud. (and obviously make your life as a developer easier) 2. "The site took too long to respond..." If your website is misconfigured (for example, listening on the wrong port or host) or experiences momentary instabilities, your visitors will no longer see a cold error screen. Instead, we automatically show a page translated into several languages, clearly explaining what happened, and better yet: with an automatic reconnection attempt after a few seconds. This reduces traffic loss and improves the perception of your site even during occasional failures. All of this is part of our commitment to delivering an increasingly intelligent, practical, and user-focused platform. 💙 3. Optimized traffic and exclusive routing. We have significantly optimized the network traffic between our clusters and proxies, reducing latency and making content delivery even more efficient and faster for all sites hosted on Square Cloud. Now, your visitors access your site more quickly, regardless of location or access volume. And for those who like technical curiosities: in the last 30 days, Square Cloud processed more than **5.41 billion requests**. This is equivalent to about **67% of the world's population**, considering the current 8 billion inhabitants of Earth. 😎 ps.: it's as if for every 2 people on planet earth, 1 and a half people (don't divide a person ok) had sent a request to our services, that's a lot 😌 ## Dashboard Update We are always improving our dashboard to ensure you have the best possible experience. Check out what's new in this update! 1. **You can now favorite applications:** Favorite applications by browser/device directly on the dashboard. Just click the 3 dots (`···`) and select the `Favorite` option. > In the future, we will sync this across all devices. 2. **You can now import your project directly via GitHub:** You can import projects from GitHub by clicking "Import via GitHub" on the upload page or by accessing the link directly: [Import via GitHub](https://squarecloud.app/en/dashboard/new?type=github). 3. **Improvement in the session disconnect function:** For security reasons, you can now disconnect all your sessions simultaneously and immediately if you suspect any abnormal activity in your account, an option available 4. **New My Account tab:** The Square Cloud account page has been completely redesigned to make your navigation simpler and more organized. It is now divided into specific sections, with dedicated routes for each feature: * **Account Information** — `/account` View and edit your personal data and account preferences. * **Blob Storage** — `/account/blob` Manage your stored files and data conveniently. * **My Invoices** — `/account/invoices` Track your payment history, plans, and download receipts. * **Account Connections** — `/account/connections` View and control all integrations connected to your account. * **Security and Authentication** — `/account/security` Manage your account code, API key, and active sessions securely. 5. **Billing history available:** You can now view all your invoices directly on the [Invoices](https://squarecloud.app/en/account/invoices) page. 6. **New design for PIX payments:** The PIX payment page has been redesigned with a more modern and intuitive design. 7. **Improvement in the Blob file manager:** Now when uploading a file to blob storage through our dashboard, if the file name field is empty, the system will automatically fill the field with the original name of the attached file. We have also improved the feedback when deleting multiple files from blob storage, offering more clarity and speed in the action. ## General Latency Update We optimized the infrastructure behind backups, deploys, and blob storage, improving distribution placement and delivering significant performance gains. Other important general improvements: 1. **Monitoring and notifications via emails.**: > Note: included for FREE in ALL plans, we do not charge for this. 😉😆 In short: we now send informational emails if your application faces RAM, CPU, or network problems, ensuring faster and more efficient responses to any incident. 2. **Complete rewrite of Blob Storage**: Usage status update: Now, usage statuses, which were previously updated every 12 hours, are updated every 1 minute, providing more real-time information. Object deletion: The object deletion route no longer allows bulk deletions of up to 100 items. The deletion of each object is done individually, preventing abuse and optimizing the load on our infrastructure. New security standard: We have implemented a new method for generating security hashes, which now generates a hash 16 times larger than the previous one, making our private assets more secure. 3. **Performance and Latency**: Asset upload: The latency for uploading assets has been reduced by an average of 23%, providing a faster experience for uploading and accessing your data. Asset retrieval: The response time when accessing asset URLs has been accelerated by up to 30% in various scenarios, due to infrastructure routing improvements and ongoing regional delivery tests. Application metrics: The **application metrics** have been rewritten and are now **returned, on average, in 200ms, compared to the previous 800ms**, providing a faster and more efficient view of your applications' performance. 4. **Future Expansion**: We are planning to further expand our global infrastructure, which will allow us to eliminate the dependency on external caches like Cloudflare, ensuring that your assets, even with a size greater than 100MB, can be delivered without additional network costs. We also fixed an error that generated an "Access Denied" return in the API, when, in fact, it should have been a "RateLimit" (429) in some cases. Now, the API behavior is appropriate for these scenarios. ## Update on Restrictions Sections In order to increase transparency and compliance with international standards, we are announcing a review of our trade restriction guidelines. From now on, we will provide more details on the prohibitions dictated by legislation such as the FCPA, IEEPA, EAR, and other relevant guidelines that influence the trade and use of our services by information technology companies. Additionally, we are expanding existing restrictions, based on practices already established by United States companies, to ensure that our operations meet the criteria of the global market. These changes aim to reinforce security, legal compliance, and transparency in international transactions, especially in relation to countries under sanctions. With resilient data center infrastructure and a strict commitment to standards, Square Cloud remains dedicated to providing a safe and compliant environment for all our users. It is important to note that, although we are a 100% Brazilian company, our operations follow the local and international legislation applicable to our services. ## General stability update We have increased the base log limit (via API) to `1000 lines`. (previously: `100 lines`). We have globally removed the `requests` parameter from our API (sent in the status route) (deprecated for \~6 months). We have reduced the ratelimit for GitHub integrations (via webhook) to `60 seconds`. (previously: `90 seconds`). Square Cloud no longer sends `SIGTERM` signals with a `5-second` deadline. As of today (03/22/2025), we send the `SIGINT` signal with a `3-second` timeout. This was done to ensure better compatibility with various frameworks and for greater overall stability. Square Cloud now fully forces permissions on all commits and initializations (no longer just on the out-of-execution scope), meaning: we force permissions even if your application is completely running/stopped equally, reducing the probability of EACCESS or similar errors. We also applied a new startup logic, reducing the overall load. ⚠️ **Addendum for Next.js users: [https://nextjs.org/blog/cve-2025-29927](https://nextjs.org/blog/cve-2025-29927)** ## Update on limits We have great news: **we have increased the API request limits** on all plans, and best of all... **at no additional cost!** 🎉 Now you can make many more requests per day! Check out the new numbers based on the daily limit increase: * **Standard:** 144,000 req/day (+14,400 requests/day added) * **Advanced:** 216,000 req/day (new plan) * **Pro:** 432,000 req/day (+216,000 requests/day added) * **Enterprise-24:** 864,000 req/day (new plan) * **Enterprise-32:** 1,152,000 req/day (+864,000 requests/day added) The **Enterprise category will now proportionally support** up to ****36,864,000 requests per day****; previously the highest limit was: 2,448,000 million. Other changes: * The Hobby plan will no longer support the workspace system (formerly teams) and will not have access to the billable [Blob](https://squarecloud.app/blob) (it will still have access to the free quota), as it is being changed to a personal use focus plan. In contrast, we have increased the member limits per workspace for all plans: * **Advanced:** will support 5 members/workspace. * **Pro:** will support 7 members/workspace. * **Enterprise-24:** will support 10 members/workspace. Enterprise 32, 48, 64, 160 and above will support: 15, 20, 30, and infinite/members per workspace. This update ensures greater scalability for your projects, allowing you to focus exactly on your maximum efficiency. 😎 ## Proxies We have completely rewritten all of Square Cloud's proxies **from scratch**, bringing a more efficient, stable, and scalable infrastructure. This change covers all proxies on the platform, including: * 🌐 **squareweb.app (subdomains)** – Better performance and lower latency for web applications. * 🔗 **Custom domains** – New optimized routing, ensuring faster response times. * 🏗 **Individual clusters** – Each cluster now has an exclusive dedicated proxy, distributing the load better. In addition to the structural improvements, **we have expanded our capacity to support more than 100 billion monthly requests without any expected issues**, a significant advance from the previous theoretical limit of approximately **23 billion**. This update ensures greater stability, security, and scalability, allowing our users to operate with maximum efficiency. 😎 ## Compliance In compliance with LGPD, GDPR, and other applicable laws, we inform you that we have removed 40,667 accounts that have been inactive for more than 730 days (2 years) from our platform. This action reinforces our commitment to privacy, data security, and regulatory compliance. ## Infrastructure We have updated our entire infrastructure to ensure greater efficiency and performance. With this update, we have improved the base latency between clusters, reducing the internal interaction response time by approximately 2 to 5 ms, which optimizes various operations, especially for more advanced users. In addition, we have made strategic improvements to our proxy flow, preparing Square Cloud to handle traffic volumes exceeding 5 billion monthly requests. Currently, our infrastructure processes about 1.3 billion requests per month, and these optimizations will ensure scalability, resilience, and improved performance for our users. ## Dashboard Our dashboard has undergone several improvements to offer a more agile, intuitive, and efficient experience. Check out the main new features: 🔹 **New improved interface** * Small visual refinements to make navigation more fluid and accessible. * Better organization of information to facilitate the management of your projects. * New exclusive section for account management ("My Account"). **Optimized performance** * We have reduced page loading times, ensuring greater speed in displaying your data. * We have improved real-time synchronization, providing faster and more accurate updates. 🛠️ **New features and adjustments** * We have improved the logging system, allowing for more detailed and efficient monitoring. * Minor bugs have been fixed to ensure more stability and reliability. **Discord Connection** Get your wonderful role by connecting your Discord account to your Square Cloud account 🙂 Go to: [https://squarecloud.app/en/account](https://squarecloud.app/en/account), scroll down the page and make the connection. \*as this is a test connection, Square may reset the connection in case of failure during this authorization period 😄 ## Environment Update We are always improving our services to ensure you have access to the latest and most stable versions of the main programming languages. Check out what's new in this update! ### New versions available: * **JavaScript \[Node.js]** → Recommended: 22.13.1 | Latest: 23.7.0 * **Python** → Recommended: 3.13.1 | Latest: 3.13.1 * **Java** → Recommended: JDK 23 | Latest: JDK 25 * **Elixir** → Recommended: 1.18.1 | Latest: 1.18.1 * **Rust** → Recommended: 1.84.1 | Latest: 1.84.1 * **PHP** → Recommended: 8.4.3 | Latest: 8.4.3 * **Go** → Recommended: 1.23.6 | Latest: 1.23.6 * **C#** → Recommended: 9.0.1 | Latest: 9.0.1 * **HTML/CSS** → Build 10-02-2025 ### New for static sites: The environment now supports the `vite.html` file, making it easier to host sites exported by **Vite**. Additionally, a `404.html` will be created by default to improve the browsing experience. 💡 **What does this mean for you?** * More stability and security in all environments. * More compatibility for modern and production-focused applications. The updates are already available. 😄 # Manage applications from the CLI Source: https://docs.squarecloud.app/en/cli-reference/apps List your Square Cloud applications, show their details, start, stop or restart them and delete the ones you no longer need with squarecloud app. `[appID]` is optional in every command on this page except `list`: see [how the CLI finds your app](/en/cli-reference/quickstart#how-the-cli-finds-your-app). ## `squarecloud app list` ```bash Usage theme={"system"} squarecloud app list [--json] ``` Prints a table of every application in your account: name, app ID, memory, cluster, language and domain (the custom domain when there is one). ```bash theme={"system"} squarecloud app list --json # Prints the raw application list as JSON. ``` ## `squarecloud app info` ```bash Usage theme={"system"} squarecloud app info [appID] [--json] ``` Shows the application ID, name, description, language, memory, cluster, owner, domain, custom domain and creation date. ```bash theme={"system"} squarecloud app info --json # Prints the raw application object as JSON. ``` ## `squarecloud app start` ```bash Usage theme={"system"} squarecloud app start [appID] ``` Starts a stopped application. ```bash Output theme={"system"} ✓ Signal START has been successfully sent to your application. ``` If the application is already running, the CLI says so (`It is already running.`) and exits with code 0. Other refusals from the platform are reported as errors. ## `squarecloud app stop` ```bash Usage theme={"system"} squarecloud app stop [appID] ``` Stops a running application. If it is already stopped, the CLI says so (`It is already stopped.`) and exits with code 0. ## `squarecloud app restart` ```bash Usage theme={"system"} squarecloud app restart [appID] ``` Restarts the application's process. To send new code and restart in one step, use [`squarecloud commit --restart`](/en/cli-reference/deploy#squarecloud-commit). ## `squarecloud app delete` ```bash Usage theme={"system"} squarecloud app delete [appID] [-y] ``` | Flag | Description | | - | - | | `-y`, `--yes` | Skips the confirmation prompt. | Deleting an application is permanent, and the CLI doesn't take a snapshot first. To keep a copy, run [`squarecloud app snapshot create --download`](/en/cli-reference/snapshots#squarecloud-app-snapshot-create) before deleting. Asks `Delete the application ? This action is irreversible [y/N]` before deleting. Without an ID, the command targets the application in the `ID=` line of the current folder, so check the ID in the question. ```bash theme={"system"} squarecloud app delete -y # Deletes without asking, for scripts. ``` ```bash Output theme={"system"} ✓ Your application has been deleted. ``` ## Related | Command | API | JavaScript SDK | VS Code | | - | - | - | - | | `list` | [`GET /v2/users/me`](/en/api-reference/endpoint/users/me) | [`api.account.me()`](/en/sdks/js/client) | [Side bar](/en/vscode-extension/features#applications) | | `info` | [`GET /v2/apps/{app_id}`](/en/api-reference/endpoint/apps/info) | [`api.apps.get()`](/en/sdks/js/managing_application) | Click an application card | | `start` | [`POST .../start`](/en/api-reference/endpoint/apps/start) | [`api.apps.start()`](/en/sdks/js/managing_application) | [Start](/en/vscode-extension/features#applications) | | `stop` | [`POST .../stop`](/en/api-reference/endpoint/apps/stop) | [`api.apps.stop()`](/en/sdks/js/managing_application) | [Stop](/en/vscode-extension/features#applications) | | `restart` | [`POST .../restart`](/en/api-reference/endpoint/apps/restart) | [`api.apps.restart()`](/en/sdks/js/managing_application) | [Restart](/en/vscode-extension/features#applications) | | `delete` | [`DELETE /v2/apps/{app_id}`](/en/api-reference/endpoint/apps/delete) | [`api.apps.delete()`](/en/sdks/js/managing_application) | [Delete](/en/vscode-extension/features#applications) | # Log in to the Square Cloud CLI Source: https://docs.squarecloud.app/en/cli-reference/authentication Log in to the Square Cloud CLI from the browser, with an API key or through SQUARECLOUD_API_KEY in CI, check the current account and renew an expired key. Run the login command in your terminal: ```bash theme={"system"} squarecloud auth login ``` The CLI shows a short code and opens the authorization page in your browser. Type the code on the page and approve. The CLI receives its own API key, no copy and paste needed, and saves it on this machine. ```bash Output theme={"system"} ✓ Logged in as . This API key expires on . ``` A key issued this way has only the permissions the CLI's commands use and expires after **90 days**. [`auth whoami`](#squarecloud-auth-whoami) shows the date; run `squarecloud auth login` again to renew it. The key is saved in a `config.json` file readable only by you: in `%APPDATA%\Square Cloud CLI` on Windows, and in `$XDG_CONFIG_HOME/squarecloud` or `~/.config/squarecloud` on macOS and Linux. ## `squarecloud auth login` ```bash Usage theme={"system"} squarecloud auth login [--no-browser] [--token | --with-token] [-y] ``` | Flag | Description | | - | - | | `--no-browser` | Prints the authorization link without opening a browser. Use it in SSH sessions and containers, and open the link on any device. | | `--token ` | Logs in with an API key you created in the [dashboard](https://squarecloud.app/en/account/security). The key is checked before it is saved. | | `--with-token` | Reads the API key from stdin, for scripts. Can't be combined with `--token`. | | `-y`, `--yes` | Replaces the saved key of another account without asking. | ```bash theme={"system"} squarecloud auth login --token # Logs in with an existing API key. ``` ```bash theme={"system"} echo "$SQUARECLOUD_KEY" | squarecloud auth login --with-token # Reads the API key from stdin. ``` ```bash Output with an API key theme={"system"} API key saved. You are now logged in as . With great power comes great responsibility! ``` * Press `Ctrl+C` to cancel a login that is waiting for approval. * If this machine is already logged in to another account, `auth login` asks before replacing it. Pass `-y` to skip the question. * If your account has reached its API key limit, the browser login says so and continues on its own as soon as you revoke a key in the [dashboard](https://squarecloud.app/en/account/security). * Without a terminal, the command doesn't prompt: it exits with a hint. With `CI=true`, the browser login refuses to run. See [CI and scripts](#ci-and-scripts). ## `squarecloud auth whoami` ```bash Usage theme={"system"} squarecloud auth whoami [--json] ``` Shows the account you are logged in as, its plan and how many days are left before the plan expires. For a key issued by the browser login, it also shows when the key expires and its scopes; when the key comes from `SQUARECLOUD_API_KEY`, it says so instead. ```bash Output theme={"system"} You are currently logged in as on the plan. You have days left before your plan expires. Your API key expires on . Scopes: ``` With `--json`, it prints the account (ID, name, email, locale, plan and creation date) as JSON. ## `squarecloud auth logout` ```bash Usage theme={"system"} squarecloud auth logout ``` Removes the saved API key from this machine. It doesn't revoke the key: to do that, delete it in the [dashboard](https://squarecloud.app/en/account/security). When `SQUARECLOUD_API_KEY` is set, commands keep using it after a logout. ```bash Output theme={"system"} You have successfully logged out of your Square Cloud account. ``` When no account is connected, it prints `No account is connected on this machine.` and exits with code 0. ## CI and scripts In CI, don't log in at all: create an API key in the [dashboard](https://squarecloud.app/en/account/security) and set it in the `SQUARECLOUD_API_KEY` environment variable. Every command uses it instead of the saved key, and the CLI runs even on machines without a home folder. ```bash theme={"system"} export SQUARECLOUD_API_KEY= squarecloud commit --restart ``` * Without a terminal, `auth login` doesn't prompt for anything: it exits with a hint. Use `--with-token`, `--token` or `SQUARECLOUD_API_KEY`. * With `CI=true`, the browser login refuses to run, since its key expires in 90 days and only a person can renew it. More on exit codes and JSON output in [Global flags and CI](/en/cli-reference/global-flags-and-ci#scripts-and-ci). ## When the key stops working If a command says your session expired or the API key was revoked, run `squarecloud auth login` again. Commands that need an account print `You need to be logged in to run this command.` and exit with code 1 when no key is saved or set. ## Related | Task | API | JavaScript SDK | VS Code | | - | - | - | - | | Show the current account | [`GET /v2/users/me`](/en/api-reference/endpoint/users/me) | [`api.account.me()`](/en/sdks/js/client) | Status bar item | | Log in | [API keys](/en/api-reference/authentication) | [`new SquareCloudAPI(key)`](/en/sdks/js/client) | [Connect Account](/en/vscode-extension/installation#install) | # Manage databases from the CLI Source: https://docs.squarecloud.app/en/cli-reference/databases Create, inspect, resize, start, stop and delete Square Cloud databases with squarecloud db, and print or rotate their TLS certificate and password. `squarecloud db` manages the MongoDB, MySQL, PostgreSQL and Redis databases of your account. It also works as `squarecloud database`. Databases have no configuration file, so `[dbID]` is either the ID you pass or, when you omit it in a terminal, a picker of your databases. Find IDs with [`squarecloud db list`](#squarecloud-db-list). ## `squarecloud db create` ```bash Usage theme={"system"} squarecloud db create --name --memory --type --version [--json] ``` | Flag | Description | | - | - | | `--name ` | Database name, 1 to 32 characters. | | `--memory ` | Allocated memory in MB. | | `--type ` | `mongo`, `mysql`, `redis` or `postgres`. | | `--version ` | Engine version: a major version, such as `17` for PostgreSQL or `8` for MongoDB, or a full version. | All four flags are required: without them, the command prints its help. Creating a database needs a Standard, Pro or Enterprise plan. ```bash theme={"system"} squarecloud db create --name my-db --memory 1024 --type postgres --version 17 ``` ```bash Output theme={"system"} ✓ Database my-db () created successfully Save the password now: it is shown only once and cannot be recovered. PASSWORD: URL: ``` The password is shown only once. `db info` doesn't show it again; if you lose it, rotate it with [`db credentials reset password`](#squarecloud-db-credentials-reset). With `--json`, it prints the created database, password and connection URL included, as JSON. ## `squarecloud db list` ```bash Usage theme={"system"} squarecloud db list [--json] ``` Prints the name, ID, engine, memory and cluster of every database in your account. ## `squarecloud db info` ```bash Usage theme={"system"} squarecloud db info [dbID] [--json] ``` Shows the database ID, name, engine, memory, port, cluster, owner and creation date. ## `squarecloud db update` ```bash Usage theme={"system"} squarecloud db update [dbID] [--name ] [--memory ] ``` | Flag | Description | | - | - | | `--name ` | New database name. | | `--memory ` | New allocated memory in MB. | Renames the database or changes its memory. Pass at least one of the two flags: without them, the command prints its help. ```bash theme={"system"} squarecloud db update --memory 2048 ``` ## `squarecloud db start` ```bash Usage theme={"system"} squarecloud db start [dbID] ``` Starts a stopped database. If it is already running, the CLI says so (`It is already running.`) and exits with code 0. ## `squarecloud db stop` ```bash Usage theme={"system"} squarecloud db stop [dbID] ``` Stops a running database. If it is already stopped, the CLI says so (`It is already stopped.`) and exits with code 0. ## `squarecloud db status` ```bash Usage theme={"system"} squarecloud db status [dbID] [--all] [--raw] [--json] ``` | Flag | Description | | - | - | | `--all` | Shows every database instead of one: database ID, whether it is running, CPU and memory. | | `--raw` | Prints the raw numeric stats as JSON instead of the table. | Prints the database ID, CPU usage, memory, disk and status. ## `squarecloud db metrics` ```bash Usage theme={"system"} squarecloud db metrics [dbID] [--json] ``` Prints the last 24 hours of the database's CPU usage, RAM usage and network traffic, one row per 5-minute data point. ## `squarecloud db credentials certificate` ```bash Usage theme={"system"} squarecloud db credentials certificate [dbID] ``` Prints the database's TLS certificate, which clients use to connect over TLS. ```bash theme={"system"} squarecloud db credentials certificate > certificate.pem # Saves the certificate to a file. ``` ## `squarecloud db credentials reset` ```bash Usage theme={"system"} squarecloud db credentials reset [dbID] [-y] ``` | Flag | Description | | - | - | | `-y`, `--yes` | Skips the confirmation prompt. | Rotates the password or the TLS certificate, after a `y/N` confirmation. The old one stops working immediately, so update every client that uses it. A new password is printed once; after rotating the certificate, get the new one with `db credentials certificate`. ```bash theme={"system"} squarecloud db credentials reset password ``` ## `squarecloud db delete` ```bash Usage theme={"system"} squarecloud db delete [dbID] [-y] ``` | Flag | Description | | - | - | | `-y`, `--yes` | Skips the confirmation prompt. | Deleting a database is permanent. To keep a copy of the data, run [`squarecloud db snapshot create --download`](/en/cli-reference/snapshots#squarecloud-db-snapshot-create) first. Asks `Delete the database ? This action is irreversible [y/N]` before deleting. ## Related | Command | API | JavaScript SDK | VS Code | | - | - | - | - | | `create` | [`POST /v2/databases`](/en/api-reference/endpoint/databases/create) | [`api.databases.create()`](/en/sdks/js/databases) | [Create database](/en/vscode-extension/features#databases) | | `list` | [`GET /v2/users/me`](/en/api-reference/endpoint/users/me) | [`api.account.me()`](/en/sdks/js/client) | [Databases section](/en/vscode-extension/features#databases) | | `info` | [`GET .../{database_id}`](/en/api-reference/endpoint/databases/info) | [`api.databases.get()`](/en/sdks/js/databases) | | | `update` | [`PATCH .../{database_id}`](/en/api-reference/endpoint/databases/edit) | [`api.databases.update()`](/en/sdks/js/databases) | | | `start` | [`POST .../start`](/en/api-reference/endpoint/databases/start) | [`api.databases.start()`](/en/sdks/js/databases) | [Start](/en/vscode-extension/features#databases) | | `stop` | [`POST .../stop`](/en/api-reference/endpoint/databases/stop) | [`api.databases.stop()`](/en/sdks/js/databases) | [Stop](/en/vscode-extension/features#databases) | | `status` | [`GET .../status`](/en/api-reference/endpoint/databases/status) | [`api.databases.status()`](/en/sdks/js/databases) | | | `status --all` | [`GET /v2/databases/status`](/en/api-reference/endpoint/databases/status-all) | [`api.databases.statusAll()`](/en/sdks/js/databases) | | | `metrics` | [`GET .../metrics`](/en/api-reference/endpoint/databases/metrics) | [`api.databases.metrics()`](/en/sdks/js/databases) | | | `credentials certificate` | [`GET .../credentials/certificate`](/en/api-reference/endpoint/databases/credentials/get_certificate) | [`api.databases.certificate()`](/en/sdks/js/databases) | [Download TLS certificate](/en/vscode-extension/features#databases) | | `credentials reset` | [`POST .../credentials/reset`](/en/api-reference/endpoint/databases/credentials/reset) | [`api.databases.resetCredentials()`](/en/sdks/js/databases) | | | `delete` | [`DELETE .../{database_id}`](/en/api-reference/endpoint/databases/delete) | [`api.databases.delete()`](/en/sdks/js/databases) | [Delete](/en/vscode-extension/features#databases) | Snapshots of databases are on [Snapshots](/en/cli-reference/snapshots#squarecloud-db-snapshot-create). # Upload and update apps from the CLI Source: https://docs.squarecloud.app/en/cli-reference/deploy Deploy a folder as a new Square Cloud app with squarecloud upload, send changes with squarecloud commit and check what the zip contains with squarecloud zip. * **`upload`** creates a **new** application, with a new ID. * **`commit`** sends files to an application that **already exists** and keeps its ID, domain and settings. * **`zip`** builds the same zip locally, without sending it, so you can check what goes in. `upload` and `commit` also exist under `squarecloud app` (`squarecloud app upload`, `squarecloud app commit`). New here? Start with the [Quickstart](/en/cli-reference/quickstart). ## What goes in the zip `upload`, `commit` and `zip` zip the current folder and leave out what [`squarecloud.ignore`](/en/getting-started/squarecloud-ignore), in the project root, lists. It uses `.gitignore` syntax and is the same file the [VS Code extension](/en/vscode-extension/features#ignore-rules) reads. * **Always left out first:** `node_modules`, `.git`, `.github`, `.vscode`, `package-lock.json`, `pnpm-lock.yaml` and `yarn.lock`. Dependencies are installed on the platform from your manifest. To send a lockfile because you need pinned versions, add a `!` rule, such as `!package-lock.json`. * **Links:** a symbolic link to a file is zipped as that file; links to folders and broken links are skipped with a note on stderr. * **Older file names** (`.squareignore`, `.squarecloudignore`, `square.ignore`) are still read when `squarecloud.ignore` is missing, with a warning to rename the file. ## `squarecloud upload` ```bash Usage theme={"system"} squarecloud upload [--file ] [--json] ``` Zips the current folder and creates a new application from it. The folder needs a [`squarecloud.app` or `squarecloud.config`](/en/getting-started/config-file) file. | Flag | Description | | - | - | | `--file ` | Uploads a zip you already have instead of zipping the current folder. Relative and absolute paths both work. | ```bash theme={"system"} squarecloud upload # Zips the current folder and deploys it as a new application. ``` ```bash theme={"system"} squarecloud upload --file ./build/my-app.zip # Uploads an existing zip. ``` ```bash Output theme={"system"} Compressing the current directory. Uploading the zip file to Square Cloud. ✓ Application uploaded to Square Cloud! Open it at https://squarecloud.app/dashboard/applications/ ``` After a successful upload, the CLI writes `ID=` into the configuration file of the current folder, so later commands know which app you mean. See [where the app ID is saved](/en/cli-reference/quickstart#where-the-app-id-is-saved). With `--json`, stdout carries only the created application (ID, name, description, domain, cluster, memory, CPU and language) as JSON; progress messages go to stderr. ## `squarecloud commit` ```bash Usage theme={"system"} squarecloud commit [appID] [--file ] [--path ] [-r] ``` **Aliases:** `squarecloud push`, `squarecloud app commit`, `squarecloud app push` Zips the current folder and sends it to an existing application. The ID comes from the argument or from the `ID=` line of your configuration file. Unlike other commands, `commit` never opens a picker: without either, it stops with exit code 1. | Flag | Description | | - | - | | `--file ` | Sends one file instead of the current folder. A zip is extracted in the application; any other file is written under its own name. Relative and absolute paths both work. | | `--path ` | Commits into this folder of the application instead of its root. | | `-r`, `--restart` | Restarts the application after the commit. | ```bash theme={"system"} squarecloud commit # Sends the current folder to the app in the ID= line. ``` ```bash theme={"system"} squarecloud commit --restart # Sends the current folder to a specific app, then restarts it. ``` ```bash theme={"system"} squarecloud commit --file ./config.json --path settings # Sends one file into the settings folder of the app. ``` ```bash Output theme={"system"} Compressing the current directory. Committing to your application ()... Committed to your application. ``` Large commits are not cut off by a timeout. `commit` has no JSON output. ## `squarecloud zip` ```bash Usage theme={"system"} squarecloud zip ``` Zips the current folder the same way `upload` and `commit` do and saves it as `.zip` inside that folder, replacing an existing file with that name. It doesn't need a login. ```bash Output theme={"system"} ✓ Your project was zipped to ``` If the zip can't be written, the CLI prints `Couldn't zip your application.` with the reason; if an old `.zip` can't be deleted, it says so. Both exit with code 1. ## Related | Command | API | JavaScript SDK | VS Code | | - | - | - | - | | `upload` | [`POST /v2/apps`](/en/api-reference/endpoint/apps/upload) | [`api.apps.create()`](/en/sdks/js/commit_and_upload) | [Upload New Application](/en/vscode-extension/features#upload-a-new-application) | | `commit` | [`POST /v2/apps/{app_id}/commit`](/en/api-reference/endpoint/apps/commit) | [`api.apps.commit()`](/en/sdks/js/commit_and_upload) | [Commit](/en/vscode-extension/features#commit-changes-to-an-existing-application) | To deploy on every push instead, see [GitHub deploys](/en/cli-reference/github-deploys). # Set up custom domains from the CLI Source: https://docs.squarecloud.app/en/cli-reference/domains Attach a custom domain to a Square Cloud website, read the DNS records to create, and list every domain and shared domain of your account from the terminal. A custom domain takes two steps: attach it to the application with `app network domain`, then create the DNS records that `app network dns` prints at your DNS provider. The help center has a [step-by-step custom domain guide](https://help.squarecloud.app/en-us/article/how-to-set-up-your-own-domain-cnamedns-1fzbrgh/) and explains [why a domain can take a while to propagate](https://help.squarecloud.app/en-us/article/why-hasnt-my-domain-propagated-yet-dns-f5jzoy/). `[appID]` and `--app` are optional: see [how the CLI finds your app](/en/cli-reference/quickstart#how-the-cli-finds-your-app). ## `squarecloud app network domain` ```bash Usage theme={"system"} squarecloud app network domain [--app ] ``` Sets the custom domain of the application, replacing the previous one. Custom domains are available on the Standard, Pro and Enterprise plans. To remove the custom domain, pass `@` as the hostname. ```bash theme={"system"} squarecloud app network domain www.example.com ``` ```bash Output theme={"system"} ✓ Custom domain www.example.com configured successfully Run 'squarecloud app network dns' to see the DNS records you need to create. ``` ## `squarecloud app network dns` ```bash Usage theme={"system"} squarecloud app network dns [appID] [--json] ``` Prints the DNS records to create for the custom domain, with the type, name, value and status of each one. Without a custom domain, it says to configure one first. ## `squarecloud app domains` ```bash Usage theme={"system"} squarecloud app domains [--json] ``` Lists every domain configured across all your applications: hostname, type and the ID of the application that owns it. ## `squarecloud app load-balancers` ```bash Usage theme={"system"} squarecloud app load-balancers [--json] ``` **Aliases:** `lb` Lists the custom domains attached to more than one application (load balancers), grouped by hostname, with the ID, name and cluster of each application sharing the domain. It starts with how many applications per domain your plan allows. ```bash theme={"system"} squarecloud app lb --json # Prints the raw load balancer list as JSON. ``` ## Related | Command | API | JavaScript SDK | | - | - | - | | `network domain` | [`POST .../network/custom`](/en/api-reference/endpoint/apps/network/custom) | [`api.apps.network.setDomain()`](/en/sdks/js/network) | | `network dns` | [`GET .../network/dns`](/en/api-reference/endpoint/apps/network/dns) | [`api.apps.network.dns()`](/en/sdks/js/network) | | `domains` | [`GET /v2/apps/domains`](/en/api-reference/endpoint/apps/domains) | [`api.apps.domains()`](/en/sdks/js/managing_application) | | `load-balancers` | [`GET /v2/apps/load-balancers`](/en/api-reference/endpoint/apps/network/load-balancers) | [`api.apps.loadBalancers()`](/en/sdks/js/managing_application) | Traffic, errors and cache of a website are on [Edge analytics](/en/cli-reference/edge-analytics). # Read edge analytics from the CLI Source: https://docs.squarecloud.app/en/cli-reference/edge-analytics Read the traffic, errors, request logs and latency of a Square Cloud website at the edge with squarecloud app network, and purge its edge cache. These commands report what Square Cloud's edge sees for a website: its `squareweb.app` domain and its custom domain. `[appID]` is optional: see [how the CLI finds your app](/en/cli-reference/quickstart#how-the-cli-finds-your-app). ## Time window `analytics`, `errors`, `logs` and `performance` cover the last 24 hours by default. Change the window with these flags, which take [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) times such as `2026-07-01T00:00:00Z`: | Flag | Description | | - | - | | `--start