Fast PHP language server with deep type intelligence. Generics, Laravel, PHPStan annotations. Ready in an instant.
See the codeA fast, lightweight PHP language server written in Rust. Ready in seconds, keeps memory use modest even on large codebases, and stays responsive throughout. Indexing happens in the background, so you're never left waiting on it.
Check out the documentation to get started.
[!NOTE] PHPantom is in active development. The core editing features are solid and used daily on production codebases.
PHPantom focuses on deep type intelligence. Here's how it compares:
| PHPantom | Intelephense | PHP Tools | Phpactor | PHPStorm | |
|---|---|---|---|---|---|
| Core LSP features1 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Advanced navigation2 | ✅ | 🚧🔒 | 🚧 | 🚧 | ✅ |
| Editor extras3 | ✅ | 🚧🔒 | 🚧 | 🚧 | ✅ |
| Diagnostics | |||||
| Built-in diagnostics4 | ✅ | 🚧🔒 | ✅ | 🚧 | ✅ |
| External analyzer integration5 | ✅ | ❌ | ❌ | 🚧 | 🚧 |
| Type Intelligence | |||||
Generics / @template | ✅ | 🚧 | ✅ | 🚧 | ✅ |
| Array / object shapes | ✅ | ✅ | ✅ | 🚧 | 🚧 |
| Advanced PHPDoc types6 | ✅ | 🚧🔒 | 🚧 | 🚧 | 🚧 |
| Closure parameter inference | ✅ | 🚧 | 🚧 | 🚧 | 🚧 |
| Frameworks | |||||
| Laravel & Blade | ✅ | ❌ | 🚧 | ❌ | 🚧🧩 |
| Symfony & Twig | ❌ | ❌ | ❌ | 🚧 | 🧩 |
| Drupal | 🚧 | ❌ | ❌ | ❌ | ✅🧩 |
| Other frameworks | 🚧 | 🚧 | 🚧 | 🚧 | 🧩 |
| Refactoring | |||||
| Rename | ✅ | ✅🔒 | ✅🔒 | ✅ | ✅ |
| Extract & generate8 | ✅ | ❌ | 🚧🔒 | 🚧 | ✅ |
| Simplify & modernize9 | ✅ | ❌ | ✅🔒 | ❌ | ✅ |
| Performance | |||||
| Time to ready (from cache) | 2 s | 11 s (1 s) | 10 s | 3 min 17 s (4 s) | 1 min 7 s (5 s) |
| RAM | 578 MB | 766 MB | 594 MB | 467 MB | 2 GB |
| CPU time | 17 s | 16 s | 36 s | 3 min 18 s | 17 min 55 s |
| Disk cache | - | 51 MB | - | 2.3 GB | 379 MB |
🚧 = partial support. ❌ = not available. 🧩 = via plugin. 🔒 = paid tier.
1 Completion, hover, signature help, go-to-definition, find references, diagnostics, document symbols, workspace symbols.
2 Call hierarchy, type hierarchy, go-to implementation / type-definition, code lens.
3 Semantic tokens, inlay hints, auto-import, smart select, folding ranges, formatting, document links.
4 Undefined and unused variables, type errors, unknown symbols and members, argument counts.
5 PHPantom runs PHPStan, PHPCS, PHPMD, and Mago in-server and turns their reports into quick fixes. Phpactor proxies PHPStan, Psalm, and PHP-CS-Fixer, and PHPStorm bundles PHPStan and Psalm runners, but both only relay the errors.
6 Conditional return types, type aliases (`@phpstan-type` / `@phpstan-import-type`), pseudo-types, `@mixin`.
8 Extract method/function, extract/inline variable, extract constant, extract interface, promote constructor parameter, generate constructor, generate getters/setters, implement interface methods.
9 Null-check simplification, string interpolation conversion, converting between arrow functions and closures, and switch statements to match expressions.
Performance measured on a production Laravel codebase: 5.1K PHP files (389k lines) and 1.3K Blade templates (88k lines), with 27k vendor files (1.7M lines). Time to ready is the approximate wall-clock time from launch until full type intelligence is available on a cold start (first index). RAM is the steady resident memory once indexing has finished.
Independent, re-runnable type-inference conformance results across twelve PHP engines: php-typing-conformance (Qodana covers the PHPStorm engine, phpy the PHP Tools engine).
[!TIP] Want to verify? Open
examples/php/in your editor and trigger completion at the marked locations incompletion.php. It exercises every type intelligence feature in the table, including edge cases where tools diverge. For Laravel specifically, openexamples/laravel/— a standalone project with real Eloquent models, config, routes, views, and translations that exercises Eloquent property resolution, query builder chaining, scopes, custom collections, and go-to-definition for config keys, route names, and translation strings.
@throws detects uncaught exceptions in the method body, @param pre-fills from the signature, and tags are filtered to context and never suggested twice.array_map preserve element types.$users->map(fn($u) => $u->name) infers $u as User from the collection's generic context.@return types resolve to the concrete branch at each call site.@phpstan-type, @phpstan-import-type, and object{...} shapes all resolve through to completions.app('cache') resolve to the bound class, auth()->user() resolves to your configured model, authorization strings resolve to the gate definition or policy method that declares them, and query string completion on both relation and column names. Blade templates get completion, hover, go-to-definition, and diagnostics through virtual PHP preprocessing. No ide-helper or database access required.@deprecated detection, and namespace segment drilling.PHPantom understands Composer projects out of the box, but works without setup on non-Composer projects too:
autoload_classmap.php and autoload_files.php.composer.json, resolves the web root, and indexes Drupal-specific directories and PHP extensions (.module, .install, .theme, etc.) with .gitignore bypassed so that Composer-managed core and contrib code is always available.require_once discovery. Functions from required files are available for completion.PHPantom stands on the shoulders of:
@phpstan-* annotations.MIT. See LICENSE.
(top 24 of 41)
5,267 followers · starred Aug 2026
411 followers · starred May 2026
269 followers · starred Mar 2026
247 followers · starred May 2026
Fast PHP language server with deep type intelligence. Generics, Laravel, PHPStan annotations. Ready in an instant.
See the codeA fast, lightweight PHP language server written in Rust. Ready in seconds, keeps memory use modest even on large codebases, and stays responsive throughout. Indexing happens in the background, so you're never left waiting on it.
Check out the documentation to get started.
[!NOTE] PHPantom is in active development. The core editing features are solid and used daily on production codebases.
PHPantom focuses on deep type intelligence. Here's how it compares:
| PHPantom | Intelephense | PHP Tools | Phpactor | PHPStorm | |
|---|---|---|---|---|---|
| Core LSP features1 | ✅ | ✅ | ✅ | ✅ | ✅ |
| Advanced navigation2 | ✅ | 🚧🔒 | 🚧 | 🚧 | ✅ |
| Editor extras3 | ✅ | 🚧🔒 | 🚧 | 🚧 | ✅ |
| Diagnostics | |||||
| Built-in diagnostics4 | ✅ | 🚧🔒 | ✅ | 🚧 | ✅ |
| External analyzer integration5 | ✅ | ❌ | ❌ | 🚧 | 🚧 |
| Type Intelligence | |||||
Generics / @template | ✅ | 🚧 | ✅ | 🚧 | ✅ |
| Array / object shapes | ✅ | ✅ | ✅ | 🚧 | 🚧 |
| Advanced PHPDoc types6 | ✅ | 🚧🔒 | 🚧 | 🚧 | 🚧 |
| Closure parameter inference | ✅ | 🚧 | 🚧 | 🚧 | 🚧 |
| Frameworks | |||||
| Laravel & Blade | ✅ | ❌ | 🚧 | ❌ | 🚧🧩 |
| Symfony & Twig | ❌ | ❌ | ❌ | 🚧 | 🧩 |
| Drupal | 🚧 | ❌ | ❌ | ❌ | ✅🧩 |
| Other frameworks | 🚧 | 🚧 | 🚧 | 🚧 | 🧩 |
| Refactoring | |||||
| Rename | ✅ | ✅🔒 | ✅🔒 | ✅ | ✅ |
| Extract & generate8 | ✅ | ❌ | 🚧🔒 | 🚧 | ✅ |
| Simplify & modernize9 | ✅ | ❌ | ✅🔒 | ❌ | ✅ |
| Performance | |||||
| Time to ready (from cache) | 2 s | 11 s (1 s) | 10 s | 3 min 17 s (4 s) | 1 min 7 s (5 s) |
| RAM | 578 MB | 766 MB | 594 MB | 467 MB | 2 GB |
| CPU time | 17 s | 16 s | 36 s | 3 min 18 s | 17 min 55 s |
| Disk cache | - | 51 MB | - | 2.3 GB | 379 MB |
🚧 = partial support. ❌ = not available. 🧩 = via plugin. 🔒 = paid tier.
1 Completion, hover, signature help, go-to-definition, find references, diagnostics, document symbols, workspace symbols.
2 Call hierarchy, type hierarchy, go-to implementation / type-definition, code lens.
3 Semantic tokens, inlay hints, auto-import, smart select, folding ranges, formatting, document links.
4 Undefined and unused variables, type errors, unknown symbols and members, argument counts.
5 PHPantom runs PHPStan, PHPCS, PHPMD, and Mago in-server and turns their reports into quick fixes. Phpactor proxies PHPStan, Psalm, and PHP-CS-Fixer, and PHPStorm bundles PHPStan and Psalm runners, but both only relay the errors.
6 Conditional return types, type aliases (`@phpstan-type` / `@phpstan-import-type`), pseudo-types, `@mixin`.
8 Extract method/function, extract/inline variable, extract constant, extract interface, promote constructor parameter, generate constructor, generate getters/setters, implement interface methods.
9 Null-check simplification, string interpolation conversion, converting between arrow functions and closures, and switch statements to match expressions.
Performance measured on a production Laravel codebase: 5.1K PHP files (389k lines) and 1.3K Blade templates (88k lines), with 27k vendor files (1.7M lines). Time to ready is the approximate wall-clock time from launch until full type intelligence is available on a cold start (first index). RAM is the steady resident memory once indexing has finished.
Independent, re-runnable type-inference conformance results across twelve PHP engines: php-typing-conformance (Qodana covers the PHPStorm engine, phpy the PHP Tools engine).
[!TIP] Want to verify? Open
examples/php/in your editor and trigger completion at the marked locations incompletion.php. It exercises every type intelligence feature in the table, including edge cases where tools diverge. For Laravel specifically, openexamples/laravel/— a standalone project with real Eloquent models, config, routes, views, and translations that exercises Eloquent property resolution, query builder chaining, scopes, custom collections, and go-to-definition for config keys, route names, and translation strings.
@throws detects uncaught exceptions in the method body, @param pre-fills from the signature, and tags are filtered to context and never suggested twice.array_map preserve element types.$users->map(fn($u) => $u->name) infers $u as User from the collection's generic context.@return types resolve to the concrete branch at each call site.@phpstan-type, @phpstan-import-type, and object{...} shapes all resolve through to completions.app('cache') resolve to the bound class, auth()->user() resolves to your configured model, authorization strings resolve to the gate definition or policy method that declares them, and query string completion on both relation and column names. Blade templates get completion, hover, go-to-definition, and diagnostics through virtual PHP preprocessing. No ide-helper or database access required.@deprecated detection, and namespace segment drilling.PHPantom understands Composer projects out of the box, but works without setup on non-Composer projects too:
autoload_classmap.php and autoload_files.php.composer.json, resolves the web root, and indexes Drupal-specific directories and PHP extensions (.module, .install, .theme, etc.) with .gitignore bypassed so that Composer-managed core and contrib code is always available.require_once discovery. Functions from required files are available for completion.PHPantom stands on the shoulders of:
@phpstan-* annotations.MIT. See LICENSE.
(top 24 of 41)
5,267 followers · starred Aug 2026
411 followers · starred May 2026
269 followers · starred Mar 2026
247 followers · starred May 2026