News

PHPantom: A Fast PHP Language Server Built in Rust

Published
PHPantom: A Fast PHP Language Server Built in Rust image

PHPantom is a PHP Language Server Protocol (LSP) implementation written in Rust, built around fast startup and low memory use. On a project with 21,000 PHP files and 1.5 million lines of code, it is ready in under a second:

Metric PHPantom
Time to ready < 1 second
RAM usage 59 MB
Disk cache 0 MB

It communicates over stdin/stdout using the standard LSP protocol and works with any LSP-supporting editor. JetBrains phpstorm-stubs are bundled directly into the binary, so there is no runtime download or cache to manage.

Type Intelligence

PHPantom resolves types across generics, PHPStan annotations, conditional return types, and array/object shapes. It handles @template and @template-covariant tags, so a generic collection class produces correctly-typed completions at each call site:

/**
* @template T
*/
class Collection
{
/** @var T[] */
private array $items = [];
 
/**
* @param T $item
*/
public function add(mixed $item): void
{
$this->items[] = $item;
}
 
/**
* @return T|null
*/
public function first(): mixed
{
return $this->items[0] ?? null;
}
}
 
/** @var Collection<User> $users */
$users = new Collection();
$users->add(new User());
$user = $users->first(); // inferred as User|null

Laravel Eloquent is supported without any external plugin — relationships, accessors, and model properties are resolved for completions and go-to-definition.

Refactoring

PHPantom includes code actions for renaming symbols across the workspace and changing method visibility. The README's feature comparison table lists additional refactoring actions — extract method/function, extract/inline variable, constructor parameter promotion, and implement interface methods — though support may vary by editor and PHP version.

It also detects @deprecated symbols and flags them inline, and includes an expression simplification code action.

Editor Setup

Pre-built binaries for Linux, macOS, and Windows are available from the releases page. Place the binary on your PATH, then configure your editor.

Neovim — add a server entry in your LSP config pointing to the binary, with filetypes = { "php" } and root dir markers of composer.json or .git.

VS Code — install a generic LSP client extension, download the binary, and configure the binary path with language ID php.

Zed — an extension is included in the zed-extension/ directory. It auto-downloads the correct binary; set phpantom_lsp on PATH to use a local build instead.

PHPStorm — install the LSP4IJ plugin, create a new language server entry with the binary path, and map it to PHP file types.

Neovim phpantom actions
Neovim phpantom actions
Neovim phpantom document symbols
Neovim phpantom document symbols

Project Configuration

PHPantom reads composer.json automatically for autoload paths. A .phpantom.toml file supports additional overrides:

[project]
php_version = "8.3"
 
[diagnostics]
unused_variables = true
deprecated_symbols = true
 
[indexing]
strategy = "composer" # or "self" or "none"

Generate a default config file with:

phpantom_lsp --init

You can find the project at AJenbo/phpantom_lsp on GitHub.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Filed in

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Laravel Truss: Live Interactive Database ER Diagrams image

Laravel Truss: Live Interactive Database ER Diagrams

Read article
Laravel artisan dev: Run Server, Queue, Logs, and Vite image

Laravel artisan dev: Run Server, Queue, Logs, and Vite

Read article
Validate and Convert HEIC Images in Laravel image

Validate and Convert HEIC Images in Laravel

Read article
Saga Lara Flow: Durable Workflows and Compensating Transactions on Laravel Queues image

Saga Lara Flow: Durable Workflows and Compensating Transactions on Laravel Queues

Read article
Reject Unexpected Array Keys with Laravel Validation image

Reject Unexpected Array Keys with Laravel Validation

Read article
Major performance improvements & security patches for Filament v4.12 and v5.7! image

Major performance improvements & security patches for Filament v4.12 and v5.7!

Read article