You don’t need to write a Dockerfile or a build script. Cubli builds your code with Railpack: it looks at your files, detects the language and framework you use (such as Node, a static site or PHP) and builds an image from it. That applies to code from the CLI, from your AI tool and from GitHub.
What is uploaded
With cubli up (or your AI’s deploy tool), the CLI packs your folder:
- Your
.gitignorefiles count, in every folder, just as in git. A.dockerignoreat the top counts too. - These never go along, whatever your ignore files say:
.git,node_modules,.envand.env.*,.cubli.json,.cubli-data,.DS_Store, and SSH keys such asid_rsaandid_ed25519. - Packed, it may be at most 200 MB.
So secrets don’t go in your code but in variables.
Building
Building happens on a separate build server and takes at most 15 minutes. Cubli keeps a build cache per service, never shared with others, so a second build is usually faster.
- Dockerfile: if there is one in your code, Cubli does not use it. Railpack builds your app.
- Node version: from
package.json(engines), otherwise the current LTS. You can pin it on your app under Settings, Runtime, Node version (20, 22 or 24). - Variables at build time: your variables are available while building, but are not stored in the image. Variables that end up in the browser, such as
VITE_*orNEXT_PUBLIC_*, are built in. So set those before deploying, and deploy again when you change them.
Want to know beforehand what Cubli sees in your folder? Run npx @cubli/cli check. It reads your folder without uploading anything and tells you which framework it is, what your app uses and which variables you still need to set.
Starting: the port
Your app must listen on the port in the PORT variable. Cubli sets it; the default is 8080. You see and change the port on your app under Settings, Starting.
A static site, such as an Astro site, has nothing to do: Cubli serves the files.
When a version goes live
A new version only gets visitors once it answers. Cubli checks every few seconds whether your app responds on its port. If you set a path under Health check, such as /health, that path has to answer.
- Until the new version is ready, the previous one keeps running.
- If the new version does not start, the previous one stays online and the deploy shows the reason.
- Every version is kept, so going back is always possible, without rebuilding.
What Cubli gives your app
PORT: the port your app listens on.CUBLI_URL: your site’s primary address, such ashttps://bakkerijjansen.nl.- Connected databases bring their own variables, such as
DATABASE_URL. See Add and connect databases.
Thank you for your feedback.What was missing? Mail it to support@cubli.io
Read next
Stuck? Mail support@cubli.io, or ask from your dashboard: Help





