Skip to main content

Installation

This page covers installing Nexus into your PHP project. Nexus requires PHP 8.5+ and Composer 2.x; Swoole is optional and needed only for production workloads.

Requirements

  • PHP 8.5+ — Nexus uses features introduced in PHP 8.5.
  • Composer 2.x — for package management.
  • Swoole 5.0+ (optional) — required only if you use nexus-runtime-swoole. Not needed for local development with the Fiber runtime.

Install the meta-package

The nexus-actors/nexus meta-package installs nexus-core, nexus-runtime-fiber, and nexus-serialization in one step. This is the right starting point for most projects:

composer require nexus-actors/nexus

Install individual packages

Install only the packages you need:

# Core abstractions (actors, behaviors, supervision, mailboxes)
composer require nexus-actors/core

# Fiber runtime (development and testing)
composer require nexus-actors/runtime-fiber

# Swoole runtime (production)
composer require nexus-actors/runtime-swoole

# Step runtime (deterministic testing)
composer require --dev nexus-actors/runtime-step

# Message serialization (wire format via Valinor)
composer require nexus-actors/serialization

# Psalm plugin (static analysis)
composer require --dev nexus-actors/psalm

Swoole extension

The Swoole runtime requires the ext-swoole PHP extension. Install it via PECL or your system package manager:

pecl install swoole

Then enable it in your php.ini:

extension=swoole

Verify the installation

After installation, confirm the packages are present:

composer show nexus-actors/*

Run the test suite to confirm everything works:

vendor/bin/phpunit

Docker setup (for contributors)

The repository ships a Docker Compose configuration with three service targets: php (full environment), php-fiber (Fiber-only), and php-swoole (Swoole-only). A Makefile provides shorthand commands.

make build && make up && make install
CommandDescription
make buildBuild Docker images
make upStart containers
make downStop containers
make installRun composer install inside the container
make shellOpen a bash shell in the PHP container
make testRun all tests
make psalmRun Psalm static analysis

Smoke test

Run this script after installation to confirm the actor system, Fiber runtime, and message delivery all work end-to-end. If it prints OK, your install is healthy.

smoke.php
<?php

declare(strict_types=1);

use Monadial\Nexus\Core\Actor\ActorSystem;
use Monadial\Nexus\Core\Actor\Behavior;
use Monadial\Nexus\Core\Actor\BehaviorWithState;
use Monadial\Nexus\Core\Actor\Props;
use Monadial\Nexus\Runtime\Duration;
use Monadial\Nexus\Runtime\Fiber\FiberRuntime;

require 'vendor/autoload.php';

readonly class Increment {}
readonly class GetCount { public function __construct(public object $replyTo) {} }

$captured = null;
$runtime = new FiberRuntime();
$system = ActorSystem::create('smoke', $runtime);

$counter = $system->spawn(
Props::fromBehavior(Behavior::withState(
0,
static function ($ctx, object $msg, int $n) use (&$captured): BehaviorWithState {
if ($msg instanceof Increment) {
return BehaviorWithState::next($n + 1);
}
if ($msg instanceof GetCount) {
$captured = $n;
}
return BehaviorWithState::same();
},
)),
'counter',
);

$counter->tell(new Increment());
$counter->tell(new Increment());
$counter->tell(new Increment());
$counter->tell(new GetCount($system->deadLetters()));
$runtime->scheduleOnce(Duration::millis(200), fn () => $system->shutdown(Duration::seconds(1)));
$system->run();

echo $captured === 3 ? 'OK' : 'FAIL: expected 3, got ' . $captured;
echo PHP_EOL;

Run the smoke test:

php smoke.php
# OK

Next steps

  • Quick Start — build your first actor.
  • Key Concepts — learn the actor model fundamentals.
  • Runtimes — choose between Fiber and Swoole for your workload.