August 2026
Changed
Section titled “Changed”-
PlaidCloud has a Light, Dark, and Auto appearance. The Appearance button in the top toolbar, beside the account menu, switches the whole interface — the Launcher, every app, and every window and dialog inside them — between a light and a dark look. Auto (System), the default, follows your computer’s own appearance setting and switches with it live, so a machine set to go dark in the evening takes PlaidCloud with it without a reload; Light and Dark pin the choice regardless of the system. The interface has also moved onto the Fluent design used across PlaidCloud, so buttons, inputs, tables, tabs, menus, and dialogs share one consistent look. Your choice is remembered per browser rather than per account, so set it once in each browser you use. See Appearance (Light, Dark, Auto).
-
AI agents connected over MCP get leaner results, and are told when a list was cut short. Listing and lookup tools now return the first 25 matches per page rather than 50, and an agent can name the columns it wants with
fields=[...]instead of taking the whole record — so a routine “list the tables in this project” costs a fraction of the agent’s limited reading capacity, leaving more room for your actual question. A page that was capped now says so explicitly, so an agent asks for the next page instead of quietly treating the first 25 as the complete answer, and asking for a column that doesn’t exist returns a clear error naming the columns that do, rather than silently leaving it out. Nothing is out of reach: raiselimit, or page with the cursor. See Getting Started with AI Coding Agents. -
A large result now sends each field name once instead of once per row. Where every row of a result carries the same fields, it comes back column-oriented — the field names in one list, the values in another — which is around 30% fewer characters on typical listing traffic and leaves correspondingly more of an agent’s reading capacity for your question. Connected agents are told about the shape and read it without any prompting from you, and no value is changed on the way. Small results, and results whose rows differ, are unchanged. If you read these responses from your own code rather than through an agent, handle both shapes. See Column-Oriented Results.
-
The AI assistant carries a leaner tool catalog. The list of available tools the assistant loads on every turn is about a third smaller, with no loss of capability, so more of its capacity goes to your question. A batch of tool descriptions that told it the wrong thing — naming a tool that doesn’t exist, describing an optional field as required, quoting an error the platform never returns — has also been corrected, so it wastes fewer turns on requests that were never going to work.
-
Cost-tracing can search combinations of dimensions. Where your workspace has explanatory-cut discovery switched on, asking what drove a change in an allocated cost now also tests combinations — a move confined to one region and one product line, say — rather than one dimension at a time. Previously the combination search never ran at all unless it was requested explicitly, which nothing did. The answer stays conservative: where nothing explains the move on its own, it says so rather than picking something. Both searches remain off by default. See Tracing Allocations with an MCP-Connected AI Agent.
-
The step palette in the Visual Workflow Designer is now organized into folders. Every step type used to sit in one long list you scrolled through. Steps are now filed in ten folders that start closed, so you see a short, scannable list instead of the whole catalog — and your favorites stay pinned above the folders, where they were. Filter… still searches everything at once, open or closed, and returns a plain list of matches.
Clicking a step now adds it. It appears near the top left of the canvas, already selected, ready for you to drag where you want it — and if you picked the wrong one, Delete removes it without hunting for it first. Dragging a step from the palette still drops it exactly where you let go.
Step names are long, so you can widen the palette by dragging the divider beside it, and it remembers the width for next time. See Advanced Workflows.
-
Dashboards now hold their cached results for an hour instead of five minutes. Because republishing a table now clears its charts’ cached results immediately, the cache no longer has to expire quickly to keep a dashboard current — so the default lifetime has been raised, and you can set it higher still to match how often the data actually changes. Set it in seconds on a database, under Advanced → Performance → Chart cache timeout, or on a single dataset under Settings → Cache timeout. On a table that reloads overnight, an hour or a day means a morning’s dashboard views are served from cache instead of re-querying the warehouse each time — which is where most of a slow dashboard’s time goes.
You do not need to change anything to get this — the new default applies everywhere. One case is worth checking: if a table is written to by something outside PlaidCloud, nothing tells its dashboards to drop their cache, so the lifetime is all that refreshes them. Those can now be up to an hour behind rather than five minutes, so set a shorter lifetime on those datasets. See Dashboard Caching.
-
Workflow runs are lighter on the platform. A running workflow now asks PlaidCloud for far less of the same information while it works, which frees up capacity in busy workspaces where many workflows run at once.
-
Dark mode is readable in the places it wasn’t. Several panels kept a fixed light-mode palette after the surface behind them turned dark, leaving near-black text on a dark card. The Workflow Inspector’s step cards — table, file, and dimension — now take their titles, statistics, and dividers from the active appearance, as do the inspector’s own header and the step palette. The focused row of a searchable grid (Projects, Workflows, and the other row-highlight tables) no longer paints a light-blue band behind near-white text, and the read-only banner shown on a connection you don’t own uses a lighter teal so its message reads against the banner. See Appearance (Light, Dark, Auto).
-
Adding an output column to a Table Lookup or Join step saves again. A column you added by hand started with no data type, and saving the step failed with Update Failed – Internal Server Error — removing the column again was the only way to save. New rows now start as Text, and you can change the type as usual. The same fix covers the Inner, Outer, Anti and Cross Join steps. If you have a step saved with a column that has no type, open it, set the column’s Type, and save. See Table Lookup.
-
Exporting a project no longer hides a table whose data could not be read, and a failed export says so. If a table listed in the project has no data behind it, the archive is still written — that table’s data is left out and the export finishes with a message naming the tables it skipped. The archive records them, and restoring it names them again rather than presenting them as complete. Separately, an export that genuinely failed used to report as finished with no file behind it, so the problem surfaced later, usually when someone came to restore the archive; a failure is now reported as a failure. This covers every export type, not only project archives. The export window also names the project it is archiving. See Archive a Project.
-
The AI assistant always draws a diagram as a picture, and won’t invent the numbers in it. A requested diagram occasionally arrived as a block of diagram source code instead of an image; it now renders whichever notation the assistant picks. And a chart or Sankey needs a figure for every bar or band — where the assistant hasn’t been given one, it now asks you for it rather than drawing a plausible-looking value, so a picture that reads as authoritative is not quietly made up. See Using the AI Assistant.
-
The AI assistant can send email and SMS again. Asking it to send a message either failed outright or reported success while sending nothing, so there was no way to make it work. Sending now works, and leaving the recipient out is reported as an error instead of quietly doing nothing. See Using Email.
-
Naming a period column the table doesn’t have now fails clearly. Asking cost-tracing to compare periods using a column that isn’t on the table now says so immediately, naming the column and listing the ones the table does have, so you can correct it in one step. Previously the analysis went ahead and came back reporting only that it couldn’t total the figures — which read as a passing glitch worth retrying, when retrying could never help. Driver what-ifs are checked the same way. For a trace or a driver what-if you can still leave the period column unset and have it detected for you. See Tracing Allocations with an MCP-Connected AI Agent.
-
An AI agent watching a list for changes no longer misses an edit. Agents can ask “has this changed since I last looked?” and get a cheap “not modified” when nothing has. That check was comparing only the identifiers in the list, so renaming or editing a record — without adding or removing one — still came back as “not modified”, and an agent could go on working from a stale copy. It now compares the records themselves. A related fix keeps that answer consistent no matter which server handled the request.
-
Searching warehouses by name returns the matching warehouses. A name search answered with a bare identifier instead of the matching records, so an agent got neither the details nor a count, and an empty result was indistinguishable from an error. It now returns records like every other search, and matches on any part of the name regardless of case.
-
Republishing a table now clears the cached results of the dashboards reading it. A dashboard caches each chart’s results so repeat views don’t re-query the warehouse. Those cached results were meant to be discarded the moment a workflow run republished the underlying table — but the discard never took effect, so a chart could keep serving pre-refresh numbers until its cached result expired on its own. Republishing now clears them straight away, and the next person to open the dashboard sees the new data without forcing a refresh. See Dashboard Caching.
-
A step whose run was interrupted now reports itself as abandoned, instead of appearing to run forever. When the work behind a step went away mid-run — because someone pressed Stop, or because platform maintenance interrupted it — nothing ever corrected the step’s status. The workflow view kept showing it as running with a duration climbing indefinitely, which reads as an extremely slow step: in the case that prompted this, a step that takes three seconds displayed as running for over twenty minutes.
Such a step is now marked abandoned, with an explanation in its status tooltip, and its duration stops. An open workflow view refreshes on its own, so it corrects itself without a manual reload. An abandoned step did not complete and produced no output — it is not a slow step and not a data problem. You can either Resume the run, which runs the abandoned step again, or re-run the whole workflow. See Follow a Step’s Status.
-
Resume picks a workflow back up where it stopped, including inside called workflows. A run that failed several levels deep — a workflow calling a workflow, or a loop step working through its iterations — restarted the first called workflow from its opening step instead of returning to the point of failure, repeating everything in between. Resume now returns to the step that failed, at whatever depth it sits, and a loop step resumes the interrupted iteration and skips the iterations that already completed. See Run a Workflow.
-
Resume no longer re-runs completed steps on parallel and Advanced workflows. On both, Resume restarted the whole workflow, so every step that had already succeeded ran a second time — including any sub-workflows they called. Both now re-run only the step or node that failed and whatever was still waiting on it. If you had been using Resume on a parallel workflow as a way to re-run everything, use Run All instead. See Run a Workflow.
-
Resuming a Run Selected run keeps its selection. Resuming a run that had been scoped to a chosen set of nodes on the Advanced canvas widened it to the whole workflow. The original selection is now preserved. See Advanced Workflows.
-
Saving a security form with nothing selected now tells you nothing changed. Assigning members to a group, or groups to a member, and saving with an empty list reported success while making no change — and on the member form it could instead remove every group that member had. An empty list now leaves the assignment alone and says so. See Managing Security Groups and Assignments.
Security
Section titled “Security”-
Pre-built queries sent to the platform are now rebuilt under a restriction instead of being trusted. Several Analyze operations — allocate, melt, pivot, update, delete, table exports and view definitions — accept a query that was assembled elsewhere and sent along with the request. The platform used to reconstruct whatever arrived, which meant a crafted request from anything able to reach those operations could have run code inside the server. Such a request now rebuilds only the database-query pieces a genuine query is made of, and anything else is refused with an invalid-argument error. Queries you build in the product are unaffected, and an export that supplies plain SQL rather than a pre-built query works exactly as before.
-
Editing a security group’s permissions no longer removes the permissions you don’t hold yourself. Anyone who was not a workspace administrator silently stripped every permission on that group they could not grant themselves — just by opening the permission matrix and saving it, even without changing anything. Workspace administrators were unaffected, which is why this looked like permissions disappearing at random for some people and never for others, and why a permission held by only a few, such as Panel app management, would drop off repeatedly and have to be re-added. Those permissions are now left untouched.
Review any security group that a non-administrator has edited and confirm its permissions are what you expect — a permission removed this way was removed for everyone in the group. See Managing Security Groups and Assignments.
-
A permission you do not hold can no longer be granted through the permission matrix. The form only ever offered the permissions you are allowed to control, but a request naming others was accepted anyway, so someone able to manage users could grant a group — and through it themselves — broader access than they held. Permissions being granted are now checked against your own.
-
Permission and membership changes are recorded in the security log. Changing a group’s permissions or members, or a member’s groups, previously left no record unless the Git server sync failed, so a permission that changed could not be attributed to anyone afterwards. Every change is now logged with what was granted and what was revoked. See Performing a Security Audit.