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 — 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, 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 — because 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