Library / SDK
openupm/openupm avatar
openupm/openupm

OpenUPM's Curated Package Data and Validation Repository

OpenUPM - Open Source Unity Package Registry (UPM)

1,923 stars1,232 forksJavaScriptBSD-3-Clause

At a glance

What is it?
openupm/openupm is the curated data and CI validation repository for the OpenUPM Unity package registry. It is useful to package maintainers and contributors, but it is not the application code that serves packages or implements the registry.
Who is it for?
Adopt openupm/openupm when you need to validate curated OpenUPM package metadata or contribute a package manifest. Do not treat it as a deployable registry, website, or package publishing service.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What OpenUPM's Data Repository Owns

OpenUPM is described as an open-source service for hosting and building open-source Unity Package Manager packages. The service has two main areas: a managed scoped package registry and automatic pipelines that track, build, and publish packages from Git tags. The repository reviewed here does not implement those service areas. Its stated role is narrower. It contains curated OpenUPM package data and owns the CI gate that verifies changes to that data.

This distinction matters for engineers choosing a repository. Someone looking for the registry server, website code, API services, background jobs, or the shared validator implementation will not find those components here. The README places application code, website code, API services, jobs, and shared packages in the separate `openupm/openupm-next` repository. It also names `openupm/openupm-pipelines` for package build and publish pipelines and `openupm/openupm-cli` for command-line tooling.

The intended users are therefore maintainers of packages listed through OpenUPM and contributors who want to submit or correct curated metadata. The project is also relevant to engineers who need to understand where the public catalog's source records live. It is not a local implementation of Unity's package manager and does not replace Unity's scoped registry client configuration.

Repository Structure and Validation Flow

The repository layout makes the data pipeline visible. Package-specific records are stored as YAML manifests under `data/packages/*.yml`. Shared metadata is stored in YAML files directly under `data/`. The README identifies that shared information as sponsors, backers, built-in packages, topics, and blocked scopes. These files are the editable surface of this repository.

Validation is defined in `test/data-packages.js`. According to the README, this file is a wrapper that runs the shared validator from `openupm-next`. The `package.json` file defines `npm test` as an alias for `npm run test:data`, while the latter starts Node's test runner against `test/*.js` with `NODE_ENV=test`. The repository therefore acts as a data repository plus a validation entry point. It does not contain the full validator implementation.

The dependency on `openupm-next` is an explicit operational constraint. The README says the test expects a built `openupm-next` checkout beside this repository, or an `OPENUPM_NEXT_PATH` environment variable pointing to one. GitHub Actions checks out and builds `openupm-next` before running the data test. This arrangement separates shared validation logic from the curated records while still making CI the gate for changes.

Production deployment has another boundary. Pushes to `master` run data validation in GitHub Actions. After validation passes, the website is scheduled to rebuild with the updated package data, usually within 30 minutes. The repository can therefore be a meaningful change point even though it does not contain the production website or registry.

Installing the Validation Tools and Running the First Check

The documented local workflow starts by installing the repository's Node dependencies and running the data test. The README gives `npm install` followed by `npm test`. Before running the test, make sure that a built `openupm-next` checkout is available next to the repository, because the validation wrapper delegates to the shared validator there.

bash
npm install
npm test

The expected first validation path is the repository's `test:data` target, which `npm test` invokes. The README does not document a sample manifest to add or a synthetic failing change, so there is no supported example here that demonstrates a particular validation error. The visible result to look for is completion of the Node test command, assuming the required `openupm-next` build is present.

If the full test command is unnecessary, the README gives a direct alternative:

bash
npm run test:data

This invokes the same validation wrapper rather than running the whole `test` alias. If the neighboring checkout is stored elsewhere, the documented configuration is the `OPENUPM_NEXT_PATH` environment variable. The README does not provide a shell command for setting that variable, so the exact value and path should come from the contributor's local checkout arrangement.

The repository also includes `.node-version`, `.nvmrc`, and `mise.toml`, which indicate that Node version selection is part of the local toolchain. The README does not state which version each file selects, so a contributor should inspect those files rather than assume a version. The package manifest identifies the project as private and version `1.60.8`, which describes this repository package, not necessarily a registry service release.

Curated Metadata, Sponsors, and Publication Boundaries

