You can now publish frontend and SPAs as Static sites. You can also deploy a Docker image from a registry: you build it, we run it. Both are in Beta.

Static sites
Static site is a new app type, in Beta. Connect GitHub or GitLab and you get a public URL. It is hosting for HTML, CSS, and JS. You run a build to produce those files, we serve them.
On create you set a language (default Node), a build command, and a
publish directory (dist, build,
or out). SPA routing is on by default, so deep links work.
Pre-fill with AI can fill the
publish directory now.
Hosting is free ($0). Custom domains work the same as web apps.

Docker image deploys
Docker image is a new source for web, worker, and private apps, in Beta. You build the image. We pull it and run it. Skip Git if we don’t build your language, or if you already ship images from CI.
Docker Hub, GHCR, GitLab, or a private registry. Public images need no credentials. Private ones use a team container registry credential.
There is no git build step. Redeploy picks a tag. Web and private still need a port.
More in Deploying from a Docker Image and Container registry credentials.

Environment variables, inline
The per-row modal is gone. Create and the application sidebar now share the same table: key, value, Secret, remove. Existing secrets stay masked. You can replace a value. You can’t read it back.
Import from .env pastes
KEY=value lines. Append * to a key (API_KEY*=…) and it is marked secret.
Blank rows are ignored on save, so an extra empty line is not an error.
Also this month
- Failed-deploy emails include a recent logs excerpt and a View logs button
- The runtime picker is now labeled Language
- Empty lists have type-specific illustrations (web, worker, private, static, database, and the rest)
- Owners can delete a team from settings. Blocked if the team owes credits
- Fixes: sidebar logs no longer mix between apps, histogram no longer sticks on first load, email-verify redirect 404