Meta-Upsun
Upsun's public source of truth: images, runtimes, regions and PHP extensions, served by a versioned API.
- Role
- Contributor, in the Advocacy team: many of the API's routes, including those dedicated to developer experience
- Period
- Oct 2025 – ongoing · Upsun
- Stack
- REST API
- OpenAPI
- JSON Schema
- Scalar
- GitHub Actions
- SchemaStore
- Upsun
Context
Upsun's reference data (available images, supported versions, regions, PHP extensions) was scattered: the documentation repository, hand-edited registry files, and tools that copied or reinterpreted it. In total, 36 Git repositories and 4 upstream APIs (endoflife.date and the Upsun API among them) contributed to it. Updates were manual, the source of truth was hard to find, and data was inconsistent from one tool to the next.
The project and my contribution
Meta-Upsun is run by the Advocacy team. I contributed heavily, adding a good share of the API's routes, notably technical routes designed for developer experience, consumed directly by code editors.
- A unified registry of images, runtimes, regions and extensions, validated against a schema on every change.
- A versioned, read-only REST API at meta.upsun.com, in JSON or YAML, with targeted responses: the whole registry, one runtime, only its versions, regions filtered by provider or zone, the extensions of one PHP version.
- A web interface to try the API, with Scalar: every route can be tested straight from the browser, with no tool or code, and Scalar generates call snippets (
curl…). I helped make it clearer and better documented. - A dynamic validation schema for
.upsun/config.yaml, my most visible contribution: the main schema references, through$ref, two routes I added that list live the supported runtime and service versions, drawn from the registry. It is registered on SchemaStore: VS Code, JetBrains and other editors autocompleteruntime.typeandservice.typeand flag an unsupported version before deployment.
Architecture choices
- Read-only by design: no write routes. Every change goes through a reviewed pull request, which keeps history and traceability.
- A four-level lifecycle status (supported, deprecated, retired, decommissioned) aligned with upstream projects, replacing the old supported / deprecated pair.
- Shipped with Upsun's own tooling: CI/CD, per-branch preview environments, staging validation before production.
- Fed automatically by the Meta Version Updater.
Results
- One canonical source, consumed by the documentation (moving to the API instead of copied Markdown tables), internal tools, the PHP and Node.js SDKs (generated from the OpenAPI spec it serves), customers' automation and the ecosystem.
- Updates shipped within days instead of weeks.
- Better developer experience: a version mistake shows in the editor, not at deploy time.


