Upload and deploy errors
These codes come back from the dashboard, the CLI or the API when Square Cloud rejects an upload. Nothing is deployed, so fix the cause and upload again.INVALID_DEPENDENCY
What it means: the upload has no dependency file for its language, or the file is empty. Square Cloud checks that this file exists at the root of the zip before it installs anything. How to fix: put the dependency file at the root of the zip, next tosquarecloud.app, and make sure it isn’t empty: package.json (Node.js, Bun, Deno), requirements.txt or pyproject.toml (Python), Cargo.toml (Rust), Gemfile (Ruby), go.mod or go.work (Go) or mix.exs (Elixir). Then upload again. A misspelled package or version shows up later, as an install error in the logs.
KEEP_CALM
What it means: you, or an automation, repeated an action too quickly, such as a restart, an upload or a snapshot. How to fix: wait a moment and try again. The rejected action simply didn’t run:KEEP_CALM never stops or affects a running application. If a snapshot fails with DAILY_SNAPSHOTS_LIMIT_REACHED instead, your plan’s daily snapshot allowance is used up until the next day.
Website doesn’t load
What it means: the application is deployed, but opening its address shows one of these pages instead of your site:- “The website took too long to respond”: Square Cloud found your application but got no answer from it.
- “This site couldn’t be found”: no website is published at that address.
-
Make your server listen on port
80and host0.0.0.0. A server bound tolocalhost,127.0.0.1or any other port (3000, 5173, 8080…) can’t be reached. The runtime sets thePORTandHOSTenvironment variables to these values, so read them: - Open the logs: if the application crashed or is still installing dependencies or building, the site can’t answer yet. Fix the error shown there, or wait for the build to finish.
-
Check that
MEMORYgives the build enough room: a framework build that runs out of RAM stops the application withLACK_OF_RAM.
- Check the address: it’s
https://<SUBDOMAIN>.squareweb.app, with the subdomain from your configuration file. - If you just deployed, wait up to a minute for the address to be published.
- An application deployed without
SUBDOMAINisn’t a website and can’t become one: upload it again as a new application withSUBDOMAINset. - On a custom domain, the DNS may still be propagating. See why your domain hasn’t propagated yet.
EADDRINUSE (port already in use)
What it means: the app tries to bind the same network port twice. Why it happens: two servers are started in the code, or alisten(...) call gets created again inside an event handler (for example, on every request or every reconnect) instead of once at startup.
How to fix:
- Start one web server, once, listening on port
80and host0.0.0.0. - Search your code for more than one
.listen()(Node.js) orrun()(Python/Flask/Django) call and remove the duplicate. - Make sure the listen call sits at the top level of your startup file, not inside a callback that can fire more than once.
”Cannot find module” (Node.js) and ModuleNotFoundError (Python)
What it means: a package your code imports isn’t installed. Why it happens:- The library isn’t listed in
package.json’sdependencies(Node.js) or inrequirements.txt/pyproject.toml(Python), so it never gets installed on the platform, even if it works on your machine. - In Node.js, the package is only in
devDependencies. Applications run withNODE_ENV=production, sonpm installskips development dependencies.
- Add the missing package to
dependencies(or your Python dependency file) with a valid version. - Confirm the dependency file itself is included in the zip you uploaded.
- Restart the application. For Node.js, dependencies are only installed when
node_modulesdoesn’t exist: deletenode_modules(andpackage-lock.json, if you uploaded one) in the dashboard’s file manager, then restart for a clean reinstall.
better-sqlite3 / native bindings errors
What it means: an error likeCould not locate the bindings file when your app uses better-sqlite3 (directly, or through quick.db).
Why it happens: the installed better-sqlite3 version predates the platform’s current Node.js LTS, so its prebuilt native binding doesn’t match the runtime.
How to fix:
- Update
better-sqlite3to12.5.0or later (if you usequick.db, update it to9.1.7or later). - Delete
node_modulesandpackage-lock.json. - Restart the application for a clean reinstall that rebuilds the native bindings against the current runtime.
Stopped by a resource limit
If the logs end with[SQUARE-SHIELD] LACK_OF_RAM, LACK_OF_CPU or ABUSE_REQUESTS, or starting the application fails with CONTAINER_TEMPORARILY_SUSPENDED, Square Cloud stopped it for going over its resources. The status table explains each one and how to fix it.
Times are off by a few hours
Applications run in UTC. A job scheduled for 09:00 runs at 09:00 UTC, and the times your code prints to the logs are in UTC. Convert times in your code, or see how to change your application’s time zone in the help center.Related guides
- Configuration file: every field and the error it raises.
- Environment variables: set secrets, then restart to apply them.
- Discord bot errors and database connection errors.

