aheinze/scriptlite-ext

C extension for ScriptLite — high-performance ECMAScript interpreter with native C parser

Maintainers

Package info

github.com/aheinze/ScriptLiteExt

Language:C

Type:php-ext

Ext name:ext-scriptlite

pkg:composer/aheinze/scriptlite-ext

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

0.1.2 2026-03-07 03:11 UTC

This package is auto-updated.

Last update: 2026-04-19 13:56:59 UTC


README

Mirror repository — this repo is automatically mirrored from aheinze/ScriptLite for PHP PIE installation. All development, issues, and pull requests happen in the main repository.

High-performance PHP extension for the ScriptLite ECMAScript interpreter. Replaces the PHP bytecode VM with a C implementation using computed-goto dispatch, delivering ~180x speedup.

The extension ships with a native C parser only (no PHP parser fallback), so no Composer autoloader or external PHP parser runtime is required at runtime.

Installation

Via PHP PIE (recommended)

pie install aheinze/scriptlite-ext

Manual build

Prerequisites: PHP 8.3+ dev headers, phpize, C11 compiler, libpcre2-dev, make.

phpize
./configure --enable-scriptlite
make -j"$(nproc)"
make install

Then enable:

extension=scriptlite

Verify

php -r "var_dump(extension_loaded('scriptlite'));"
# bool(true)

php -r "echo (new ScriptLiteExt\Engine())->eval('1 + 2');"
# 3

Usage

Standalone (no PHP library needed)

$engine = new ScriptLiteExt\Engine();
$result = $engine->eval('Math.max(1, 2, 3)');
echo $result; // 3

With ScriptLite PHP library

When installed alongside aheinze/ScriptLite, the PHP Engine class automatically delegates to the C extension — no code changes needed.

$engine = new ScriptLite\Engine();
$result = $engine->eval('Math.max(1, 2, 3)'); // uses C extension transparently

API

ScriptLiteExt\Engine

Method Description
eval(string $code, array $globals = []): mixed Evaluate JS code and return the result
compile(string $code): CompiledScript Compile JS to bytecode
run(CompiledScript $script, array $globals = []): mixed Execute compiled bytecode
transpile(string $code): string Transpile JS to PHP code
getOutput(): string Get captured console.log output

ScriptLiteExt\Compiler

Method Description
compile(Program $ast): CompiledScript Compile an AST to bytecode

ScriptLiteExt\VirtualMachine

Method Description
execute(CompiledScript $script, array $globals = []): mixed Execute compiled bytecode
getOutput(): string Get captured console.log output

License

MIT