Releases: atatusoft-ltd/ppphp-src
Release list
2026.3.1-rc-2
++PHP 2026.3.1-rc-2
This release candidate improves diagnostics, editor feedback, and type checking for existing PHP and ++PHP projects.
This is a prerelease. It is suitable for evaluation and early project use, but language behavior and generated output may still change before the first Stable release.
Requirements
- PHP
^8.4for the compiler - Composer 2
- At least 512 MiB of memory available to compiler processes
Generated applications target PHP 8.4.
What Improved
-
Typed locals accept valid concatenations and broader declared types without false PHPDoc errors. Closure and arrow-function locals work with both
Closureandcallable, preserving their signatures for PHP tools. -
whenexpressions accept valid branch values in returns, arguments, arrays, and nested expressions without false PHPDoc errors or artificial nullable results. -
Fresh callback arrays remain usable as
array<callable>when returned throughwhen, including nested expressions andfinallyoverrides. -
Generated PHP no longer contains blank indentation-only lines where a
throwsclause was removed; source locations remain accurate. -
Missing-type messages use plain language. Initialization errors identify the affected template or release file, and commands explain when too many paths were supplied.
-
Errors give more specific explanations: a missing
<?phptag is reported directly, configuration failures keep their actionable details in editors, and analysis failures no longer automatically suggest changing cache permissions. -
Syntax errors describe missing punctuation and unexpected source tokens without version boilerplate or internal token names. Saved checks and live editor feedback use the same explanations, including inside
whenexpressions. -
Project checks respect Composer's PHP platform override and requirement constraint. Conflicting or unsupported targets are reported directly instead of checking against a silently substituted platform.
-
Editor integrations can check unsaved code, including changes in other open files, without saving or rebuilding your project. Full saved-file checks remain available for additional analysis.
-
Editor integrations can keep the compiler ready between edits for faster repeat diagnostics, with a single-request fallback for older clients.
-
Type errors now preserve the spelling and capitalization of fully qualified class and interface names, making diagnostics easier to compare with source code.
-
Nullable values narrowed by a preceding guard can now initialize non-null local variables without a false type error.
-
An assigned but unread private property now produces a warning instead of blocking a build.
-
Existing strict checks, source mapping, deterministic output, incremental caching, and mixed PHP/++PHP builds remain available from the first candidate.
Compatibility And Deployment
++PHP source uses the .ppphp extension and the normal PHP opening tag. Ordinary .php files keep PHP behavior and are copied byte-for-byte into selected build output. .ppphp files receive the stricter language contract and compile to .php.
Compiler classes are not a public plugin API for this release.
A complete ppphp build validates the project before atomically replacing the configured output, which defaults to build/ppphp. Generated files require no ++PHP runtime library unless the source itself imports an ordinary package. Keep hand-written files outside the configured output and deploy the generated tree with the root Composer metadata and installed dependencies.
Known Limitations
- Generated source targets PHP 8.4.
- Native
ppphp checkandppphp buildinclude supplemental PHPStan analysis. - Deep analysis of ordinary PHP implementation bodies is supplied by PHPStan.
- Generator-specific compiler-owned flow analysis remains limited.
- Browser compiler analysis is an internal integration protocol rather than a supported browser build product.
- No formatter is included.
- No standalone language server is included in this repository.
- Immutable Records, postfix list syntax, Native Type Members, and attribute factory expressions are future work and are not part of this release.
Upgrade Notes
The Composer package is now atatusoft/ppphp. The ppphp command, Atatusoft\Ppphp namespace, and GitHub repository are unchanged. The first candidate remains available under its original package name.
If your project requires atatusoft-ltd/ppphp-src, remove that requirement without updating dependencies first:
composer remove --dev --no-update atatusoft-ltd/ppphp-srcThen install this candidate using the exact command in Install This Release below. Use composer remove --no-update without --dev if the old package was in require rather than require-dev. Existing lock files do not migrate automatically. After installation, rebuild cleanly:
vendor/bin/ppphp clean
vendor/bin/ppphp buildFeedback And Security
Please report reproducible bugs through GitHub Issues and include the output of vendor/bin/ppphp --version.
Report vulnerabilities privately according to the security policy. Do not include credentials or other secrets in reports.
2026.3.1-rc-1
++PHP 2026.3.1-rc-1
This is the first release candidate for ++PHP: a language that adds compile-time safety and modern type features to PHP, then produces ordinary PHP 8.4 for deployment.
Use this release to try ++PHP in an existing Composer project, adopt it one file at a time, and tell us what needs improving before the first Stable release.
What this release gives you
- Catch mistakes before runtime.
ppphp checkvalidates local variables, arguments, returns, properties, method calls, nullable values, generics, typed collections, and checked errors across your project. - Adopt it incrementally. Existing
.phpfiles continue to work alongside.ppphpfiles, so you can introduce ++PHP without rewriting your application. - Express richer contracts. Use mutable or readonly typed locals, generics, typed lists and maps, union and intersection types, checked errors, and expression-oriented
whenbranches. - Keep the PHP deployment model.
ppphp buildturns.ppphpinto ordinary PHP 8.4 and copies project-owned.phpfiles into one deployable output tree. - Work with Composer packages. Types from installed dependencies participate in checks without executing dependency code during analysis.
- Get dependable repeat builds. Incremental caching speeds up unchanged work, while atomic builds keep the previous output intact if checking or generation fails.
- Trace problems back to source. Stable diagnostic codes, source locations, JSON output, and generated source maps support both terminal and editor workflows.
Install the release candidate
Release candidates require an explicit Composer version:
composer require --dev atatusoft-ltd/ppphp-src:2026.3.1-rc-1Start using ++PHP
From your project root:
vendor/bin/ppphp init
vendor/bin/ppphp composer:configure --dry-run
vendor/bin/ppphp composer:configure
vendor/bin/ppphp check
vendor/bin/ppphp buildRun your application from the generated build/ppphp tree. Do not execute .ppphp source files directly.
For a guided example, see Getting Started. If you are introducing ++PHP into an existing application, see Migrating From PHP.
Requirements
- PHP 8.4 or newer within the supported
^8.4range. - Composer 2.
- At least 512 MiB of memory available to compiler processes.
Generated code targets PHP 8.4.
Release-candidate notes
- This is a prerelease. Language behavior and generated output may change before Stable.
- A complete build owns the configured output directory, which defaults to
build/ppphp. Keep hand-written files outside that directory. - If you previously used a development build, install this exact version and perform a clean rebuild with
vendor/bin/ppphp cleanfollowed byvendor/bin/ppphp build.
Feedback and security
Please report reproducible bugs through GitHub Issues and include the output of vendor/bin/ppphp --version.
Report security vulnerabilities privately according to the security policy.
Release assets
The GitHub release includes the configuration schema, release metadata, these notes, third-party notices, and SHA256SUMS. Use SHA256SUMS to verify downloaded assets before use.