## 1. Project Overview & Quickstart (score-spec/GOVERNANCE)

# GOVERNANCE

Open-source repository score-spec/GOVERNANCE

### Repository Details
- **Repository:** [score-spec/GOVERNANCE](https://github.com/score-spec/GOVERNANCE)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (score-spec/docs)

## File: README.md

[](https://github.com/score-spec/docs/actions/workflows/hugo.yml) [](https://github.com/score-spec/docs/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)



## Docs

This section covers how to build the documentation site with Hugo.
For information on Score's style guide see the [Style guide](styles/style-guide.md).

### Running the website locally

#### `yarn`

We use `yarn` (for MacOS: `brew install yarn`) as a package manager to ensure the versions of Hugo and associated tools are up to date. All commands that execute those tools are prefixed with `yarn run` or are aliased in the `package.json` file.

To install the packages:

```
yarn install
```

To run the server locally:

```
yarn build

OR

yarn run hugo server
```

And then view it at <http://localhost:1313>.

#### `score-compose`

You can [install `score-compose`](https://docs.score.dev/docs/score-implementation/score-compose/installation/) and then build and run this hugo website as a container:

```
score-compose init --no-sample
score-compose generate score.yaml --build main=.

docker compose up --build -d

curl $(score-compose resources get-outputs dns.default#score-docs.dns --format '{{ .host }}:8080/docs/')
```

### Deployment

This site is currently deployed through Github Pages with a CNAME directing `docs.score.dev` to `score-spec.github.io`. The DNS configuration is managed by Humanitec.

### Format docs

The following section covers how to format and lint prose.

### Formatters and linters

This project uses the [dprint](https://dprint.dev/overview/) to format documentation. dprint is a command line application that automatically formats code.

Use `dprint` to format your documentation.

```bash
yarn fmt
```

Example output.

```bash
$ yarn fmt
Formatted 1 file.
✨  Done in 0.13s.
```

This project uses the [Vale](https://vale.sh) with a [Vale-compatible implementation of the Google Developer Documentation Style Guide](https://github.com/errata-ai/Google).

On MacOS, install it through `brew install vale`.

For example, to lint a document run:

```bash
vale sync
vale styles/style-guide.md
```

Example output.

```bash
 styles/style-guide.md
 40:71  error  Did you really mean             Vale.Spelling
               'inclusivity'?

✖ 1 error, 0 warnings and 0 suggestions in 1 file.
```

To lint all documents, run `yarn lint`.

## Autogenerated content

### Score example hub

This site uses content from external Git repositories to create and continuously update the "Score example hub" pages. The external repos are pulled in to the `/gen/external-content` folder.

The commands for the initial integration of the repos are:

```bash
git remote add -f -t main --no-tags examples https://github.com/score-spec/examples.git
git remote add -f -t main --no-tags community-provisioners https://github.com/score-spec/community-provisioners.git
git remote add -f -t main --no-tags score-compose https://github.com/score-spec/score-compose.git
git remote add -f -t main --no-tags score-k8s https://github.com/score-spec/score-k8s.git
git remote add -f -t main --no-tags patch-templates https://github.com/score-spec/community-patchers.git
git read-tree --prefix=gen/external-content/score/specification -u examples/main:specification
git read-tree --prefix=gen/external-content/resource-provisioners/default/score-compose -u score-compose/main:internal/command
git read-tree --prefix=gen/external-content/score/resources/default-provisioners -u examples/main:resources
git read-tree --prefix=gen/external-content/score/resources/community-provisioners -u community-provisioners/main
git read-tree --prefix=gen/external-content/resource-provisioners/default/score-k8s -u score-k8s/main:internal/provisioners/default
git read-tree --prefix=gen/external-content/resource-provisioners/community -u community-provisioners/main
git read-tree --prefix=gen/external-content/patch-templates -u patch-templates/main
git add gen/external-content
git commit -s -S -m "Integrating external content"
```

These commands will not have to be repeated unless re-creating the repo integration, or moving the source location. In that case, remove the `remote`, delete the local contents, repeat these commands targeting the new location, and update the generation scripts.

To generate the example hub pages based on the external content, execute this command:

```bash
yarn gen-example-pages
```

### Pulling new content

To pull the current content from the remote example library repo, execute this command:

```bash
yarn gen-get-external-content
```

Refer to the [package.json`](./package.json) to see the actual implementation of this command.

## Troubleshooting documentation site builds

This section covers common build issues with Hugo.

### Failed to resolve output format `print`

When building the server, you may receive the following error message.

```bash
Error: from config: failed to resolve output format "print" from site config
error Command failed with exit code 255.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
```

To resolve this issue, delete the temporary Hugo cache directory. By default, [`-cacheDir`](https://gohugo.io/commands/hugo_server/) is stored at `$TMPDIR/hugo_cache`.

```bash
rm -rf $TMPDIR/hugo_cache
```



### `package-lock.json` locked files

When running `yarn`, you may receive the following error message.

```bash
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
```

To resolve this issue, delete the `package-lock.json` file.

```bash
rm package-lock.json
```

You can find our documentation at [docs.score.dev](https://docs.score.dev/docs/).

### Contribute

If you have a suggestion to improve our documentation, please fork the repo and create a pull request. You can also open an issue with the tag `enhancement`.

1. Fork the Project.
2. Create your Feature Branch. `git checkout -b feature/feature-name`
3. Commit your Changes. `git commit -s -m "Add some amazing documentation enhancement"`
4. Push to the Branch. `git push origin feature/feature-name`
5. Open a Pull Request.

Read [CONTRIBUTING](CONTRIBUTING.md) for more information.

### Roadmap

See [Roadmap](roadmap.md). You can [submit an idea](https://github.com/score-spec/spec/issues/new) anytime.

### License

[](https://opensource.org/licenses/Apache-2.0)

### Code of conduct

[](CODE_OF_CONDUCT.md)

---

## File: content/en/docs/community/_index.md

---
title: "Community"
linkTitle: "Community"
weight: 10
Victor_Hugo: "true"
Focus_Keyword: "Join the Score community"
url: /docs/community
aliases:
- /docs/contribute
- /docs/talks
- /docs/presentations
- /docs/cncf
- /docs/samples
- /docs/examples
---

## Join the Score community

Score is open-source and a [Cloud Native Computing Foundation (CNCF) Sandbox project](https://www.cncf.io/projects/score/)!

Connect with fellow Score developers on our [Slack](https://cloud-native.slack.com/archives/C07DN0D1UCW) channel on the CNCF Slack ([slack.cncf.io](https://slack.cncf.io/)) or start find your way to [contribute to Score](https://github.com/score-spec/spec/blob/main/CONTRIBUTING.md)!

Got something to say or ask about Score? [We're all ears](https://github.com/score-spec/spec/discussions)! We’d love to discuss your ideas on where the project should go next or how we can improve.

We host [regular community meetings](https://github.com/score-spec/spec?tab=readme-ov-file#-get-in-touch) to discuss updates, share ideas, and collaborate.

## Watch talks about Score

- [KubeCon IN 2026 - The Death of the YAML-Engineer: Engineering "Invisible" Platforms With Crossplane and Score](https://sched.co/2IW4r) [[video](https://youtu.be/JEWSboHLuQc)]
- [Open Source Summit NA 2026 - GitOps Gone Wild: Hardening Delivery Pipelines for the AI Era](https://sched.co/2JQuJ) [[video](https://youtu.be/hFVKJBTc7o4?list=PLbzoR-pLrL6p2URzlq8xlNtBhPspd2xpi)]
- [Open Source Summit NA 2026 - From Apps To Infrastructure: A Cloud Native First Approach](https://sched.co/2JQws) [[video](https://youtu.be/SXBUv_I_Bfc?list=PLbzoR-pLrL6p2URzlq8xlNtBhPspd2xpi)]
- [KubeCon EU 2026 - Unifying Inner & Outer Loops To Bridge the Gaps Between Devs & Ops With Microcks + Score](https://sched.co/2CVxb) [[video](https://youtu.be/Y_jfBWbBTZQ?list=PLj6h78yzYM2MXCOWSN9CqqID6OOvF7wxL)]
- [Cloud Native Rejekts NA 2025 - Make your Developer's Pains go Away, with the Right Level of Abstraction for your Platform](https://youtu.be/CLCK2lBpWa8)
- [LF Live Webinar: From CI to Kubernetes Catalog: A Practical Guide to vCluster and GitOps](https://youtu.be/U4AgmEo3oV8)
- [KubeCon EU 2025 - Score Lightning Talk](https://sched.co/1tcwp) [[video](https://youtu.be/Nq_PgPKZHsc?list=PLj6h78yzYM2MP0QhYFK8HOb8UqgbIkLMc)]
- [KubeCon EU 2025 - Platform Engineering Loves Security: Shift Down To Your Platform, Not Left To Your Developers!](https://sched.co/1txGE) [[video](https://youtu.be/Es3DBj2UgIE?list=PLj6h78yzYM2MP0QhYFK8HOb8UqgbIkLMc)]
- [KubeCon EU 2025 - Dapr + Score: Mixing the Perfect Cocktail for an Enhanced Developer Experience](https://sched.co/1txGi) [[video](https://youtu.be/-fGztPUuD8k?list=PLj6h78yzYM2MP0QhYFK8HOb8UqgbIkLMc)]
- [You Choose!, Ch. 05, Ep. 05 - Specialized Templating - Feat. Porter, Werf, Radius, Score, PipeCD](https://youtu.be/TEZVeWsirsw)
- [Cloud Native Rejekts NA 2024 - You Can Score It! Shift Down to the Platform. Do Not Shift Left to the Developers](https://youtu.be/qdk5mLEnrNo)
- [ChatLoopBackOff - Episode 23 (Score)](https://www.youtube.com/watch?v=BRiZ0t6MYNo&list=PLj6h78yzYM2PnyOsrsCbR_kqjCKfPObHK&index=22)
- [Open at Microsoft - Improve the Developers Experience from your Platform with Score](https://learn.microsoft.com/en-us/shows/open-at-microsoft/improve-the-developers-experience-from-your-platform-with-score)
- [PlatformCon 2024 - Dapr + Score: Crafting and improving your developers experience](https://platformcon.com/talks/dapr-score-crafting-and-improving-your-developers-experience)
- [PlatformCon 2024 - Bridging the gap between local and remote environments in your platform](https://platformcon.com/talks/bridging-the-gap-between-local-and-remote-environments-in-your-platform)
- [CNCF WG Platforms with Score](https://www.youtube.com/watch?v=P6otOxdOKDk&t=1260s)
- [Dapr Community Call - Dapr and Score](https://www.youtube.com/watch?v=4gT0Y6QxinU&t=141s)
- [InfraCloud - Deep Dive into Workload Specification with Score](https://www.infracloud.io/webinars/deep-dive-into-workload-specification-with-score/)

## Read external blog posts about Score

- [Anatomy of a score.yaml: How Resolution Actually Works](https://rootcause.hashnode.dev/anatomy-of-a-score-yaml-how-resolution-actually-works)
- [Score + Docker Compose to deploy your local LLM models](https://medium.com/google-cloud/score-docker-compose-to-deploy-your-local-llm-models-10aff89686ce)
- [Unifying the Inner & Outer Loops to Bridge the Gaps between Devs & Ops with Containers + Microcks + Score](https://itnext.io/unifying-inner-outer-loops-to-bridge-the-gaps-between-devs-ops-with-containers-microcks-d28603342f4b)
- [Generate your Backstage software catalog files with Score](https://medium.com/@mabenoit/generate-your-backstage-software-catalog-files-with-score-b62aa33e8ecc)
- [Deploy Backstage with Score](https://medium.com/@mabenoit/deploy-backstage-with-score-45bb2d7c2d90)
- [Stop Building Platforms Nobody Uses: Pick the Right Kubernetes Abstraction with GitOps](https://itnext.io/stop-building-platforms-nobody-uses-pick-the-right-kubernetes-abstraction-with-gitops-64681357690f)
- [From CI to Kubernetes Catalog: Building a Composable Platform with GitOps and vCluster](https://itnext.io/from-ci-to-kubernetes-catalog-building-a-composable-platform-with-gitops-and-vcluster-7e1decaa81da)
- [Exploring Cloud Native projects in CNCF Sandbox. Part 3: 14 arrivals of 2024 H1](https://blog.palark.com/cncf-sandbox-2024-h1/)
- [Descomplicando o Score (CNCF)](https://www.linkedin.com/pulse/descomplicando-o-score-cncf-clecio-antao-nyt3f/)
- [Who’s Really Responsible for an Internal Developer Platform?](https://itnext.io/whos-really-responsible-for-an-internal-developer-platform-5dce5f2a0401)
- [From Docker Compose to Score: A Platform Engineering Guide](https://waynegoosen.com/post/platform-engineering-transition-docker-compose-to-score-specification/)
- [What if the `Azure-Samples/aks-store-demo` was using Score?](https://itnext.io/what-if-the-azure-samples-aks-store-demo-was-using-score-655c55f1c3dd)
- [Score 容器化服务编排的抽象层](https://george.betterde.com/cn/devops/20240801/)
- [Score: New CNCF Sandbox Tool for Infrastructure-Centric Dev](https://thenewstack.io/score-new-cncf-sandbox-tool-for-infrastructure-centric-dev/)
- [Dapr with Score and Humanitec — Improving the Developer Experience of your Platform, on steroids!](https://medium.com/@mabenoit/dapr-with-score-and-humanitec-developer-experience-with-your-platform-on-steroids-a848f2de0a5a)
- [Mastering Workload Specifications: Finding the Right Fit for Your Developers](https://www.infracloud.io/blogs/mastering-workload-specifications/)

## Leverage example projects using Score

- [`mathieu-benoit/score-kro-demo`](https://github.com/mathieu-benoit/score-kro-demo)
- [`mathieu-benoit/deploy-backstage-with-score`](https://github.com/mathieu-benoit/deploy-backstage-with-score)
- [`la-cc/score-k8s-webapp`](https://github.com/la-cc/score-k8s-webapp)
- [`mathieu-benoit/nginx-score-demo`](https://github.com/mathieu-benoit/nginx-score-demo)
- [`kendallroden/kubecon-dapr-score-demo`](https://github.com/kendallroden/kubecon-dapr-score-demo)
- [`score-spec/sample-score-app`](https://github.com/score-spec/sample-score-app)
- [`score-spec/sample-app-gif`](https://github.com/score-spec/sample-app-gif)
- [`Humanitec-DemoOrg/onlineboutique-demo`](https://github.com/Humanitec-DemoOrg/onlineboutique-demo)
- [`Humanitec-DemoOrg/aks-store-demo`](https://github.com/Humanitec-DemoOrg/aks-store-demo)
- [`mathieu-benoit/dapr-score`](https://github.com/mathieu-benoit/dapr-score-humanitec)

---

## File: content/en/docs/examples/included/backstage-score-compose.md

---
title: "Backstage"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-compose/installation) to install the latest version of `score-compose`.

## `init`

Initialize your current `score-compose` workspace, run the following command in your terminal:

```bash
score-compose init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dns/score-compose/10-dns-with-url.provisioners.yaml
```

The `init` command will create the `.score-compose` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-compose/resources-provisioners/" >}}) available. We are also importing one external file to support the `dns` dependencies: [`dns` provisioner](https://docs.score.dev/examples/resource-provisioners/community/dns/score-compose/template/dns-with-url/).

You can see the resource provisioners available by running this command:

```bash
score-compose provisioners list
```

The Score file example illustrated uses three resource types: `postgres-instance`, `dns` and `route`.

```none
+-------------------+-------+------------------+--------------------------------+---------------------------------+
|     TYPE          | CLASS |      PARAMS      |            OUTPUTS             |          DESCRIPTION            |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| dns               | (any) |                  | host, url                      | Outputs a *.localhost domain as |
|                   |       |                  |                                | the hostname and associated URL |
|                   |       |                  |                                | in http on port 8080            |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| postgres-instance | (any) |                  | host, password, port, username | Provisions a dedicated          |
|                   |       |                  |                                | PostgreSQL instance             |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| route             | (any) | host, path, port |                                | Provisions an Ingress route on  |
|                   |       |                  |                                | a shared Nginx instance         |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
```

## `generate`

Convert the `score.yaml` file into a deployable `compose.yaml`, run the following command in your terminal:

```bash
score-compose generate score.yaml --image ghcr.io/mathieu-benoit/backstage:latest
```

The `generate` command will add the input `score.yaml` workload with a particular container image to the `.score-compose/state.yaml` state file and generate the output `compose.yaml`.

If you want to build the container image when this `compose.yaml` will be deployed, you can run this `generate` command with the `--build` parameter instead:

```bash
score-compose generate score.yaml --build 'main={"context":".","tags":["backstage:local"]}'
```

See the generated `compose.yaml` by running this command:

```bash
cat compose.yaml
```

If you make any modifications to the `score.yaml` file, run `score-compose generate score.yaml` to regenerate the output `compose.yaml`.

## `resources`

Get the information of the resources dependencies of the workload, run the following command:

```bash
score-compose resources list
```

```none
+----------------------------------------+--------------------------------+
|                  UID                   |            OUTPUTS             |
+----------------------------------------+--------------------------------+
| dns.default#backstage.dns              | host, url                      |
+----------------------------------------+--------------------------------+
| postgres-instance.default#backstage.pg | host, password, port, username |
+----------------------------------------+--------------------------------+
| route.default#backstage.route          |                                |
+----------------------------------------+--------------------------------+
```

At this stage, we can already see the value of the `dns` resource generated:

```bash
score-compose resources get-outputs dns.default#backstage.dns
```

```none
{
  "host": "dnsjdtv57.localhost",
  "url": "http://dnsjdtv57.localhost:8080"
}
```

Same for the `postgres-instance` resource:

```bash
score-compose resources get-outputs postgres-instance.default#backstage.pg
```

```none
{
  "host": "pg-OuoTNo",
  "password": "REDACTED",
  "port": 5432,
  "username": "REDACTED"
}
```

## `docker compose`

Run `docker compose up` to execute the generated `compose.yaml` file:

```bash
docker compose up -d
```

```none
[+] Running 4/4
 ✔ Container deploy-backstage-with-score-pg-OuoTNo-1            Healthy 
 ✔ Container deploy-backstage-with-score-wait-for-resources-1   Exited 
 ✔ Container deploy-backstage-with-score-routing-6uaxax-1       Started 
 ✔ Container deploy-backstage-with-score-backstage-backstage-1  Started
```

## `docker ps`

See the running containers:

```bash
docker ps
```

```none
CONTAINER ID   IMAGE                                     COMMAND                  CREATED       STATUS                                  PORTS                                              NAMES
9b2ff62333ff   ghcr.io/mathieu-benoit/backstage:latest   "node packages/backe…"   5 hours ago   Up 5 hours                                                                                 deploy-backstage-with-score-backstage-backstage-1
4b1203acbf41   mirror.gcr.io/postgres:17-alpine          "docker-entrypoint.s…"   5 hours ago   Up 5 hours (healthy)                    5432/tcp                                           deploy-backstage-with-score-pg-mwgmNx-1
716b626ad841   mirror.gcr.io/nginx:1-alpine              "/docker-entrypoint.…"   5 hours ago   Up 5 hours                              0.0.0.0:8080->80/tcp, [::]:8080->80/tcp            deploy-backstage-with-score-routing-idouo7-1
```

## `curl localhost:8080`

Test the running container, run the following command:

```bash
curl localhost:8080 -H "Host: dnsjdtv57.localhost"
```

```none
...
<title>Scaffolded Backstage App</title>
...
```

Congrats! You’ve successfully deploy, with the `score-compose` implementation, a sample containerized Backstage workload talking to PostgreSQL and exposed via a DNS. You provisioned them through Docker, without writing the Docker Compose file by yourself.

---

## File: content/en/docs/examples/included/backstage-score-k8s.md

---
title: "Backstage"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-k8s/installation) to install the latest version of `score-k8s`.

## `init`

Initialize your current `score-k8s` workspace, run the following command in your terminal:

```bash
score-k8s init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dns/score-k8s/10-dns-with-url.provisioners.yaml
```

The `init` command will create the `.score-k8s` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-k8s/resources-provisioners/" >}}) available. We are also importing one external file to support the `dns` dependencies: [`dns` provisioner](https://docs.score.dev/examples/resource-provisioners/community/dns/score-k8s/template/dns-with-url/).

You can see the resource provisioners available by running this command:

```bash
score-k8s provisioners list
```

The Score file example illustrated uses three resource types: `postgres-instance`, `dns` and `route`.

```none
+-------------------+-------+------------------+--------------------------------+---------------------------------+
|     TYPE          | CLASS |      PARAMS      |            OUTPUTS             |          DESCRIPTION            |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| dns               | (any) |                  | host, url                      | Outputs a *.localhost domain as |
|                   |       |                  |                                | the hostname and associated URL |
|                   |       |                  |                                | in http on port 80              |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| postgres-instance | (any) |                  | host, password, port, username | Provisions a dedicated          |
|                   |       |                  |                                | PostgreSQL instance             |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| route             | (any) | host, path, port |                                | Provisions an Ingress route on  |
|                   |       |                  |                                | a shared Nginx instance         |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
```

## `generate`

Convert the `score.yaml` file into a deployable `manifests.yaml`, run the following command in your terminal:

```bash
score-k8s generate score.yaml --image ghcr.io/mathieu-benoit/backstage:latest
```

The `generate` command will add the input `score.yaml` workload with a particular container image to the `.score-k8s/state.yaml` state file and generate the output `manifests.yaml`.

See the generated `manifests.yaml` by running this command:

```bash
cat manifests.yaml
```

If you make any modifications to the `score.yaml` file, run `score-k8s generate score.yaml` to regenerate the output `manifests.yaml`.

## `resources`

Get the information of the resources dependencies of the workload, run the following command:

```bash
score-k8s resources list
```

```none
+----------------------------------------+--------------------------------+
|              UID                       |            OUTPUTS             |
+----------------------------------------+--------------------------------+
| dns.default#backstage.dns              | host, url                      |
+----------------------------------------+--------------------------------+
| postgres-instance.default#backstage.pg | host, password, port, username |
+----------------------------------------+--------------------------------+
| route.default#backstage.route          |                                |
+----------------------------------------+--------------------------------+
```

At this stage, we can already see the value of the `dns` resource generated:

```bash
score-k8s resources get-outputs dns.default#backstage.dns
```

```none
{
  "host": "dnsnocrke.localhost",
  "url": "http://dnsnocrke.localhost:80"
}
```

Same for the `postgres-instance` resource:

```bash
score-k8s resources get-outputs postgres-instance.default#backstage.pg
```

```none
{
  "host": "pg-backstage-d7058793",
  "password": "REDACTED",
  "port": 5432,
  "username": "REDACTED"
}
```

## `kubectl apply`

_Here you will need to have access to a Kubernetes cluster to execute the following commands. You can follow [these instructions](/docs/how-to/score-k8s/kind-cluster/) if you want to set up a Kind cluster._

Run `kubectl apply` to execute the generated `manifests.yaml` file:

```bash
kubectl apply -f manifests.yaml
```

```none
secret/pg-backstage-d7058793 created
statefulset.apps/pg-backstage-d7058793 created
service/pg-backstage-d7058793 created
httproute.gateway.networking.k8s.io/route-backstage-76d19d47 created
service/backstage created
deployment.apps/backstage created
```

## `kubectl get all`

See the running containers:

```bash
kubectl get all,httproute
```

```none
NAME                             READY   STATUS    RESTARTS   AGE
pod/backstage-7667f68bf9-vnlw9   1/1     Running   0          37s
pod/pg-backstage-d7058793-0      1/1     Running   0          37s

NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/backstage               ClusterIP   10.96.146.148   <none>        7007/TCP   37s
service/pg-backstage-d7058793   ClusterIP   10.96.21.104    <none>        5432/TCP   37s

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/backstage   1/1     1            1           37s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/backstage-7667f68bf9   1         1         1       37s

NAME                                     READY   AGE
statefulset.apps/pg-backstage-d7058793   1/1     37s

NAME                                                           HOSTNAMES                 AGE
httproute.gateway.networking.k8s.io/route-backstage-76d19d47   ["dnsnocrke.localhost"]   37s
```

## `curl localhost`

Test the running container, run the following command:

```bash
curl localhost -H "Host: dnsnocrke.localhost"
```

```none
...
<title>Scaffolded Backstage App</title>
...
```

Congrats! You’ve successfully deploy, with the `score-k8s` implementation, a sample containerized Backstage workload talking to PostgreSQL and exposed via a DNS. You provisioned them through `kubectl`, without writing the Kubernetes manifests file by yourself.

---

## File: content/en/docs/examples/included/dapr-score-compose.md

---
title: "Dapr"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-compose/installation) to install the latest version of `score-compose`.

## `init`

Initialize your current `score-compose` workspace, run the following command in your terminal:

```bash
score-compose init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dapr-state-store/score-compose/10-redis-dapr-state-store.provisioners.yaml \
    --patch-templates https://raw.githubusercontent.com/score-spec/community-patchers/refs/heads/main/score-compose/dapr.tpl
```

The `init` command will create the `.score-compose` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-compose/resources-provisioners/" >}}) available. We are also importing one external file to seamlessly generate a Dapr StateStore `Component` pointing to a Redis database: [`dapr-state-store` provisioner](https://docs.score.dev/examples/resource-provisioners/community/dapr-state-store/score-compose/template/redis-dapr-state-store/).

You can see the resource provisioners available by running this command:

```bash
score-compose provisioners list
```

The Score file example illustrated uses three resource types: `dapr-state-store`, `dns` and `route`.

```none
+-------------------+-------+------------------+--------------------------------+---------------------------------+
|     TYPE          | CLASS |      PARAMS      |            OUTPUTS             |          DESCRIPTION            |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| dapr-state-store  | (any) |                  | name                           | Generates a Dapr StateStore     |
|                   |       |                  |                                | Component pointing to a Redis   |
|                   |       |                  |                                | Service.                        |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| dns               | (any) |                  | host                           | Outputs a *.localhost domain    |
|                   |       |                  |                                | as the hostname                 |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
| route             | (any) | host, path, port |                                | Provisions an Ingress route on  |
|                   |       |                  |                                | a shared Nginx instance         |
+-------------------+-------+------------------+--------------------------------+---------------------------------+
```

By using the [`--patch-templates`](/docs/score-implementation/score-compose/patch-templates/) (in this case: [`dapr.tpl`](https://github.com/score-spec/community-patchers/blob/main/score-compose/dapr.tpl)) we are seamlessly generating the Dapr `scheduler` and `placement` containers in addition to a Dapr `Sidecar` container for any Workload.

## `generate`

Convert the `score.yaml` file into a deployable `compose.yaml`, run the following command in your terminal:

```bash
score-compose generate score.yaml --image ghcr.io/dapr/samples/hello-k8s-node:latest
```

The `generate` command will add the input `score.yaml` workload with a particular container image to the `.score-compose/state.yaml` state file and generate the output `compose.yaml`.

If you want to build the container image when this `compose.yaml` will be deployed, you can run this `generate` command with the `--build` parameter instead:

```bash
score-compose generate score.yaml --build 'main={"context":".","tags":["hello-dapr-node:local"]}'
```

See the generated `compose.yaml` by running this command:

```bash
cat compose.yaml
```

If you make any modifications to the `score.yaml` file, run `score-compose generate score.yaml` to regenerate the output `compose.yaml`.

## `resources`

Get the information of the resources dependencies of the workload, run the following command:

```bash
score-compose resources list
```

```none
+----------------------------------------------+---------+
|                     UID                      | OUTPUTS |
+----------------------------------------------+---------+
| dapr-state-store.default#nodeapp.state-store | name    |
+----------------------------------------------+---------+
| dns.default#nodeapp.dns                      | host    |
+----------------------------------------------+---------+
| route.default#nodeapp.route                  |         |
+----------------------------------------------+---------+
```

At this stage, we can already see the value of the `dns` resource generated:

```bash
score-compose resources get-outputs dns.default#nodeapp.dns --format '{{ .host }}'
```

```none
dnsbcsqnd.localhost
```

Same for the `dapr-state-store` resource:

```bash
score-compose resources get-outputs dapr-state-store.default#nodeapp.state-store
```

```none
{
  "name": "redis-PANgkO"
}
```

## `docker compose`

Run `docker compose up` to execute the generated `compose.yaml` file:

```bash
docker compose up -d
```

```none
[+] Running 7/7
 ✔ Container dapr-redis-PANgkO-1             Started
 ✔ Container dapr-placement-1                Started
 ✔ Container dapr-scheduler-1                Started
 ✔ Container dapr-routing-aPCJB9-1           Started
 ✔ Container dapr-wait-for-resources-1       Exited
 ✔ Container dapr-nodeapp-nodeapp-1          Started
 ✔ Container dapr-nodeapp-nodeapp-sidecar-1  Started
```

## `docker ps`

See the running containers:

```bash
docker ps
```

```none
CONTAINER ID   IMAGE                                        COMMAND                  CREATED              STATUS              PORTS                                              NAMES
3c7dfd658b1a   mirror.gcr.io/redis:7-alpine                 "redis-server /usr/l…"   About a minute ago   Up About a minute   6379/tcp                                           dapr-redis-PANgkO-1
85c836ae19d2   ghcr.io/dapr/daprd:latest                    "./daprd --app-id=no…"   8 hours ago          Up 59 seconds                                                          dapr-nodeapp-nodeapp-sidecar-1
1f7affe5d910   ghcr.io/dapr/samples/hello-k8s-node:latest   "docker-entrypoint.s…"   8 hours ago          Up About a minute   3000/tcp                                           dapr-nodeapp-nodeapp-1
e7e1ae181a28   mirror.gcr.io/nginx:1-alpine                 "/docker-entrypoint.…"   8 hours ago          Up About a minute   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp            dapr-routing-aPCJB9-1
f2983452962a   ghcr.io/dapr/scheduler:latest                "./scheduler --port …"   8 hours ago          Up About a minute   0.0.0.0:50007->50007/tcp, :::50007->50007/tcp      dapr-scheduler-1
913af9a5c8fc   ghcr.io/dapr/placement:latest                "./placement --port …"   8 hours ago          Up About a minute   0.0.0.0:50006->50006/tcp, :::50006->50006/tcp      dapr-placement-1
```

## `curl localhost:8080`

Test the running container, run the following command:

```bash
curl localhost:8080 -H "Host: dnsbcsqnd.localhost"
```

This will get the expected error showing that the container is successfully running:

```none
Cannot GET /
```

You can check the logs of the running container:

```none
Node App listening on port 3000!
```

Congrats! You’ve successfully deploy, with the `score-compose` implementation, a sample containerized NodeJS workload talking to a Dapr StateStore (Redis) and exposed via a DNS. You provisioned them through Docker, without writing the Docker Compose file by yourself.

---

## File: content/en/docs/examples/included/dapr-score-k8s.md

---
title: "Dapr"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-k8s/installation) to install the latest version of `score-k8s`.

## `init`

Initialize your current `score-k8s` workspace, run the following command in your terminal:

```bash
score-k8s init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dapr-state-store/score-k8s/10-redis-dapr-state-store.provisioners.yaml
```

The `init` command will create the `.score-k8s` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-k8s/resources-provisioners/" >}}) available. We are also importing one external file to generate a Dapr StateStore `Component` pointing to a Redis database: [`dapr-state-store` provisioner](https://docs.score.dev/examples/resource-provisioners/community/dapr-state-store/score-k8s/template/redis/).

You can see the resource provisioners available by running this command:

```bash
score-k8s provisioners list
```

The Score file example illustrated uses three resource types: `dapr-state-store`, `dns` and `route`.

```none
+------------------+-------+------------------+--------------------------------+---------------------------------+
|     TYPE         | CLASS |      PARAMS      |            OUTPUTS             |          DESCRIPTION            |
+------------------+-------+------------------+--------------------------------+---------------------------------+
| dapr-state-store | (any) |                  | name                           | Generates a Dapr StateStore     |
|                  |       |                  |                                | Component pointing to a Redis   |
|                  |       |                  |                                | StatefulSet.                    |
+------------------+-------+------------------+--------------------------------+---------------------------------+
| dns              | (any) |                  | host                           | Outputs a *.localhost domain    |
|                  |       |                  |                                | as the hostname                 |
+------------------+-------+------------------+--------------------------------+---------------------------------+
| route            | (any) | host, path, port |                                | Provisions an Ingress route on  |
|                  |       |                  |                                | a shared Nginx instance         |
+------------------+-------+------------------+--------------------------------+---------------------------------+
```

## `generate`

Convert the `score.yaml` file into a deployable `manifests.yaml`, run the following command in your terminal:

```bash
score-k8s generate score.yaml --image ghcr.io/dapr/samples/hello-k8s-node:latest
```

The `generate` command will add the input `score.yaml` workload with a particular container image to the `.score-k8s/state.yaml` state file and generate the output `manifests.yaml`.

See the generated `manifests.yaml` by running this command:

```bash
cat manifests.yaml
```

If you make any modifications to the `score.yaml` file, run `score-k8s generate score.yaml` to regenerate the output `manifests.yaml`.

## `resources`

Get the information of the resources dependencies of the workload, run the following command:

```bash
score-k8s resources list
```

```none
+----------------------------------------------+---------+
|                     UID                      | OUTPUTS |
+----------------------------------------------+---------+
| dapr-state-store.default#nodeapp.state-store | name    |
+----------------------------------------------+---------+
| dns.default#nodeapp.dns                      | host    |
+----------------------------------------------+---------+
| route.default#nodeapp.route                  |         |
+----------------------------------------------+---------+
```

At this stage, we can already see the value of the `dns` resource generated:

```bash
score-k8s resources get-outputs dns.default#nodeapp.dns --format '{{ .host }}'
```

```none
dnsutripw.localhost
```

Same for the `dapr-state-store` resource:

```bash
score-k8s resources get-outputs dapr-state-store.default#nodeapp.state-store
```

```none
{
  "name": "redis-nodeapp-58f89990"
}
```

## `kubectl apply`

_Here you will need to have access to a Kubernetes cluster to execute the following commands. You can follow [these instructions](/docs/how-to/score-k8s/kind-cluster/) if you want to set up a Kind cluster. Your Kubernetes cluster should also have [Dapr installed](https://docs.dapr.io/operations/hosting/kubernetes/kubernetes-overview/) in it._

Run `kubectl apply` to execute the generated `manifests.yaml` file:

```bash
kubectl apply -f manifests.yaml
```

```none
secret/redis-nodeapp-58f89990 created
statefulset.apps/redis-nodeapp-58f89990 created
service/redis-nodeapp-58f89990 created
component.dapr.io/redis-nodeapp-58f89990 created
httproute.gateway.networking.k8s.io/route-nodeapp-3f3a9362 created
service/nodeapp created
deployment.apps/nodeapp created
```

## `kubectl get all`

See the running containers:

```bash
kubectl get all
```

```none
NAME                           READY   STATUS    RESTARTS   AGE
pod/nodeapp-859d5458f6-75wjj   1/1     Running   0          3m43s
pod/redis-nodeapp-58f89990-0   1/1     Running   0          3m43s

NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
service/nodeapp                  ClusterIP   10.96.138.145   <none>        3000/TCP                              3m43s
service/nodeapp-dapr             ClusterIP   None            <none>        80/TCP,50001/TCP,50002/TCP,9090/TCP   51s
service/redis-nodeapp-58f89990   ClusterIP   10.96.71.72     <none>        6379/TCP                              3m43s

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nodeapp   1/1     1            1           3m43s

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/nodeapp-859d5458f6   1         1         1       3m43s

NAME                                      READY   AGE
statefulset.apps/redis-nodeapp-58f89990   1/1     3m43s
```

## `curl localhost`

Test the running container, run the following command:

```bash
curl localhost -H "Host: dnsutripw.localhost"
```

This will get the expected error showing that the container is successfully running:

```none
Cannot GET /
```

You can check the logs of the running container:

```none
Node App listening on port 3000!
```

Congrats! You’ve successfully deploy, with the `score-k8s` implementation, a sample containerized NodeJS workload talking to a Dapr StateStore (Redis) and exposed via a DNS. You provisioned them through `kubectl`, without writing the Kubernetes manifests file by yourself.

---

## File: content/en/docs/examples/included/frontend-and-backend-score-compose.md

---
title: "Frontend & Backend"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-compose/installation) to install the latest version of `score-compose`.

## `init`

Initialize your current `score-compose` workspace, run the following command in your terminal:

```bash
score-compose init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/service/score-compose/10-service.provisioners.yaml \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dns/score-compose/10-dns-with-url.provisioners.yaml
```

The `init` command will create the `.score-compose` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-compose/resources-provisioners/" >}}) available. We are also importing two external files to support the `dns` dependencies: [`dns` provisioner](https://docs.score.dev/examples/resource-provisioners/community/dns/score-compose/template/dns-with-route/) and `service` dependencies: [`service` provisioner](https://docs.score.dev/examples/resource-provisioners/community/service/score-compose/template/static-service/).

You can see the resource provisioners available by running this command:

```bash
score-compose provisioners list
```

The Score file example illustrated uses three resource types: `postgres-instance`, `dns` and `route`.

```
/* Detailed source-code truncated for AI context efficiency. */
```

## `generate`

Convert the `score-frontend.yaml` and `score-backend.yaml` files into a deployable `compose.yaml`, run the following command in your terminal:

```bash
score-compose generate score-backend.yaml \
    --image ghcr.io/mathieu-benoit/backstage-backend:latest

score-compose generate score-frontend.yaml \
    --image ghcr.io/mathieu-benoit/backstage-frontend:latest
```

The `generate` command will add the input `score-frontend.yaml` and `score-backend.yaml` workloads with a particular container image to the `.score-compose/state.yaml` state file and generate the output `compose.yaml`.

If you want to build the container image when this `compose.yaml` will be deployed, you can run this `generate` command with the `--build` parameter instead:

```bash
score-compose generate score-backend.yaml --build 'main={"context":".","tags":["backend:local"]}'
```

See the generated `compose.yaml` by running this command:

```bash
cat compose.yaml
```

If you make any modifications to the `score-frontend.yaml` or `score-backend.yaml` files, run `score-compose generate score.yaml` to regenerate the output `compose.yaml`.

## `resources`

Get the information of the resources dependencies of the workload, run the following command:

```bash
score-compose resources list
```

```none
+--------------------------------------+--------------------------------+
|                 UID                  |            OUTPUTS             |
+--------------------------------------+--------------------------------+
| dns.default#dns                      | host, url                      |
+--------------------------------------+--------------------------------+
| postgres-instance.default#backend.pg | host, password, port, username |
+--------------------------------------+--------------------------------+
| service.default#frontend.backend     | name                           |
+--------------------------------------+--------------------------------+
| route.default#backend.route          |                                |
+--------------------------------------+--------------------------------+
| route.default#frontend.route         |                                |
+--------------------------------------+--------------------------------+
```

At this stage, we can already see the value of the `dns` resource generated:

```bash
score-compose resources get-outputs dns.default#dns
```

```none
{
  "host": "dnsjdtv57.localhost",
  "url": "http://dnsjdtv57.localhost:8080"
}
```

Same for the `postgres-instance` resource:

```bash
score-compose resources get-outputs postgres-instance.default#backend.pg
```

```none
{
  "host": "pg-OuoTNo",
  "password": "REDACTED",
  "port": 5432,
  "username": "REDACTED"
}
```

## `docker compose`

Run `docker compose up` to execute the generated `compose.yaml` file:

```bash
docker compose up -d
```

```none
[+] Running 5/5
 ✔ Container deploy-backstage-with-score-routing-5QD6z8-1      Running
 ✔ Container deploy-backstage-with-score-pg-glZvLw-1           Healthy
 ✔ Container deploy-backstage-with-score-wait-for-resources-1  Exited
 ✔ Container deploy-backstage-with-score-backend-backend-1     Running
 ✔ Container deploy-backstage-with-score-frontend-frontend-1   Running
```

## `docker ps`

See the running containers:

```bash
docker ps
```

```none
CONTAINER ID   IMAGE                                              COMMAND                  CREATED          STATUS                   PORTS                                                 NAMES
1712a2002838   ghcr.io/mathieu-benoit/backstage-frontend:latest   "/docker-entrypoint.…"   3 minutes ago    Up 2 minutes             80/tcp                                                deploy-backstage-with-score-frontend-frontend-1
6bf734ab9179   ghcr.io/mathieu-benoit/backstage-backend:latest    "node packages/backe…"   3 minutes ago    Up 2 minutes                                                                   -backend-backend-1
9a126ed0456c   mirror.gcr.io/nginx:1-alpine                       "/docker-entrypoint.…"   3 minutes ago    Up 2 minutes             0.0.0.0:8080->80/tcp, [::]:8080->80/tcp               deploy-backstage-with-score-routing-5QD6z8-1
5ec1732b6695   mirror.gcr.io/postgres:17-alpine                   "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes (healthy)   5432/tcp                                              -pg-glZvLw-1
```

## `curl localhost:8080`

Test the running container, run the following command:

```bash
curl localhost:8080 -H "Host: dnsjdtv57.localhost"
```

```none
...
<title>Scaffolded Backstage App</title>
...
```

Congrats! You’ve successfully deploy, with the `score-compose` implementation, a containerized Frontend application talking to a containerized Backend application exposed via a DNS. You provisioned them through Docker, without writing the Docker Compose file by yourself.

---

## File: content/en/docs/examples/included/frontend-and-backend-score-k8s.md

---
title: "Frontend & Backend"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-k8s/installation) to install the latest version of `score-k8s`.

## `init`

Initialize your current `score-k8s` workspace, run the following command in your terminal:

```bash
score-k8s init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/service/score-k8s/10-service.provisioners.yaml \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/dns/score-k8s/10-dns-with-url.provisioners.yaml
```

The `init` command will create the `.score-k8s` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-k8s/resources-provisioners/" >}}) available. We are also importing two external files to support the `dns` dependencies: [`dns` provisioner](https://docs.score.dev/examples/resource-provisioners/community/dns/score-k8s/template/dns-with-url/) and `service` dependencies: [`service` provisioner](https://docs.score.dev/examples/resource-provisioners/community/service/score-k8s/template/static-service/).

You can see the resource provisioners available by running this command:

```bash
score-k8s provisioners list
```

The Score file example illustrated uses three resource types: `postgres-instance`, `dns` and `route`.

```
/* Detailed source-code truncated for AI context efficiency. */
```

## `generate`

Convert the `score-frontend.yaml` and `score-backend.yaml` files into a deployable `manifests.yaml`, run the following command in your terminal:

```bash
score-k8s generate score-backend.yaml \
    --image ghcr.io/mathieu-benoit/backstage-backend:latest

score-k8s generate score-frontend.yaml \
    --image ghcr.io/mathieu-benoit/backstage-frontend:latest
```

The `generate` command will add the input `score-frontend.yaml` and `score-backend.yaml` workloads with a particular container image to the `.score-k8s/state.yaml` state file and generate the output `manifests.yaml`.

See the generated `manifests.yaml` by running this command:

```bash
cat manifests.yaml
```

If you make any modifications to the `score-frontend.yaml` or `score-backend.yaml` files, run `score-k8s generate score.yaml` to regenerate the output `manifests.yaml`.

## `resources`

Get the information of the resources dependencies of the workload, run the following command:

```bash
score-k8s resources list
```

```none
+--------------------------------------+--------------------------------+
|                 UID                  |            OUTPUTS             |
+--------------------------------------+--------------------------------+
| dns.default#dns                      | host, url                      |
+--------------------------------------+--------------------------------+
| postgres-instance.default#backend.pg | host, password, port, username |
+--------------------------------------+--------------------------------+
| service.default#frontend.backend     | name                           |
+--------------------------------------+--------------------------------+
| route.default#backend.route          |                                |
+--------------------------------------+--------------------------------+
| route.default#frontend.route         |                                |
+--------------------------------------+--------------------------------+
```

At this stage, we can already see the value of the `dns` resource generated:

```bash
score-k8s resources get-outputs dns.default#dns
```

```none
{
  "host": "dnsnocrke.localhost",
  "url": "http://dnsnocrke.localhost:80"
}
```

Same for the `postgres-instance` resource:

```bash
score-k8s resources get-outputs postgres-instance.default#backend.pg
```

```none
{
  "host": "pg-backstage-d7058793",
  "password": "REDACTED",
  "port": 5432,
  "username": "REDACTED"
}
```

## `kubectl apply`

_Here you will need to have access to a Kubernetes cluster to execute the following commands. You can follow [these instructions](/docs/how-to/score-k8s/kind-cluster/) if you want to set up a Kind cluster._

Run `kubectl apply` to execute the generated `manifests.yaml` file:

```bash
kubectl apply -f manifests.yaml
```

```none
secret/pg-backend-61f0e7c1 created
statefulset.apps/pg-backend-61f0e7c1 created
service/pg-backend-61f0e7c1 created
httproute.gateway.networking.k8s.io/route-backend-711726ce created
httproute.gateway.networking.k8s.io/route-frontend-61f9e1b8 created
service/backend created
deployment.apps/backend created
service/frontend created
deployment.apps/frontend created
```

## `kubectl get all`

See the running containers:

```bash
kubectl get all,httproute
```

```none
NAME                           READY   STATUS    RESTARTS   AGE
pod/backend-57fc5664d-4hg7l    1/1     Running   0          22s
pod/frontend-db644cf86-n9cjd   1/1     Running   0          22s
pod/pg-backend-61f0e7c1-0      1/1     Running   0          60m

NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/backend               ClusterIP   10.96.183.51   <none>        7007/TCP   60m
service/frontend              ClusterIP   10.96.90.135   <none>        3000/TCP   60m
service/pg-backend-61f0e7c1   ClusterIP   10.96.45.108   <none>        5432/TCP   60m

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/backend    1/1     1            1           60m
deployment.apps/frontend   1/1     1            1           60m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/backend-57fc5664d     1         1         1       22s
replicaset.apps/backend-64fc859b9d    0         0         0       60m
replicaset.apps/frontend-68ccb68884   0         0         0       60m
replicaset.apps/frontend-db644cf86    1         1         1       22s

NAME                                   READY   AGE
statefulset.apps/pg-backend-61f0e7c1   1/1     60m

NAME                                                          HOSTNAMES                 AGE
httproute.gateway.networking.k8s.io/route-backend-711726ce    ["dnsxmfazk.localhost"]   60m
httproute.gateway.networking.k8s.io/route-frontend-61f9e1b8   ["dnsxmfazk.localhost"]   60m
```

## `curl localhost`

Test the running container, run the following command:

```bash
curl localhost -H "Host: dnsnocrke.localhost"
```

```none
...
<title>Scaffolded Backstage App</title>
...
```

Congrats! You’ve successfully deploy, with the `score-k8s` implementation, a containerized Frontend application talking to a containerized Backend application exposed via a DNS. You provisioned them through `kubectl`, without writing the Kubernetes manifests file by yourself.

---

## File: content/en/docs/examples/included/llm-models-dmr.md

---
title: "LLM Models with Docker Model Runner"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-compose/installation) to install the latest version of `score-compose`.

{{% alert title="Prerequisites" %}}
Docker Model Runner (DMR) needs to be set up in your local environment. Follow the [DMR get started guide](https://docs.docker.com/model-runner/get-started/) to set it up.
{{% /alert %}}

## `init`

Initialize your current `score-compose` workspace with the Docker Model Runner provisioner. Run the following command in your terminal:

```bash
score-compose init --no-sample \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/llm-model/score-compose/10-dmr-llm-model.provisioners.yaml
```

The `init` command will create the `.score-compose` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-compose/resources-provisioners/" >}}) available, plus the Docker Model Runner-specific provisioner for the `llm-model` resource type.

You can see the resource provisioners available by running this command:

```bash
score-compose provisioners list
```

The Score file example illustrated uses two resource types: `llm-model` and `volume`.

```none
+---------------+-------+--------+--------------------+---------------------------------+
|     TYPE      | CLASS | PARAMS |      OUTPUTS       |          DESCRIPTION            |
+---------------+-------+--------+--------------------+---------------------------------+
| llm-model     | (any) | model  | url                | Provisions an LLM model via     |
|               |       |        |                    | Docker Model Runner             |
+---------------+-------+--------+--------------------+---------------------------------+
| volume        | (any) |        | source, type       | Creates a persistent volume     |
|               |       |        |                    | that can be mounted on a        |
|               |       |        |                    | workload.                       |
+---------------+-------+--------+--------------------+---------------------------------+
```

## `generate`

Convert the `score.yaml` file into a deployable `compose.yaml`. Run the following command in your terminal:

```bash
score-compose generate score.yaml \
    --image ghcr.io/open-webui/open-webui:main-slim \
    --publish 8080:open-webui:8080 \
    --override-property containers.open-webui.variables.WEBUI_NAME="Hello, DMR with Score Compose!" \
    --output compose.yaml
```

The `generate` command will add the input `score.yaml` workload with a particular container image to the `.score-compose/state.yaml` state file and generate the output `compose.yaml`.

The `--publish` flag exposes the Open WebUI port to the host so you can access it in your browser.

See the generated `compose.yaml` by running this command:

```bash
cat compose.yaml
```

If you make any modifications to the `score.yaml` file, run `score-compose generate score.yaml` to regenerate the output `compose.yaml`.

## `docker compose`

Run `docker compose up` to execute the generated `compose.yaml` file:

```bash
docker compose up -d --wait
```

This will pull the requested LLM models (`ai/gemma3:270M-UD-IQ2_XXS` and `ai/smollm2:135M-Q2_K`) via Docker Model Runner, and then start the Open WebUI container connected to the DMR backend.

## Verify

Check the Docker images, including the LLM model images pulled by Docker Model Runner:

```bash
docker images
```

```none
REPOSITORY             TAG                  SIZE
open-webui             main-slim            ...
ai/gemma3              270M-UD-IQ2_XXS      182MB
ai/smollm2             135M-Q2_K            56.9MB
```

See the running containers:

```bash
docker ps
```

You should see the `open-webui` container running and connected to the Docker Model Runner backend.

## Access Open WebUI

Open your browser and navigate to [http://localhost:8080](http://localhost:8080) to access the Open WebUI frontend. You can now chat with the LLM models you deployed!

Congrats! You've successfully deployed, with the `score-compose` implementation, local LLM models with Open WebUI and Docker Model Runner. You provisioned them through Docker, without writing the Docker Compose file by yourself.

---

## File: content/en/docs/examples/included/llm-models-ollama.md

---
title: "LLM Models with Ollama"
headless: true
toc_hide: true
---

To begin, follow the [installation instructions](/docs/score-implementation/score-compose/installation) to install the latest version of `score-compose`.

## `init`

Initialize your current `score-compose` workspace with the Ollama provisioner and patch template. Run the following command in your terminal:

```bash
score-compose init --no-sample \
    --patch-templates https://raw.githubusercontent.com/score-spec/community-patchers/refs/heads/main/score-compose/ollama.tpl \
    --provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/llm-model/score-compose/10-ollama-llm-model-service.provisioners.yaml
```

The `init` command will create the `.score-compose` directory with the [default resource provisioners]({{< relref "/docs/score-implementation/score-compose/resources-provisioners/" >}}) available, plus the Ollama-specific provisioner for the `llm-model` resource type.

The `--patch-templates` option adds the [`ollama.tpl`](https://github.com/score-spec/community-patchers/blob/main/score-compose/ollama.tpl) patch template which configures the Ollama service integration in the generated Docker Compose file.

You can see the resource provisioners available by running this command:

```bash
score-compose provisioners list
```

The Score file example illustrated uses two resource types: `llm-model` and `volume`.

```none
+---------------+-------+--------+--------------------+---------------------------------+
|     TYPE      | CLASS | PARAMS |      OUTPUTS       |          DESCRIPTION            |
+---------------+-------+--------+--------------------+---------------------------------+
| llm-model     | (any) | model  | url                | Provisions an LLM model via     |
|               |       |        |                    | Ollama                          |
+---------------+-------+--------+--------------------+---------------------------------+
| volume        | (any) |        | source, type       | Creates a persistent volume     |
|               |       |        |                    | that can be mounted on a        |
|               |       |        |                    | workload.                       |
+---------------+-------+--------+--------------------+---------------------------------+
```

## `generate`

Convert the `score.yaml` file into a deployable `compose.yaml`. Run the following command in your terminal:

```bash
score-compose generate score.yaml \
    --image ghcr.io/open-webui/open-webui:main-slim \
    --publish 8080:open-webui:8080 \
    --override-property containers.open-webui.variables.WEBUI_NAME="Hello, Ollama with Score Compose!" \
    --output compose.yaml
```

The `generate` command will add the input `score.yaml` workload with a particular container image to the `.score-compose/state.yaml` state file and generate the output `compose.yaml`.

The `--publish` flag exposes the Open WebUI port to the host so you can access it in your browser.

See the generated `compose.yaml` by running this command:

```bash
cat compose.yaml
```

If you make any modifications to the `score.yaml` file, run `score-compose generate score.yaml` to regenerate the output `compose.yaml`.

## `docker compose`

Run `docker compose up` to execute the generated `compose.yaml` file:

```bash
docker compose up -d --wait
```

This will pull the Ollama container image, start the Ollama service, pull the requested LLM models (`gemma3:270m` and `smollm2:135m`), and then start the Open WebUI container connected to the Ollama backend.

## Verify

Check the Docker images that were pulled:

```bash
docker images
```

```none
REPOSITORY               TAG            SIZE
ollama/ollama            latest         3.33GB
open-webui               main-slim      ...
```

Check that the LLM models were successfully pulled by Ollama:

```bash
curl localhost:11434/api/tags | jq -r .models[].name
```

```none
gemma3:270m
smollm2:135m
```

See the running containers:

```bash
docker ps
```

You should see the `open-webui` and `ollama` containers running, along with some exited "puller" containers that were used to download the models.

## Access Open WebUI

Open your browser and navigate to [http://localhost:8080](http://localhost:8080) to access the Open WebUI frontend. You can now chat with the LLM models you deployed!

Congrats! You've successfully deployed, with the `score-compose` implementation, local LLM models with Open WebUI and Ollama. You provisioned them through Docker, without writing the Docker Compose file by yourself.