Overview
AI assistant
Build this with Claude Code, Cursor or Copilot
Copy a Tessero-tuned prompt for Overview, grounded in 16 real API signatures , into your IDE's AI. No chatbot, just exact context.
This manual is for the people who install, run and support Tessero in production: platform engineers, SREs, and developers who own a service end to end. It assumes you know how PHP runs in your environment (FPM, Octane, queue workers, CLI).
The operating model in one page
- Two memory pools. PHP's
memory_limitcovers PHP values. Array data lives in native memory, allocated bylibtesseroand not counted bymemory_limit. Each process has its own counter and optional budget (memory_budget). Set the budget; it turns a runaway allocation into an exception instead of an OOM kill. - Memory is freed deterministically. A native block is freed when the last PHP object that references it is destroyed. There is no separate garbage collector and no finaliser queue.
- Threads are opt-in. Kernels run on one thread unless you raise
threads. Under FPM, parallelism comes from having many workers. Raise threads for CLI jobs and dedicated worker pools. - Settings are per process. Threads, budget and tolerance are process-wide. The Laravel provider re-applies them per request and per job. Outside Laravel, set them at bootstrap.
- Two backends, identical numbers. The FFI package needs
ffi.enable(and preload under FPM). The extension needsextension=tessero. Either can be rolled back to the other without changing results. - No network, no files, no background threads of its own. Tessero does
not open sockets, does not read files except the ones you pass to
Npy::load, and does not keep threads alive between calls, apart from the OpenMP runtime's pool when threads > 1.