Celebrating 1 year as CNCF Sandbox
🎉 Today, Score celebrates its first anniversary as CNCF Sandbox, time flies! 🎉
Wow! What a ride, nothing but fun, gratitude and great learnings!
One of our key learning is that an open source project without its contributors and its community cannot go that far.
We are very grateful for all the interactions and contributions with and by the Score community, solidifying the Score’s mission:
Score is loved by developers because they can run the same workload on completely different technology stacks, without needing to be an expert in any one of them.
In one year, the Score project got 19 new contributors!
Humanitec has played an important role for the Score project, since its creation, through the donation to the CNCF and by still making sure the Score project is growing outside Humanitec employees and customers. We now have 50% of the Maintainers outside of Humanitec and the number of Contributors is now at 90% outside Humanitec. This is key to set a sustainable foundation for the Score project and its community to grow and expand.
The Cloud Native Computing Foundation (CNCF) has been instrumental to onboard Score as a CNCF project, by providing a framework, the tools and the guidance to grow as a community. Last KubeCon EU 2025 in London was a great example, where the Score project got the opportunity to have a Project Lightning talk, a ContribFest and a Kiosk.
Great collaborations with other CNCF projects have been very inspirational and part of the highlights of this year, just to name a few of them:
Today, to illustrate and celebrate Score’s first anniversary as CNCF Sandbox, we want to have a dedicated Contributors spotlight section to highlight 4 major features delivered during the last few months.
Note: We cannot highlight each contribution individually, but again we are very grateful to all the contributors and community members: your time, expertise and feedback are really much appreciated and inspiring!
🎉 score-compose|k8s init --provisioners
Kudos to Rashid Alam! Thanks to his contributions to score-go
, score-compose
and score-k8s
, Score’s end users can now import custom resources provisioners as OCI image, like illustrated below:
$ score-compose init --provisioners oci://ghcr.io/score-spec/score-compose-community-provisioners:latest#10-redis-dapr-state-store.provisioners.yaml
$ score-k8s init --provisioners oci://ghcr.io/score-spec/score-k8s-community-provisioners:latest#10-redis-dapr-state-store.provisioners.yaml
Yet another collaboration with a CNCF project as this feature is using ORAS!
Also, thanks to Rabel Mervin and his contributions to score-go
and score-compose
, end users can now use local provisioners files or defined inline, like illustrated below:
$ score-compose init --provisioners=- <<"EOF"
- uri: template://env
type: environment
outputs: |
ENV: "development"
DEBUG: true
EOF
In addition to this, kudos to Rashid Alam and Matthieu Evrin who respectively implemented in score-compose
and score-k8s
the new flag to skip the import of the default provisioners:
$ score-compose init --no-default-provisioners
$ score-k8s init --no-default-provisioners
Learn more about the resources provisioners in score-compose
and score-k8s
.
🎉 score-compose|k8s resources|provisioners list
Kudos to Matthieu Evrin and his contributions to score-go
, score-compose
and score-k8s
. The user experience has been boosted and made more consistent around the following resources
and provisioners
subcommands:
As Developer, I can get more details about the resources provisioners made available to me:
$ score-compose init
$ score-compose provisioners list
$ score-k8s init
$ score-k8s provisioners list
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| TYPE | CLASS | PARAMS | OUTPUTS | DESCRIPTION |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| amqp | (any) | | host, password, port, username, vhost | Provisions a dedicated RabbitMQ vhost on a shared instance. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| dns | (any) | | host | Outputs a *.localhost domain as the hostname. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| elasticsearch | (any) | | host, password, port, username | Provisions a dedicated Elastic Search instance. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| kafka-topic | (any) | | host, name, num_partitions, port | Provisions a dedicated Kafka topic on a shared Kafka broker. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| mongodb | (any) | | connection, host, password, port, username | Provisions a dedicated MongoDB database. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| mssql | (any) | | connection, database, password, port, server, username | Provisions a dedicated database on a shared MS SQL server instance. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
| mysql | (any) | | database, host, name, password, port, username | Provisions a dedicated MySQL database on a shared instance. |
+---------------+-------+------------------+---------------------------------------------------------+---------------------------------------------------------------------+
...
Given this Score file:
apiVersion: score.dev/v1b1
metadata:
name: hello-world
annotations:
tags: "nodejs,http,website,javascript"
containers:
hello-world:
image: .
variables:
PORT: "3000"
MESSAGE: "Hello, World!"
DB_DATABASE: ${resources.db.name}
DB_USER: ${resources.db.username}
DB_PASSWORD: ${resources.db.password}
DB_HOST: ${resources.db.host}
DB_PORT: ${resources.db.port}
resources:
db:
type: postgres
dns:
type: dns
route:
type: route
params:
host: ${resources.dns.host}
path: /
port: 8080
service:
ports:
www:
port: 8080
targetPort: 3000
As Developer, I can get more details about the resources that will actually be provisioned:
$ score-compose generate score.yaml --image ghcr.io/score-spec/sample-score-app:latest
$ score-compose resources list
$ score-k8s generate score.yaml --image ghcr.io/score-spec/sample-score-app:latest
$ score-k8s resources list
+---------------------------------+------------------------------------------------+
| UID | OUTPUTS |
+---------------------------------+------------------------------------------------+
| dns.default#hello-world.dns | host |
+---------------------------------+------------------------------------------------+
| postgres.default#hello-world.db | database, host, name, password, port, username |
+---------------------------------+------------------------------------------------+
| route.default#hello-world.route | |
+---------------------------------+------------------------------------------------+
🎉 score-k8s generate --namespace
Artem Lajko, while testing, learning and blogging about Score, provided a great feedback that landed to a feature request in score-k8s
: “How to easily supply the Namespace
to the generated Kubernetes manifests?”. Kudos to Anurag Yadav who implemented this new feature and associated new flags like illustrated below:
$ score-k8s generate --namespace test --generate-namespace
This is unlocking different and important use cases with score-k8s
, its provisioners and patch templates. Thank you, Artem and Anurag!
🎉 Score Examples Hub
One of the feedback we have been capturing is to show concrete examples and use cases in the Score docs. That’s now the case!
Huge kudos to Tobias Babin and Santiago Beroch for designing and implementing this very powerful Score Examples Hub!
We have already plenty of additional ideas and contents to inject in there, stay tuned!
Upwards
On behalf of the Score Maintainers (Susa, Ben, Chris and Mathieu) and the entire Score community, we would like to give a big shout out to all these contributors. You have had so much impact to the Score project!
This is really shaping the future of how Developers and Platform Engineers interact with cloud native applications and tools, reducing the cognitive load on the Developers while enforcing standardization by the Platform Engineers.
Can’t wait to see where this community will bring the Score project for its second year as CNCF Sandbox!
See you in Atlanta for KubeCon NA 2025!?