# yam **Repository Path**: code2life/yam ## Basic Information - **Project Name**: yam - **Description**: Yet Another Application Model - The Simpler Way of Continuous Delivery. - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-02-08 - **Last Updated**: 2022-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
# YAM [Yet Another Application Model](https://yam.plus) - The Simpler Way of Continuous Delivery. - [YAM](#yam) - [What's YAM](#whats-yam) - [Documentation https://yam.plus](#documentation-httpsyamplus) - [Why YAM](#why-yam) - [Why separation of concerns is significant](#why-separation-of-concerns-is-significant) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Step 1. Install YAM-CLI](#step-1-install-yam-cli) - [Step 2. Generate Operation Boilerplate](#step-2-generate-operation-boilerplate) - [Step 3. Release the App](#step-3-release-the-app) - [Other Commands](#other-commands) - [Basic Workflow](#basic-workflow) - [Comparisons](#comparisons) - [Compare to Helm/Kustomize](#compare-to-helmkustomize) - [Compare to Pulumi/Terraform](#compare-to-pulumiterraform) - [Compare to Open Application Model (OAM)](#compare-to-open-application-model-oam) - [What YAM & OAM have in common](#what-yam--oam-have-in-common) - [The Differences](#the-differences) - [Plugin Development](#plugin-development) ## What's YAM **YAM is an easy-to-use and powerful platform** to deliver apps on Kubernetes: - it allows platform engineers **defining** standardized application model that maintains **COMPLETE OPERATION LIFECYCLE** metadata. - it allows developers/operators **declaring** how to operate their cloud native apps with **A FEW LINES OF CODES**. ##### Documentation [https://yam.plus](https://yam.plus) ## Why YAM YAM is inspired by [Open Application Model](https://oam.dev/)(OAM), however, the implementation is **Totally** different from OAM runtime [KubeVela](https://github.com/oam-dev/kubevela). Here are some highlights of YAM. - ☸ **Operation Lifecycle as Code, EVERYTHING as Code**. - :ok_person: Focus on **separation of concerns**, **app-centric**, hiding the complexity of the platform. - :blush: **Extremely easy to use**, it won't take you one minute to bring your application on Kubernetes. - :zap: **Lightweight and Fast**, NO need for [CRDs](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) and [Operators](https://github.com/operator-framework) - :sparkles: Extensible, YAM leverages JavaScript ecosystem to develop plugins to strengthen application model, by using JSON Schema, TypeScript, and Tons of NPM packages. #### Why separation of concerns is significant The concerns of different roles varies a lot: - **Platform Engineer**: how to provide an easy to use, scalable, stable, secure, cloud native platform? - **Developer**: how to run, access, observe my app ? - **Operator**: how to operate the app, is capacity enough ? **Traditional way**: - Developers need to learn TOO MUCH platform related things to get onboard, like Kubernetes Resources, CRD, Helm, Cloud Services... - Platform engineer loses control of running workloads when team grows. **YAM/OAM way**: - From developer/operator's perspective, they only need to fill in a few blanks that **defined by the Application Model**, then, type ONE simple command(YAM - "yam apply" / OAM - "vela up"), the **whole app stack** magically works ! - From platform engineer's perspective, app-centric and standardized models LINK whole platform holistically. All complex things, like IaC, Kubernetes Resources and CRs, Helm Charts, are hidden for developers, but easily controlled by platform engineer team. ## Getting Started ### Prerequisites Just a Kubernetes cluster, you could run one by [Minikube](https://minikube.sigs.k8s.io/docs/start/), [K3S](https://k3s.io/) or any Kubernetes cloud provider. ### Step 1. Install YAM-CLI **Option1**. Download and Install binary executable - **For Windows/MacOS/Linux**: Download from [https://github.com/Code2Life/yam/releases](https://github.com/Code2Life/yam/releases?q=release&expanded=true). - Or, **for Linux** ```bash curl -sfL https://get.yam.plus | sh - # takes maybe 10 seconds yam --version ``` **Option 2**. Install by NPM ```bash npm i yam-cli -g # takes maybe 5 seconds yam --version ``` **Option 3**. Install VSCode Extension Search and install "YAM Engine" in [VSCode marketplace](https://marketplace.visualstudio.com/items?itemName=code2life.yam-engine). ### Step 2. Generate Operation Boilerplate The following command will generate an 'app.yaml' file for maintaining the **whole operation lifecycle**, as code. ```bash yam init