Menu
Guides
- Install
- CLI reference
- The superset
- Differences from PHP
- Async
- Modules
- FFI
- Attributes
- Generics
- Memory model
- Typed arrays (Ds)
- HTTP server
- WebSocket
- PDO
- curl
Reference
Internals
Documentation
Guides
InstallManticore compiles PHP to a native binary with no PHP runtime in it — no interpreter, no php.ini, no extension loader. It is not statically linked,…
CLI referenceEvery manticore command, its options and exit codes. The text under each command is the declared help (manticore <command> --help); tests/cli/help.txt…
The supersetManticore's design goal is that PHP feels like PHP: the interpreter is the oracle, and tools/difftest.sh compares our output against it case by case.…
Differences from PHPManticore's goal is that a program prints the same bytes as php. This page is the honest list of where it does not: what a compiled program does diffe…
AsyncPart of the standard distribution: the runtime ships in prelude/async.php (demand-gated on an Async mention), the demos live in examples/async/. A pur…
ModulesManticore builds multi-file PHP projects from a single cargo-style manifest, manticore.json. One manifest defines every artifact — your application…
FFIManticore calls into native C libraries directly. You declare a PHP function, tag it with attributes naming the library and the C symbol, and the comp…
AttributesPHP 8 attributes consumed by the Manticore compiler at AOT time. All attributes are read during compilation; none allocate at runtime. Unknown attribu…
GenericsPHP has no native generic syntax, so Manticore reads generics from docblocks (@template, @var C<T>, @param T, @return T, T[], array<K,V>) and the call…
Memory modelManticore compiles PHP to native code with no garbage-collected runtime. Every value (string, array, object) is reclaimed by one of three strategies,…
Typed arrays (Ds)Fixed-width, statically typed arrays over one native buffer. A PHP array stores every element as a tagged cell behind a hash/vector buffer; a Manticor…
HTTP serverA handler is callable(Http\Request): Http\Response. Nothing else is required: no router, no middleware, no container, no php.ini.
WebSocketReal-time over the same server and port as HTTP (chat, live updates, push), and outbound WebSocket connections to third-party servers, over one core:…
PDOPHP Data Objects with three drivers: SQLite (libsqlite3 over FFI), PostgreSQL and MySQL / MariaDB (the wire protocols in pure PHP over a socket: no li…
curlAn HTTP client with php's own surface — curl_init, curl_setopt, curl_exec, curl_getinfo, the curl_multi_* and curl_share_* families — bound to lib…
Reference
RoadmapManticore compiles PHP 8.5 to standalone native binaries and compiles itself to a byte-identical fixpoint. The Zend interpreter is the oracle: if php…
Builtin coverageGenerated by php tools/builtins_audit.php against PHP 8.5.12 on 2026-10-26. Do not edit by hand.
Known gapsMoved out of ROADMAP.md on 2026-10-11 so the roadmap can be goal-driven. Content is the 2026-10-06 gap inventory, unchanged: correctness table, owners…
ext/mysqliThe full php.net mysqli surface, in pure PHP over the MySQL wire protocol (the same socket layer as pdo_mysql): no libmysqlclient, no mysqlnd. Works a…
Internals
Late static bindingStatus: shipped. How static:: is resolved at compile time through per-descendant method copies.
Memory ABI contractStatus: shipped; normative. The layout and refcount contract between the compiler and its runtime.
MIRStatus: shipped. Overview of the mid-level IR and the pass pipeline.
Manticore module system & distributionStatus: PARTLY SHIPPED. The .sig module interface and manticore build manticore.json (library + application targets, cross-target linking) are in the…
MonomorphizationStatus: SHIPPED — the Monomorphize pass covers both the array dimension and the callable dimension. This doc is the original engine design and ratio…
Native buffersWhy SplFixedArray and Manticore\Ds\* sit on a malloc'd fixed-width block instead of a PHP array, and how the compiler inlines access to it. Layout liv…
OwnershipFlowStatus: shipped. Ownership of locals decided per program point, and generator frames own what they hold (ABI v17). MemoryAbi::VERSION is 18 today (src…
Refcount + copy-on-writeStatus: shipped. Rationale for refcounting with copy-on-write instead of a tracing GC.
Reference cellsStatus: implemented (as of 2026-09-14). [&$a], [&$this->p], [&$a[$k]], [$v, &$v], $a[$k] = &$v, cell-alias ownership, unset breaking the binding and a…
Stage0 bootstrapStatus: shipped (2026-10). The procedure contributors follow is the "Bootstrap: the pinned release" section of AGENTS.md. This note explains why the d…