September 2026
Dashboard
- The sidebar lists Docs, Tutorials,
llms.txtand MCP Server above the account divider. Docs, tutorials (YouTube@vertracloud) andllms.txtopen in a new tab. MCP Server is locked for now. - The workspace overview now answers whether the fleet is healthy. RAM, peak CPU and a health score sit in cards with a segmented meter; resources over 80% RAM or CPU are listed before the app and database lists.
- Opening an app or database on a phone uses a bottom bar instead of a row of labels you had to scroll sideways. Overview, logs, files, snapshots and settings stay under the thumb; activity remains in the menu.
- Inside a project, the same meters show CPU, RAM and network (or storage and connections on a database), with start / restart / stop next to the status. Request and connection figures marked “preview” are placeholders until the API exposes them.
- The published page of an application sits as a large iframe card (~44% of the overview header). Click it to open the live site in a new tab. Next to it, labeled topics: app id, domains (subdomain and custom domain together), status with uptime beside the cluster, creation date, and source. The preview reloads once a minute while the page is in view — a restart still has to build, so the card does not refresh two seconds after you click. Without web publishing, the same card stays in place and sends you to Network settings to publish.
- The origin of an application (uploaded zip vs GitHub repo) is on the overview immediately. Connecting or disconnecting GitHub still happens in Settings; the overview no longer waits on a second request just to show the label.
- The file manager opens faster and is usable on a phone. Folders and files share one list, the path trail jumps to any ancestor folder, and dropping a zip stages a commit in place instead of covering the page. Opening a file shows the editor placeholder — not the folder list — and browsing a folder you already opened no longer flashes empty.
- Log consoles can be expanded to a larger view. The expand control sits next to the overflow menu; download lives in that menu. Esc or the same control returns the console to its place on the page.
- A plan due to expire in three calendar days or already expired shows a notice above the project list, with a renew action to Billing. “Today” and “tomorrow” follow Brasília’s calendar, and the clock is 24-hour Fortaleza time with the period of day (“02:14 da madrugada”, not a 12-hour “02:14” that could be read as afternoon). The small “expires in N days” line next to the plan name is gone.
- The project switcher lists the open project first, then running ones, then stopped.
- The Resources section in the mobile site menu now opens on tap. It used to close in the same gesture.
- Support is a page, not a cramped FAQ card. Discord, email and docs sit as three links; the questions use the same two-column accordion as the plans page; guides underneath jump to deploy, common errors, downgrade and billing. The old copy that mentioned tickets and live chat as a separate product is gone.
- After a minute on the dashboard, a card in the bottom-left invites you to the Discord community. Closing it hides the card for seven days. The landing page invite still uses the one-minute delay and does not keep that long snooze.
- Creating a project is a split screen. The left column carries a short tip for the step you are on; the form sits in one card on the right. Type and source share the first step. After you pick a ZIP or a GitHub repo you can name the project and add an optional description before continuing. An application then goes through build, environment variables and network as separate steps before review; a database goes through engine and storage, then review. Back and Continue stay pinned to the bottom of that card after you leave the first choice. If the plan does not have enough RAM for the memory you picked, the build step says so and Continue stays disabled. GitHub import starts with a repository URL, or you pick from the repos on your account. Environment variables use the same side sheet as an application’s Environment tab.
- Project names follow the API limit of 50 characters. A ZIP or GitHub import used to keep the full file or repository name (often a timestamp plus a UUID) and then fail on create. The wizard now trims that derived name, and the database name field stops at 50.
- Snapshots use the same list and dialogs as the rest of the dashboard. Search and filter match Projects and Activity, creating a snapshot picks a project the way you add one to a workspace, and the list of snapshots — on the Snapshots page and inside a project — is the same row layout. The create button is the same size as New project, without the accent fill.
- Changing a project’s memory now shows up on the project list immediately. The allocated amount used to stay on the old figure until the list was loaded again.
- The overflow menu on a project row leads with Details and Settings. Logs and terminal keep their place underneath, without repeating “Open” on every line. When the menu does not fit the window, it scrolls so Delete stays reachable.
- Projects can be viewed as a list (the default) or as cards, from a control next to search. The choice lasts for the tab; loading placeholders follow the same layout.
- Environment variable keys keep the case you type. The field used to rewrite every key to uppercase as you typed; mixed case is valid and is no longer forced.
- On the Free plan, opening Projects shows an upgrade dialog with what a paid plan adds. It says you create one project — not one app and one database, because Free cannot create a database. The action goes to Review order for Economy (monthly, PIX), not the plans page. Dismissing it hides it for the session; a surface notice remains above the list. The header is tinted for the next plan (gold for Economy), not hatched.
- A paid plan at 85% of its RAM cap opens the same dialog for the next plan. Economy → Pro (orange), Pro → Scale (green), Scale → Intermediary (purple), Intermediary and up → Enterprise (blue). Enterprise 32, already at the top, does not get a prompt.
- New project on the personal list is a split button. The chevron opens Redeem code as a dialog on Projects (
?redeem=also works). After a successful redeem, the same plan card used for upgrade prompts thanks you and lists what the new plan adds versus the previous one. The mobile navigation sheet lists Docs, Tutorials,llms.txtand MCP Server above the account row, like the desktop sidebar — creating a project stays on the Projects page, not in that menu. - Changing an app’s RAM no longer treats leftover plan memory as the whole budget. The unused 448 MB on the plan is what is left after this app; the app can still keep or lower its own allocation down to 512 MB without an upgrade. The field describes the container RAM, and “Need more RAM on the plan?” opens the upgrade dialog — it does not quote this app’s ceiling.
- Live CPU, memory, storage and network stay on the overview even below 512 MB, including the charts — two live samples are enough to draw the line. The 512 MB floor only gates advanced metrics (the 10m / 30m / 24h history). The notice title says so. Expand RAM goes to the project’s settings when the plan still has 512 MB to give this project, or opens the same upgrade dialog used on Projects (
?upgrade=pro&upgrade_for=advancedMetrics) for the next plan that actually has 512 MB — Pro, not Economy (256 MB). The page used to replace the whole telemetry section with an empty “insufficient hardware” card. - Features locked by plan open that same upgrade dialog instead of sending you to the plans page. Settings cards dropped the “From Intermediary” header badge; the plan name now sits in a notice in the card body with an Upgrade plan link. File manager and the database data tab use the same empty layout as Snapshots. Creating a snapshot on a plan without backups (below Scale) opens the Scale upgrade dialog, instead of an error toast. The title and description follow the feature that opened it (snapshot, files, auto-restart, deploy, metrics, and so on) — they no longer reuse the “memory is at the cap” copy unless RAM itself was the trigger. The sidebar “Upgrade to …” button after the getting-started guide uses the same dialog (
?upgrade=), not a second popup. Refreshing the dashboard no longer flashes Economy before the real next plan. - Attachment lines that go up or left no longer loop the long way around. The curve follows the two cards instead of shooting past them first.
- The project name on the overview opens a dialog to rename it, edit the description and change RAM. A pencil sits next to the title. Saving a new memory amount still asks whether to restart now, as in Settings. After you save, the heading updates immediately — it used to keep the old name until you reloaded.
- Back in a project’s sidebar steps up one level. On Data, logs, files or settings it returns to that project’s overview; only from the overview does it go to the projects list.
- The plan name on Projects is a colored plate, using that plan’s color, with a shine across it. The billing link sits under the plate.
Workspaces
- A workspace is no longer hidden when your plan ends. When a paid plan expires the account falls back to Free, which cannot create workspaces — and the Workspaces page used to hide the ones you already had behind the upgrade notice. Anyone on Free who belonged to someone else’s workspace saw the same empty gate. The list is now always shown; only the create button follows the plan.
- A workspace whose owner’s plan expired is frozen, not deleted. Nothing is removed: members, projects and the workspace itself stay. What stops is writing — renaming, inviting, changing a role and linking a project are refused while the plan is gone, and the row is marked Frozen. Viewing, removing a member or a project, leaving and deleting stay available, and everything works again the moment the plan is renewed. The plan that counts is the owner’s: a Free member of a paid workspace is unaffected.
- Roles now match what the table says they do. Operator can start, stop and restart applications and databases — the whole point of the role, which until now was refused with an access error. And Developer can no longer delete an application or a database: deletion is irreversible, and the permissions table never granted it. Deleting is Owner and Admin only. Everything else is unchanged — Developer keeps deploying, editing files, environment variables, networking and configuration.
Workspaces v2
- Invite codes are gone. Bring people in by e-mail (a real invite sent to one address, valid 7 days) or by link (a shareable URL, valid 24 hours, optionally capped at a number of uses) — both assign a role up front, from the workspace’s Invites tab.
- Members can have an expiry date. Set one when inviting or afterward, and access ends on its own on that date — useful for a contractor or a temporary collaborator, without anyone having to remember to remove them.
- Activities and audit logs are workspace-scoped now, not just your own actions inside it — see everything anyone on the team did, with the same CSV export as billing.
- Workspace settings live in the sidebar, not in a row of tabs. Opening a workspace lists General, Notes, Members, Roles, Invites, Projects, Activity, Billing, Requests and Danger zone in the same nav as the rest of the dashboard. The workspace list uses the same search, filters and list/card toggle as Projects.
- A shared notes board for quick team context — sticky notes in seven colors, visible to everyone in the workspace, now on their own Notes tab instead of mixed into General.
- Invite links stay copyable after you create them. A link invite used to show the URL once and then only a revoke button; the copy action stays on that row for the rest of the session, and creating a link copies it for you.
- The Projects tab is the same list as the dashboard overview — search, filters, cards, and opening a project — not a stripped-down name list.
- Hitting the role cap opens the upgrade dialog for the next plan that actually has more roles, instead of a plan-error toast on the create-role sheet.
- Sensitive actions can be requested instead of refused. A member without permission to delete a project or manage a snapshot can now ask for it; anyone who does have that permission approves or rejects the request from a new Requests tab, and approving runs the action for real.
- A weekly digest e-mail summarizes what happened across a workspace’s projects over the past week.
- You can leave a workspace, and an owner can transfer it to another member — both from the workspace’s settings.
- Saving a note on a frozen workspace opens the Enterprise upgrade. You can still fill in the editor; Create note closes it and shows which plan unlocks workspace notes, instead of a plan-error toast.
Networking
- Creating an application inside a workspace no longer locks Web publishing as a plan-only feature when the workspace owner’s plan already includes it. The wizard used to look up the plan on an application that does not exist yet, so Enterprise (and Pro+) looked like Free on that step.
- Web publishing can be turned on and off after creation. An application created without a subdomain used to stay private forever — the only way out was to recreate it. From the application’s Network settings you can now publish it, and unpublish it again, whenever you want. Publishing without a plan that lets you choose the name gets you a subdomain assigned by the platform; with one, you pick it.
- Unpublishing names the address in bold, and you type
EXCLUIR(orDELETE/ELIMINAR) instead of the project name to confirm. Choosing a custom subdomain on vertraweb.app is called out as the Scale feature in Network settings — the lock notice used to read as if the whole address card were gated. - Two things to know before you do it. Turning publishing on or off recreates the container, so the application restarts — expect a short downtime. And unpublishing releases the subdomain: it is not held for you, so someone else can register it. Any custom domain attached to the application is detached at the same time.
- Publishing needs 512 MB of RAM, the same floor a site created as a site has. If the application has less, the request says so and shows how much it has and how much it needs, so you can raise it and try again.
- Purging the edge cache works again. The button in Network settings never actually reached the CDN — the request was rejected before it got there, and the CLI’s version reported success while purging a hostname that does not exist. Purging now clears the application’s real hosts, and you can still name specific hostnames or URLs if you want a narrower purge.
- Replacing a custom domain now detaches the old one. Attaching a second domain used to leave the previous one behind, still pointing at the platform with nothing owning it. The replacement is only detached after the new domain is in place, so a failure never leaves the application without a domain.
Site and sharing
- Pages in Portuguese and Spanish now say so. Every page on the site declared itself as English to browsers and search engines, whatever language you were reading — a
/pt-brpage was served markeden-us. Translators, screen readers and search engines were all being told the wrong language. - Each page has its own address and preview again. Pricing, Enterprise, Databases, Blob Storage, CLI and VS Code were all pointing search engines at the home page as their canonical address, so they competed with it instead of ranking on their own.
- Links to the site show a preview card. Pages like About, Terms and Privacy shared with no preview image at all. The pages that do have their own image — Pricing and Enterprise among them — were generating it with the untranslated text key printed inside instead of the real title.
- Intermediary is a full plan band on Pricing, sitting above Enterprise — the same wide layout as dedicated infra, not a one-line footnote pointing at Compare.
- Pricing uses the same Enterprise offer card as the Enterprise page — capacity copy, column artwork, slider and checkout, instead of a separate compact band.
- Each plan card has a More + control that opens the full feature list — including what that plan does not include.
- The Go hosting page now tells the language’s origin. After the fold: why Go is a single binary, three design principles, and a portrait of the gopher — then the same version table and config as before.
- The header starts with Pricing, then Product, Enterprise, Developers and Resources. Community left the top bar: Discord, docs, the API reference and support tickets live under Developers, as larger cards with an icon and a short description. Product and CLI/VS Code use the same card size.
- Moving between Product, Developers and Resources keeps the menu open. Hovering from one header item to the next used to close the panel instead of swapping it, so the second menu never appeared.
- The plan comparison table on Pricing is readable on a phone. Below a laptop-width screen each feature is a list of plans and values, instead of six columns squeezed into the viewport. From
lgup the side-by-side matrix is unchanged.
File Manager
- Hardened path validation in the file manager when creating folders and resolving paths.
Deploys
- Dependencies now install outside your plan’s memory. Installing and compiling used to run inside your application’s container, under a memory ceiling sized to run your app, not to build it —
npmalone idles at 60–100 MB. Installation now happens in a short-lived container with platform memory, and your application only starts once it succeeds. When it fails, it fails once with a reason instead of looping. - The console shows the installation as it happens. While dependencies install, the application container does not exist yet — the console used to sit empty and the project looked stopped. It now streams the install output live, so a
pipcompiling a package from source is something you can watch instead of guess at. - An installation can be interrupted. While dependencies install, the only action offered is Stop — it cancels the installation instead of leaving a “Start” button for something that is already running.
- Saving
requirements.txtorpackage.jsonno longer freezes the reinstall dialog. It confirms and closes; the folder is cleared and the restart reinstalls in the background, with the console showing it happening. The folder cleared is now the right one for the language — the post-save path knew only Python and Node, so asking to reinstall on a Go, PHP, Ruby or Rust project deleted nothing. Editinggo.mod,composer.json,GemfileorCargo.tomlnow offers the reinstall too, and apackage.jsonsitting in a Python project no longer offers it by mistake. - Restarting an app now keeps its log. Saved records only ever contained crashes: stopping or deleting an application saved its log, restarting discarded it — and restarting is the common gesture. What the app said before a normal restart is now kept like any other run.
- The installation stays in the log after it ends. The install container is discarded when it finishes, and its output used to go with it — now it is appended to the application’s own log and replayed with the history, so reloading the page or reopening the console still shows what the installation did, and why it failed when it did.
- A project installing dependencies no longer reads as “stopped”. The dashboard and the project header show installing dependencies while it runs, in the list and inside the project.
Lifecycle and API
- A stopped project no longer reads as broken. A stopped application or database has no container — that is how stopping works — and asking for its status used to answer with a server error. The dashboard treated it as a failed request and kept showing the last good reading, so a project you had just stopped stayed on screen as running, with its uptime frozen, until you reloaded the page. Status now answers normally for a stopped resource, with everything at zero.
- Stopping something already stopped is no longer an error. It confirms, and the recorded state is corrected to stopped. Before, an application whose container had died on its own stayed marked as running forever: the Stop button failed every single time, and there was no way to get the project back to a consistent state.
- Two operations at once on the same project now say so. Start, restart, stop, delete, dependency installs, deploys and snapshot restores are done one at a time per project. Asking for a second one while the first is still running answers another operation is in progress and changes nothing — instead of a generic failure that looked like your app had broken. Wait a few seconds and try again. Over the API this is HTTP
409 OPERATION_IN_PROGRESS. - Clicking Start twice on a stopped application — two open tabs, a double click — no longer restarts it twice silently. If the application is already running or already starting, Start now answers this project is already running or starting up instead of quietly repeating the whole boot. Over the API this is HTTP
409 CONTAINER_ALREADY_RUNNING. Clicking Restart twice in a row is covered too: the second click now answers another operation is in progress instead of silently restarting the application a second time. - Lowering an application’s memory is refused when the files no longer fit. Disk space follows the memory you allocate, so lowering the memory lowers the ceiling. Applying a ceiling below what the volume already holds does not delete anything, but it makes every subsequent write fail — the app breaks instantly, for a reason nothing on the panel explains. The change is now refused up front, telling you how much you have to free first.
- The lifecycle buttons share one budget per application. Start, restart, stop and install dependencies now allow ten requests per minute per application between them, instead of a separate allowance each. Normal use never comes close; a script in a loop stops before it hurts the project.
Databases
- Databases have a Data tab, from the Intermediary plan up. Browse and edit what is actually stored, without leaving the dashboard and without pasting a connection string anywhere. PostgreSQL and MySQL show schemas, tables, columns, indexes and a paginated row browser; MongoDB shows collections, indexes and documents; Redis shows the keyspace, each key’s value by type, and its TTL. The plan that counts is the database owner’s — workspace members use the tab on a database whose owner has the plan.
- There is a SQL console. It runs against your own database as your own database user, so nothing is filtered or rewritten. What is enforced are limits: 10 seconds per statement (applied by the engine itself), 200 rows by default and 1000 at most, 64 KB of SQL, 5 MB of result, and one console query at a time per database.
- Editing a row always goes through its primary key — the complete one, composite keys included — never its position on the page. The same applies to documents (
_id) and keys (the key named in the URL). - Reading is open to every workspace member; writing and the SQL console are not. Those need owner or admin, and every change is recorded in the database’s activity log with the operation and the object — never the content.
- The API exposes the same surface under
/v1/databases/{id}/data/*, with stable error codes documented alongside it. - A database in a workspace now shows its allocated RAM. Opening one from a team used to crash the overview and leave the memory field blank, even when the database had RAM assigned — the workspace list was missing those fields. The RAM breakdown on Projects includes it too.
- Deleting or resetting a database now takes a safety snapshot first, automatically. If the backup fails, the action is blocked and the database is neither destroyed nor wiped — before, deleting or resetting left no backup behind.
Checkout
- Changing plan at checkout is a catalog, not a dropdown. The selected plan still sits in the form; opening it now shows Economy, Pro, Scale and Intermediary as cards (RAM, vCPU, app limit) and Enterprise as a list — the same catalog as the pricing page, without leaving payment.