PHP 8.3+ · deterministic runtime

Build APIs your agents can ship, and you can trust.

Univeros is a deterministic, reversible PHP framework. One YAML spec scaffolds the Action, Input, Responder, tests, OpenAPI, and a typed client SDK. Every artifact byte-stable, every change rewindable, every mutation logged.

$ composer create-project univeros/univeros my-api

One spec emits

  • Action
  • Input
  • Responder
  • tests
  • OpenAPI
  • SDK
01

Deterministic

Every generated artifact is byte-stable. Same spec in, same bytes out, on any machine, any PHP minor. Diffs stay meaningful and CI can gate on drift.

02

Reversible

A rewind/replay journal captures every scaffold. journal:rewind undoes a bad generation; a failed iteration is recoverable, never catastrophic.

03

Idempotent & webhook-ready

Stripe-style Idempotency-Key middleware and signed inbound/outbound webhooks are first-class primitives, spec-driven and round-tripping through OpenAPI.

04

Agent-operable

A first-party MCP server exposes the framework as 42 agent-callable tools, and an append-only event log answers “what just changed?” across sessions.

Batteries included · agent-ready

Everything an API needs, and everything an agent needs to operate it.

40 independently usable packages under one bundle. Install the whole framework, or pick the pieces you need.

scaffold

Spec-driven scaffolding

A YAML endpoint spec emits the Action / Input / Responder triple, a domain stub, a PHPUnit test, an OpenAPI fragment, and the route entry. All in one command.

/docs/packages/scaffold
openapi

OpenAPI round-trip + SDKs

Emit OpenAPI 3.1 from specs and import it back, faithfully. Generate zero-dependency TypeScript and httpx/pydantic Python clients, deterministic and CI-checkable.

/docs/guides/openapi/roundtrip
persistence

Persistence, the right way

A thin Repository / UnitOfWork contract over Cycle ORM v2 with db:migrate commands. Add a persistence: block and the entity, repository, and migration scaffold too.

/docs/packages/persistence
messaging

Messaging & workers

A MessageBus + worker bridge over Symfony Messenger with attribute-driven handler discovery. A queue: block scaffolds the DTO, handler, and test alongside the endpoint.

/docs/packages/messaging
introspection

Introspection & Doctor

A read-only X-ray of a booted app (bindings, routes, listeners, middleware, specs), plus a doctor health-check, both with deterministic JSON for agents and CI.

/docs/packages/introspection
symbol-index

Symbol index & adviser

An AST + spec-aware symbol index answers find-usages, callers-of, and refactor-impact in milliseconds. A refactor adviser flags dead bindings, fat constructors, and spec-less routes.

/docs/packages/symbol-index
mcp

First-party MCP server

The framework as 42 agent-callable Model Context Protocol tools over stdio/HTTP, the shell-less bridge for hosted agents and remote introspection of deployed APIs.

/docs/packages/mcp
observatory

Observatory & events

A dev-only, fail-closed monitoring panel over the framework’s own introspection, plus an append-only .altair/events.jsonl mutation log for “what changed?” across sessions.

/docs/packages/observatory

From spec to shipped

One spec in. A tested, documented endpoint out.

bin/altair spec:scaffold reads a single YAML file and writes the whole vertical slice, then records a journal entry so you can journal:rewind it.

api/users/create.yaml input
# api/users/create.yaml
operationId: createUser
method: POST
path: /users
summary: Register a new user

input:
  email:    { type: string, format: email, required: true }
  password: { type: string, minLength: 12, required: true }

persistence:
  entity: User
  table: users

idempotency: true

responses:
  "201": { $ref: User }
9 files written · 0 hand-edits output
  • + Http/Action/CreateUserAction.php action
  • + Http/Input/CreateUserInput.php input
  • + Http/Responder/CreateUserResponder.php responder
  • + Domain/User.php entity
  • + Domain/UserRepository.php repository
  • + database/migrations/20260607_create_users.php migration
  • + tests/Http/CreateUserActionTest.php test
  • + docs/openapi/users-create.yaml openapi
  • + config/routes.php (+ POST /users) route

Tokens to Ship. A defensible benchmark of how cheaply an AI agent gets from spec to passing acceptance. Deterministic, scannable output costs fewer tokens than reading source.

See the methodology

The catalogue

40 packages, one coherent framework.

Each ships with a stand-alone guide. Composer-require the bundle, or any single package.

Browse all docs

Get started

From empty directory to a running, tested API.

Scaffold a project, write a spec, and ship your first endpoint in minutes, with the determinism, reversibility, and agent tooling baked in.

$ composer create-project univeros/univeros my-api