When a deployment fails, Ploi Cloud now works out why by itself. About 15 seconds after the failure, a card on the deployment page names the most likely root cause and lists the steps to fix it, with links to the matching documentation.
Before: A failed deployment left you with the build and runtime logs, and finding the cause was up to you. After: The deployment page tells you what went wrong and what to change.
The role you give a team member now decides what they can do, in the dashboard and through the API. Owners can also change a member's role straight from the members list.
Before: A role was only a label, and every member could create, change and delete resources. After: Members can only view, editors can create, deploy and change resources without deleting them, and admins can also delete resources and manage billing and team settings. Only the owner manages members and deletes the team.
Team owners can switch on Require two-factor authentication in the team settings. Members without two-factor keep their membership, but the dashboard sends them to their security settings until they turn it on, and the API refuses their requests for that team.
The API can now list, create and delete managed databases and show the plans you can pick from. You can also read the password, change database properties, IP filtering and the maintenance window, and add, reset and remove database users. AI assistants connected to Ploi Cloud can do the same, except delete a database.
The Maintenance card on a managed database's overview is now a form. Pick a day and a time in UTC and save it.
Before: The dashboard showed the maintenance window but couldn't change it. After: Move maintenance to a quiet moment for your application yourself.
Nightwatch and Inertia SSR run inside your application on small fixed resources, so they no longer add to your bill or your cost overview. The cost overview used to price Nightwatch at about €13.88 a month. The edit dialog also stopped offering a memory size for them, because that setting never reached the service.
New Valkey services on Laravel and Statamic applications turn on Expose env variables as Redis by default. Your application gets REDIS_URL, REDIS_HOST, REDIS_PORT and REDIS_PASSWORD and connects without any remapping. Applications that already have a Redis service keep VALKEY_*, and existing Valkey services keep their current setting. You can set the option through the API and in YAML as well.
An environment secret can now reference the variables your services inject, such as ${VALKEY_PASSWORD} or ${DB_HOST}. Set CACHE_URL to redis://:${VALKEY_PASSWORD}@${VALKEY_HOST}:${VALKEY_PORT} and your application receives the real values. When a secret has the same name as an injected variable, your secret wins.
When a domain on your application has gone about a week without a valid SSL certificate, the team owner gets an email with the steps to fix it, and a second one after two weeks. We renew certificates automatically as long as the domain points to us, so the email tells you which DNS target to use, or to remove the domain if it now lives elsewhere. It only goes out for certificates that expired, not for domains still waiting on their first one.
The logs dialog of a service now shows why it last restarted and when, for example out of memory 5 minutes ago, or the exit code it stopped with.
You can now monitor a subdomain under a wildcard domain. Monitoring only accepts domains attached to the application, and when you remove the monitored domain, the monitor moves to the application's main address. The Monitoring tab also warns you when the monitored domain is no longer attached.
Running a command or transferring a file through the API no longer needs an instance name. Leave it out and the request goes to the first running web instance. Listing instances now also returns each instance's containers and when it started.
We rebuilt every email we send to match the dashboard, with the same colours and typefaces and our company details in the footer.
Mail clients such as Gmail and Apple Mail now show an unsubscribe button on our newsletter. The unsubscribe link asks you to confirm first, so a link scanner that opens it can't unsubscribe you by accident.
The data processing agreement under Billing is now version 2.1. It lists where each kind of data lives for every region, adds Lettermint, Anthropic and Oh Dear as sub-processors, and brings the list of security measures up to date. Oh Dear is only involved when you turn on uptime monitoring, and Anthropic only handles support conversations.
MinIO services now run a fixed, maintained build of MinIO instead of whichever image was newest when the service started, so a restart can't change the version under you.
An application's tags now show at the bottom of its settings sidebar.
The API authentication guide explains why requests need a User-Agent header and what the 403 with error code 1010 means. The Redis guide covers using Valkey as Redis, the secrets guide shows how to reference service variables, and the infrastructure as code guide explains how secrets and domains are kept or removed.
Applying infrastructure as code YAML that had no secrets or domains section removed all your custom secrets and domains. Leaving a section out now keeps what you have. An empty list still removes everything in it, and auto-generated secrets such as APP_KEY always stay.
The API listed placeholder values such as user and password for the variables your services inject, and some names didn't match what your application receives. It now shows the real names and values, including DB_* for databases and the Valkey password. The service endpoint masks passwords, also inside connection URLs.
Some applications linked to a Git account had no Git provider stored, so quick deploy couldn't be switched on for them. The provider now follows the linked Git account, and we filled it in for existing applications. Changing an application's repository through the API also picks a matching Git account when you don't send one.
Entering a VAT number that Stripe doesn't accept showed an error page. You now get a message under the field, and your billing details stay as they were, including your previous VAT number.
If you started setting up two-factor authentication and left before entering a code, you couldn't turn it on afterwards. Setup works again from the start.
Creating or deleting a bucket could leave object storage stuck on a setup status. We now check its status again after every bucket change.
The API and AI assistants reported a status for Nightwatch and Inertia SSR, which run inside your application and have no status of their own. The status is now empty for them, and a new hide_status field tells you why.