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.
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 = truedeprecated_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.