Upsun

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 autocomplete runtime.type and service.type and 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.

Further reading

← Back to the portfolio