Because this repository stores curated manifests and shared metadata, a change can affect discovery information even when it does not change runtime application code. A contributor may need to work with package records, sponsors, backers, built-in packages, topics, or blocked scopes. The README does not document the schema of each YAML file, the exact validation rules, or a documented process for adding a package from start to finish. That omission makes the shared validator and the separate documentation necessary references before editing records.

The README also states that OpenUPM uplinks `org.nuget` scoped packages to the OpenUPM-hosted UnityNuGet registry at `https://unitynuget-registry.openupm.com`, based on `bdovaz/UnityNuGet`. This is ecosystem context rather than a feature implemented by this repository. The same separation appears in the package publication model: `openupm/openupm-pipelines` handles automatic build and publish pipelines from Git tags, while `openupm/openupm` owns the curated data and validation gate.

The public service is also not an official Unity Technologies service. The README includes that disclaimer directly. For an engineer, this distinction affects expectations around support, guarantees, and operational ownership. The repository documentation points to public uptime monitoring and package scan and release queue status, but it does not promise any specific availability level or release processing time beyond the website rebuild statement.

Comparison with Unity's Registry and the Service Repositories

OpenUPM provides a managed scoped package registry for UPM packages. Its documented scope is open-source package discovery, hosting, and community distribution, with package records curated in this repository and services distributed across other repositories.

A second practical comparison is between this repository and `openupm/openupm-next`. If the task is to modify package metadata, this repository is the correct location. If the task is to change website behavior, API code, jobs, or shared validator implementation, the README directs engineers to `openupm-next`. If the task is to build or publish a package from Git tags, the README names `openupm/openupm-pipelines`. Keeping those responsibilities separate is useful because it makes the contribution surface and deployment boundary explicit.

The limitation is that this repository cannot provide a complete local preview of the service by itself. A successful data test checks the curated files through the shared validator, but it does not establish that the website, registry, or publishing pipeline is healthy. Public uptime and queue pages are provided for service status, while actual production behavior belongs to other parts of the OpenUPM ecosystem.

Maintenance Signals and Change Boundaries

The repository is not archived. Its last push was on 2026-10-15. That is a recent activity signal according to the repository status. The release list in the repository record includes releases dated 2022-05-04, 2021-12-26, and 2021-10-07. Those release dates should not be confused with the repository's latest push date, and the repository record does not explain why the listed releases are older than the latest source push.

The source code is licensed under `BSD-3-Clause`, as stated in both the README and `package.json`. The README separately points to OpenUPM website and public registry terms of use, so code licensing and service terms are distinct documents. Contributors should read the relevant terms for the website or registry rather than assuming that the repository license governs every public service interaction.

The repository's upgrade cost is mostly validation and compatibility work. The local test depends on a separately built `openupm-next` checkout, so changes to the shared validator can affect whether this repository's data passes CI. The repository does not include the validator implementation, dependency upgrade instructions, or a documented migration policy. The concrete maintenance check is therefore to run `npm run test:data` with the intended `openupm-next` checkout and inspect the resulting package data changes before pushing to `master`.

Editorial conclusion

Adopt openupm/openupm when you need to validate curated OpenUPM package metadata or contribute a package manifest. Do not treat it as a deployable registry, website, or package publishing service. Before changing it, verify that the neighboring openupm-next checkout or OPENUPM_NEXT_PATH points to a compatible validator and review the package manifest against the registry's data rules.

Frequently asked questions

What is the openupm/openupm repository used for?

It contains curated OpenUPM package manifests, shared metadata, and the CI validation gate for data changes. Application code, website code, API services, jobs, and the shared validator implementation are in `openupm/openupm-next`.

How do I run OpenUPM data validation locally?

The README documents `npm install` followed by `npm test`, or `npm run test:data` for the direct validation target. The test expects a built `openupm-next` checkout next to the repository, or an `OPENUPM_NEXT_PATH` environment variable pointing to one.

Does openupm/openupm contain the package registry and publishing service?

No. The README identifies `package.openupm.com` as the UPM registry and `openupm/openupm-pipelines` as the build and publish pipeline project. This repository focuses on curated data and validation.

Official sources

  1. License: BSD-3-Clause
  2. openupm/openupm on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/openupm-openupm.svg)](https://hysenlabs.com/projects/openupm-openupm)

Was this useful?