Adoption
What adopting Nexus actually means.
License terms, governance structure, support channels, and what happens if the project changes direction. Honest answers before you commit production systems.
License & IP
Nexus is released under the MIT License. Every package under
packages/ is published independently to Packagist
under the same terms. You can use, modify, fork, and distribute Nexus in
commercial products without a licensing agreement.
- ✓ Commercial use — no fee, no notice required beyond the MIT attribution line
- ✓ Modification and redistribution — fork the monorepo or any individual package
- ✓ No CLA required — contributors retain copyright on their patches
- ✓ Sublicensing — you can ship Nexus inside a proprietary product without open-sourcing your code
The full text lives at github.com/nexus-actors/nexus/blob/main/LICENSE.
Maintainers & Governance
Nexus is developed under the nexus-actors GitHub organisation. The project is small and honest about it: a core maintainer team makes architectural decisions; external contributions are reviewed and merged via pull request.
- → Architecture and roadmap decisions are made by the core maintainer(s) and documented in GitHub Discussions
- → Breaking changes follow semver and ship in major versions — with a CHANGELOG entry and migration notes
- → Security reports: open a GitHub Discussion — do not file public issues for vulnerabilities
- → Contributions welcome — the easiest entry points are test coverage, documentation, and compatibility packages
Support
V1 ships with community-tier support only. There is no paid support tier yet — that will be evaluated based on adoption. Here is what you can rely on:
Community (available now)
- GitHub Discussions — questions, design feedback, RFCs
- GitHub Issues — bug reports with reproduction steps
- Docs at docs.nexusactors.com covering all stable APIs
- Runnable examples in the monorepo under
examples/
Commercial (not yet)
Priority response, private channels, and SLA-backed support are planned for a future release. If your team needs this today, open a GitHub Discussion thread — early conversations shape the offering.
Is Nexus ready for production?
The stability matrix at /stability gives
the per-package answer. The short version: core actor system, FiberRuntime,
SwooleRuntime, persistence, and HTTP are all Stable.
nexus-cluster (multi-machine routing) is Experimental.
If you are evaluating Nexus for a new service, the right question is not "is it stable?" but "does it match the problem?" The When to use actors guide gives an honest answer based on workload characteristics — not marketing claims.
Nexus is a V1 release. The API surface is intentionally narrow. Packages that are not ready are not shipped — the monorepo has not-yet-published packages behind feature flags. What is in the stable set is there because it has test coverage, Psalm level-1 analysis, and integration tests across both FiberRuntime and SwooleRuntime.
Project continuity
What happens if the maintainers change direction, hand off the project, or stop actively developing it?
- → MIT = forkable by anyone. If development stalls, any team can fork the monorepo and continue. No relicensing, no CLA, no negotiation required.
- → Individually published packages.
Each of the 25 packages under
packages/is split to its own GitHub repo viasplitsh-liteand published to Packagist independently. A monorepo restructure does not breakcomposer require nexus-actors/core. - → Semver with a CHANGELOG. Breaking changes are gated to major versions. The CHANGELOG documents what changed and why. Migration guides ship alongside breaking releases. The criteria for a major bump are defined in the versioning policy.
- → Be the first production user. Nexus has no "used by X" list yet. Early adopters shape the roadmap directly — open a GitHub Discussion and it gets read by the people who write the code.
Evaluation checklist
Work through these questions before committing Nexus to a production service. None of them are blockers — they are context that helps you set realistic expectations.
ActorRef<T> generics.
Scoping a proof of concept
The fastest path to a useful evaluation is a small, isolated service that exercises the specific properties you care about — not a port of your entire backend.
Good PoC candidates
- A wallet or balance service with audit-log requirements — exercises event sourcing and single-writer guarantees
- A WebSocket notification service — exercises actor-per-connection and pub/sub channels
- A device telemetry ingestor — exercises passivation and bounded mailboxes under high volume
- A multi-step approval workflow — exercises Saga actors and durable state
PoC scope: keep it narrow
- One bounded context, one actor tree, one persistence backend
- Integration tests using StepRuntime — they run in CI without Swoole
- FiberRuntime in development; SwooleRuntime in staging/production
- Measure: latency, memory stability under load, restart-recovery time
Incremental adoption path
You do not need to rewrite your existing application to use Nexus. The typical adoption curve looks like this:
- 1 New service, isolated — Start Nexus in a new service that does not share code with your existing application. Pick a bounded context where the actor model has a clear advantage (state, concurrency, event sourcing). Ship it, observe it.
- 2 Extract a stateful subsystem — Identify a part of your existing application that is already stateful but clunky (a Redis-backed counter, a cron-driven processor). Replace it with an actor behind a thin adapter. Your existing code still calls the adapter — the actor is invisible to it.
- 3 Add Nexus HTTP to one route group — If your application handles WebSockets or high-concurrency reads, migrate that route group to Nexus HTTP while leaving the rest on PHP-FPM. Use a reverse proxy to split traffic.
- 4 Evaluate full migration — Once your team is fluent with the actor model and you have observability in place, assess whether migrating the rest of the application delivers enough value to justify the cost.
Common gotchas
Things teams most often trip over in their first Nexus project.
Blocking I/O inside handlers
sleep(), file_get_contents(), and
synchronous database calls block the Fiber or coroutine. The nexus-psalm
plugin catches the most common cases at analysis time. For HTTP clients and DB access, use
async-aware libraries (Swoole coroutine-native clients) or route the I/O through a dedicated actor.
Shared mutable state in closures
Props factory closures captured by reference (&$var) break the
single-writer guarantee. The Psalm plugin catches this. Keep all actor state inside the actor —
if you need to share state between actors, pass messages.
Asking from inside a handler without a timeout
An ask() without a bounded timeout can deadlock two actors waiting
on each other. Always supply a Duration timeout. Keep ask chains
short — deep ask chains amplify latency and increase the risk of timeout cascades.
Spawning too many actors
Each actor allocates a mailbox and a Fiber/coroutine. For workloads with millions of entities, use passivation — actors that are not actively receiving messages write state to persistence and stop. The passivation guide covers the EntityRefFactory pattern for transparent reactivation.
Start evaluating Nexus today.
The quick-start takes five minutes. The stability matrix answers the per-package readiness question.
composer require nexus-actors/nexus