oam-dev/spec: the Open Application Model specification, and what it actually gives you
Open Application Model (OAM).
At a glance
- What is it?
- The Open Application Model repo is a versioned API document set, not an installer. It defines workload types, traits and application scopes so a platform can describe an app without naming the infrastructure underneath. The judgement: read it if you build the platform, not if you just deploy to one.
- Who is it for?
- Adopt oam-dev/spec as a reading and design reference if you are building an internal developer platform and need a vocabulary for separating developer-facing components from operator-facing traits. Do not adopt it expecting a runtime, a CLI or a Helm replacement: the repository contains specification documents and schemas, and the README points at KubeVela for the implementation.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 41 days ago.
- What is it written in?
- GitHub does not report a main language for this repository.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What oam-dev/spec is, and the problem it claims to solve
This repository is the specification, not the software. The README describes OAM as "a set of standard yet higher level abstractions for modeling cloud native applications on top of today's hybrid and multi-cloud environments", and the top-level layout backs that up: numbered chapters such as 3.component_model.md, 4.workload_types.md, 6.traits.md and 7.application.md, plus schema/, core/, standard/ and extend/ directories holding schemas and extension definitions.
The stated problem is that application delivery is expressed in infrastructure terms. The README lists three symptoms: developers spend time on clusters, ingresses, labels and DNS instead of the app; upper-layer platforms are inextensible because app needs outgrow them; and deployment is tightly coupled to a provider, which the README calls vendor lock-in. The intended audience is therefore platform builders and the operators who define what a developer is allowed to ask for, not the developer typing a deploy command. If you only ever run kubectl apply against manifests someone else wrote, this repository has nothing to install for you.
How the model splits an application into components, traits and scopes
The mechanism is a separation of concerns written into the API surface. A component describes what the workload is and how it runs; a trait describes an operational behavior attached to it; an application binds components and traits into one deployable unit. The repository files map onto that split directly: 3.component_model.md, 4.workload_types.md, 5.application_scopes.md, 6.traits.md and 7.application.md.
That structure is the whole idea. The developer writes an application referencing a workload type, and the platform decides what that workload type resolves to in a given cluster. Traits are the extension point: instead of every team hand-rolling an ingress or a scaling rule, an operator publishes a trait once and developers attach it by name. Application scopes cover the third axis, grouping components that share something, such as a network boundary or a deployment target. The README frames the result as "modular, extensible, and portable design for defining application deployment with higher level API".
The trade-off is real and worth stating. A specification only has force where an implementation enforces it. The README says the design is "driven by KubeVela project", and the version table ties releases to it: v0.2.1 corresponds to KubeVela v0.3.x, v0.3.0 and the v0.3.1 draft to KubeVela v1.x. So the abstractions you actually get are the ones that platform chose to implement.
Installing it: there is no installer, only a spec to read
There is no install command in this repository. The README's "Learn the Model" section is a table pointing at versioned documents: v0.3.0 lives in SPEC.md, the working draft v0.3.1 in SPEC_DRAFT.md, and v0.2.1 is a tagged release. The first practical step is to clone the repository and read the version your platform tracks.
git clone https://github.com/oam-dev/spec.git
cd specAfter cloning, the numbered markdown files at the top level are the specification chapters, and schema/ holds the machine-readable definitions. If you want the implementation rather than the document set, the README points elsewhere: it names KubeVela as the platform that drives the design, and notes that the older v0.1.0 release "is only supported in Rudr and now archived".
# The README points at the implementation, not this repo:
# https://github.com/oam-dev/kubevelaWhat you should see after cloning is documentation and schemas, not binaries. Anyone arriving here expecting a controller, a CLI or a Helm chart will be disappointed, and that mismatch is the most common reason people bounce off this repository.
Where the specification stops short
The clearest limitation is version drift. The latest release is v0.3.0, dated 2021-06-21. The v0.3.1 draft sits in SPEC_DRAFT.md and is not a release. Anyone building against "OAM" today has to pick a version deliberately, because the documents are versioned artifacts, not a rolling standard.
The second limitation is that a spec cannot guarantee portability by itself. The README promises "Zero lock-in" through a consistent abstraction, but portability depends on two platforms implementing the same workload types and traits with the same semantics. The repository provides the vocabulary and the schemas; it does not arbitrate between implementations. If your target environments expose different trait sets, the application manifest is portable in shape and not in behavior.
Third, the repository has no runtime, so failure modes belong to whatever implements it. The README does not document rollback, upgrade paths between spec versions, or what happens to a stored application when a workload type changes. That silence is not a defect in a document set, but it is a gap for anyone treating the spec as a migration plan.
KubeVela as the reference implementation, and the honest alternative
The alternative most readers will weigh is simply writing Kubernetes manifests, or templating them with Helm. The difference in approach is where the abstraction sits. Helm templates YAML and hands you the rendered objects; you still reason about Deployments, Services and Ingresses, and the platform's opinions live in chart values. OAM moves the boundary up a level: the developer names a workload type and attaches traits, and the mapping to Kubernetes objects is the platform's job. That is a bigger abstraction with a bigger dependency on the platform team.
Within the OAM world, KubeVela is the implementation the README names, and the version table pairs each spec release with a KubeVela line. A second data point: Rudr implemented v0.1.0 and is described as archived, so the ecosystem around the spec has consolidated rather than multiplied. If you want an implementation today, the README's own pointer is KubeVela; if you want a rendered-manifest workflow with no platform layer, Helm is the shorter path and the spec will not help you.
Maintenance, licence and upgrade cost
The repository is not archived, and the last push was on 2026-08-21. That is recent activity on the documents, but it is not the same as a new release: the newest tagged release remains v0.3.0 from 2021-06-21, with v0.2.1 and v0.2.0 before it. Treat the spec as a slowly versioned document set, and check SPEC.md against SPEC_DRAFT.md before you assume a feature is settled.
Licensing needs care. The repository's LICENSE file is present but the metadata reports NOASSERTION, so automated tooling will not classify it for you. The README carries a badge labelled "License: OWF" pointing at that same LICENSE file, and the copyright section states that both OAM and KubeVela are hosted in the Cloud Native Computing Foundation, with all copyrights belonging to CNCF. Read the LICENSE file itself rather than the badge, and get your own legal read before redistributing the specification text or the schemas.
Upgrade cost is mostly a reading cost. Moving from v0.2.1 to v0.3.0 means moving between document versions and, per the README's table, between KubeVela v0.3.x and v1.x. Budget for that paired upgrade, not for the spec alone.
Editorial conclusion
Adopt oam-dev/spec as a reading and design reference if you are building an internal developer platform and need a vocabulary for separating developer-facing components from operator-facing traits. Do not adopt it expecting a runtime, a CLI or a Helm replacement: the repository contains specification documents and schemas, and the README points at KubeVela for the implementation. Before committing, verify which spec version your target platform tracks (v0.3.0 is the latest release, v0.3.1 lives in SPEC_DRAFT.md), and confirm that the trait set your application needs is one your platform actually installs.
Frequently asked questions
What is the Open Application Model (OAM) used for?
It is used to model a cloud native application at a higher level than containers or orchestrator objects, so that a deployment can be described once and delivered across hybrid and multi-cloud environments. The README frames it as an app-centric approach where operational behaviors are part of the app definition and the infrastructure is left out.
Is oam-dev/spec an installable tool or only documentation?
It is a set of versioned API documents and schemas. The README's "Learn the Model" table points at SPEC.md for v0.3.0 and SPEC_DRAFT.md for the v0.3.1 working draft, and the repository layout is numbered markdown chapters plus schema, core, standard and extend directories. The implementation the README names is KubeVela.
Which version of the OAM specification should I read?
The latest release is v0.3.0, which lives in SPEC.md, and the README pairs it with KubeVela v1.x. The v0.3.1 draft is in SPEC_DRAFT.md and is not a tagged release, while v0.2.1 corresponds to KubeVela v0.3.x.
Does Open Application Model work on Kubernetes?
Yes, Kubernetes is one of the environments the README names, alongside cloud and IoT devices, and the repository carries a kubernetes topic. The specification itself is not Kubernetes-specific: it defines abstractions that an implementation maps onto a target environment, and the README states the design is driven by the KubeVela project.
Official sources
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.
[](https://hysenlabs.com/projects/oam-dev-spec)