m3m0r7 / pnl
PHP native-library extension manager: FFI runtime SDK plus the pnl/pnlx CLI built from the bundled Rust sources on install.
Requires
- php: >=8.2
- composer-plugin-api: ^2.0
- cebe/php-openapi: ^1.8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
README
pnl makes it easy to use C libraries from PHP. It installs library "packages", finds the C library and headers already on your machine, generates PHP wrappers plus a small Rust bridge, compiles the bridge, and exposes everything through the Pnlx PHP SDK — think Composer, but for C libraries.
pnl init pnl find 'lib*' # browse available packages (default repo + your own) pnl install libc pnl list 'lib*' # show what you have installed
See the Quick Start to call C printf from PHP in a minute.
Table of Contents
Documentation
- Overview — What pnl is, how it works, and project status.
- Quick Start — Call C
printffrom PHP in a few commands. - Installation — Requirements and building/installing the binaries.
- Configuration — Project layout and writing
pnl.json. - Install Sources — URLs, paths, bare names, archives, and native discovery.
- Commands —
pnlandpnlxcommand reference. - PHP Usage — Loading extensions and the generated files.
- Development — Validation, testing, and the JSON schemas.
The default package repository is https://github.com/m3m0r7/pnl-packages, which publishes a repository-index.json so pnl find can browse it without cloning.
License
This repository is currently marked as MIT in composer.json. The bundled C libraries keep their own upstream licenses; see the package manifests and READMEs at https://github.com/m3m0r7/pnl-packages.