What's New.
Duplicated services no longer share a build
If you duplicated a service that had a GitHub build wired up, the original and the duplicate ended up pointing at the same build configuration. Editing one would silently change the other. Each duplicate now gets its own.
Clearer errors for Cloudflare-proxied custom domains
If your custom domain's CNAME was proxied through Cloudflare (the orange cloud), Cloudflare answers DNS with its own edge IPs and hides the record Suga checks for. Verification would fail with a generic "CNAME not found" message, with no hint that the proxy was the cause.
Suga now detects when a record is being proxied through Cloudflare and tells you exactly what to fix: set the CNAME to "DNS only" (the gray cloud), then verify. No more guessing why an otherwise correct record won't validate.
Undo a typo, not the canvas
Hitting ctrl+z while typing in a sheet used to undo your last canvas edit instead of fixing your typo. Same story for redo and a handful of other shortcuts that fired when you didn't mean them to. Canvas shortcuts now stay out of the way while you're typing.
Empty repo imports
If you tried to import a repo you'd just pushed commits to, you might have seen it show up as "empty" and refuse to import, leaving you stuck with no obvious way forward. Fixed now.
Worth sharing the lesson: the GitHub API exposes a size field on each repo, and size === 0 is a tempting shortcut for detecting empty ones. It isn't reliable. That field is updated by a background job on GitHub's side that can lag by up to an hour, so a repo you just pushed to can still report zero size well after the fact. We now detect empties at the branch-fetch stage instead: no branches, no commits, nothing to import. Repos with actual content sail through, regardless of what size claims.
Build log fixes
If you noticed your build log freezing mid-build, that wasn't you. Fixed now, along with a couple of related quirks.
- Logs will reliably stream live as the build runs.
- Logs consistently show up on completed builds too, not just in-progress ones.
- If your connection drops mid-build, it reconnects and picks up where it left off.
UX fixes and polish
Handful of UI improvements:
- The "enable Suga domain" option was hard to find and didn't prefill the port. It's now a clickable card with a default port.
- We've improved the consistency of styling (borders, radius, etc.) for UI elements, such as inputs, selects, and autocompletes.
- Services no longer require a private port. Public ports are automatic, so leaving private ports empty is fine.
- Container errors in deployment logs now link to explanations, instead of just expanding the log line.
Canvas node positioning and selection fixes
A round of fixes to how nodes behave on the deployment canvas:
- Services no longer appear behind the config panel when added to the canvas. Centering now accounts for the side panel width.
- Adding a new service opens the config tab automatically. Switching between existing services preserves whichever tab you were on.
- Unmounting a volume no longer sends it off screen. Detached volumes now reposition next to their parent node.
- Undo after deleting a node restores it to its original position on the canvas.
Variable masking improvement
Switched environment variable masking from native input type toggling to CSS-based masking. This fixes cross-browser inconsistencies where some browsers would offer to save masked values as passwords or interfere with copy/paste behavior.
Canvas viewport improvements
Fixed several canvas viewport issues:
- New nodes now center correctly in the viewport regardless of sidebar state
- Fixed offset calculation when the sidebar is open, so nodes don't appear shifted
- Volume deletion no longer causes sync issues that could desync the canvas state
Resource name validation
Resource names are now validated before deployment to catch naming issues early. Previously, invalid names (too long, unsupported characters) would only fail at deployment with cryptic error messages. Now you get clear feedback in the UI before you deploy.