What's New.
Adding your first service
A new environment opens to an empty canvas, with nothing on it to say what to do next. Two changes:
- A guide on the empty canvas. When an environment has no resources, a guide points at adding your first service. It doesn't block anything: you can still pan, zoom, and use the add button and right-click menu as normal.
- GitHub first in the add menu. Deploying a repo is the most common way to start, so it's now the first option. The menu is also flattened, so adding a service from GitHub or from a container image are both top-level choices rather than a submenu.
Faster canvas loads
Opening a project used to put a loading overlay in front of the canvas while it fetched and drew itself. The canvas is now rendered on the server, so your services, functions, and connections are on screen when the page loads instead of after a spinner.
A better view of your projects
The projects page used to be a plain grid of names. Now each card gives you a quick sense of what's actually inside a project before you open it.
Every card surfaces:
- The most recently active environment and its status at a glance.
- A preview of that environment's resources: services, functions, databases, and volumes.
- Compact CPU and memory meters showing what's allocated against your limits.
- A footer with environment and resource counts and when the project was last updated.
- Recent deployment activity.
We've also added search and sorting, so finding the right project is quick once you've got a few of them. Sort by name, last activity, or when it was created.
A clearer deployment history
The history panel has been rebuilt around the thing you actually scan for: what changed, and when.
At first glance you can see the status, who started the deployment, when the deployment happened, the commit message, and how many resources were created or destroyed. Expand to see the details.
Selecting a past deployment no longer snaps your canvas to it. You preview it and apply the historical state deliberately, with a separate button, so browsing history can't clobber unsaved work. You will also be able to see active deployments in this list.
We've also updated the flow of the apply, with commit messages now being required. To keep that from being a chore, you can generate a short summary of your changes as the default message. Now every entry in the history carries something meaningful even when you don't type one yourself.
Smarter Docker Compose imports
Importing a compose file with a lot of shared configuration used to mean a lot of repeated typing. A stack like Supabase reuses the same values, such as a database password or a signing secret, across many services, and we were asking you to fill each one in every service that used it.
Two changes fix that:
- Shared variables are asked for once. When the same variable shows up across multiple services, we now set it up as an environment-level secret that each service references, instead of a separate copy per service. The import form groups these as shared, so you fill in a database password once rather than ten times.
- Variables inside connection strings are picked up. Values embedded in a larger string, like a password inside a
postgres://URL, used to be missed entirely. They're now detected and surfaced alongside everything else.
The result is a much shorter form when you import a real-world stack, and fewer chances to fat-finger the same secret into a dozen boxes.
Knowing when your Suga URL is live
It wasn't always clear when your Suga URL was actually live. Adding a generated URL made the row in the dashboard look ready right away, even though the service still had to be redeployed before traffic flowed. Hitting a *.suga.run host that wasn't currently routed would land you on a generic gateway error, with nothing to say whether the route was wrong, the deploy had been torn down, or the platform was broken.
Both are sorted now. Custom domain rows show a clear pending state with a redeploy prompt right in the row, and unrouted *.suga.run hosts serve a branded Suga page that explains the hostname isn't routed yet.
A new new project flow
We've updated the flow for new projects so there's more direction on what you can do. We used to just put you on an empty canvas, but now there's a proper /new page that asks where you want to start before it goes off and creates anything. There are three new options:
- Import a GitHub repo, where you pick a repo and configure the build before deploying.
- Start from a template, and once you pick one and fill in any env vars it needs, you end up with a project that's already wired up.
- Start with an empty project, which is the same path it always was for getting to a blank canvas.
This is all available from an unauthenticated state, so you can start adding "Deploy to Suga" buttons to all your project READMEs.
Builds are up to 2x faster
Builds from a git repo now run end-to-end inside the builder itself. The clone and build-plan step used to run on a separate worker before handing off, which meant copying your repo across the wire twice. Now the builder fetches your code directly and goes straight into the build.
For most repos this lands up to 2x faster, with no action needed on your end.
Redesigned canvas nodes
Service and volume nodes on the canvas have a new design with more useful information visible up front.
- An icon bar on each service node shows git/image source, mount path, and network status without opening config.
- Status is now split into live state (running, failed, deploying, warning) and change state (new, modified, deleted). Both are visible at the same time, so a running service with pending changes shows both.
- If volumes are detached from their parent service, they now reposition near the parent node. Resolving an issue that caused volume nodes to be moved off screen.
Connection status and graceful degradation
Sometimes the connection between your browser and Suga's hosted infrastructure can drop, whether it's your internet going down or an outage on Suga's end. Previously, these issues could be confused with errors in your deployed resources. Now they're clearly identified as connection problems.
- If sync disconnects, the canvas locks and shows a connection banner instead of stale or loading indicators.
- If workflow statuses can't be retrieved, they show "unknown" rather than errors that look like your service is broken.
- If real-time updates drop, a banner lets you know updates have paused.
This was done along with an updated Suga status page for each part of the system.