Versions and compatibility
Find which language and framework versions a site's code needs, and whether its server fits.
pfcloud reads a site's code for the language versions it needs (PHP, Node.js, Python, Go, Ruby, Rust, Java, .NET, Elixir) and the framework versions it uses, and compares them with what the server has. An AI tool can use the same answer to fix problems before a deploy fails.
When to use this
- Before the first deploy of a site: does the server fit the code?
- After a deploy fails with a version error ("requires php ^8.4", "engine node >=22").
- Before moving a site to another server.
- To pick the PHP version for a new site.
Step 1: read what the server has
curl -s $MYFORGE/servers/SERVER_ID/runtimes -H "Authorization: Bearer $TOKEN"
The answer lists php.installed, php.installable (versions pfcloud can add), php.offered_by_package_source, and tools (node, npm, python, composer, go, ruby, rust, java, dotnet, elixir). checked_at says when it was read: daily, after installs, and when you ask:
curl -s -X POST $MYFORGE/servers/SERVER_ID/runtimes/check \
-H "Authorization: Bearer $TOKEN" -H "Idempotency-Key: check-web1-1"
This is read-only. Wait a minute, then read again.
Step 2: ask whether a site fits
curl -s $MYFORGE/sites/SITE_ID/compatibility -H "Authorization: Bearer $TOKEN"
| Field | Meaning |
|---|---|
status |
ok, warning (probably works), problem (a deploy would fail) or unknown (not read yet) |
items[] |
One per language the code pins: runtime, needs (for example ^8.4), server_has, state, message, details, fix |
fix.action |
switch_php (a version already installed fits; fix.version), install_php (install fix.version first), install_node (managed servers), install_language, or manual |
suggested_php |
The PHP version to use, when the code pins one |
frameworks[] |
Framework names and versions found (Laravel 13.1.2, Next.js 16.0.0…) |
requirements_read_at |
When the code was last read (after each deploy) |
The code is read after each deploy, so a site that has never deployed has no answer yet. For a repository on GitHub you can see the same detection before creating the site: pick it in the New site form.
Step 3: apply the fix
switch_php:PATCH /sites/SITE_IDwith{"php_version":"8.4"}(the site settings; see the Sites reference).install_php:POST /servers/SERVER_ID/php/versionswith{"version":"8.6"}(Servers reference), then switch the site once it is installed.manual: needs a person.
How it decides
- PHP:
composer.json,composer.lock(every locked package's own requirement) and.php-version. Missing PHP extensions are reported when the server's modules are known. - Node.js:
package.jsonengines,package-lock.json,.nvmrc,.node-version. A package preferring a newer Node.js is awarning; the project's own pin is aproblem. - Other languages:
pyproject.toml,runtime.txt,go.mod,Gemfile,Cargo.toml,pom.xml,build.gradle,global.json,mix.exs,.tool-versions. - Docker sites are not checked: the image brings its own runtime.
An AI assistant should read
statusandfixfirst, ask before installing anything on a server, and never install over an adopted server's runtimes: pfcloud answersmanualthere on purpose.