<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer-Experience on lo0 — Blog Técnico</title><link>https://blog.lo0.es/tags/developer-experience/</link><description>Recent content in Developer-Experience on lo0 — Blog Técnico</description><generator>Hugo -- gohugo.io</generator><language>es</language><lastBuildDate>Mon, 31 Aug 2026 09:45:00 +0200</lastBuildDate><atom:link href="https://blog.lo0.es/tags/developer-experience/index.xml" rel="self" type="application/rss+xml"/><item><title>KubeVela y Score: dar la plataforma por CLI sin enseñar Kubernetes al desarrollador</title><link>https://blog.lo0.es/posts/kubevela-score-autoservicio-cli-desarrollador/</link><pubDate>Mon, 31 Aug 2026 09:45:00 +0200</pubDate><guid>https://blog.lo0.es/posts/kubevela-score-autoservicio-cli-desarrollador/</guid><description>&lt;blockquote>
&lt;p>Tercer y último artículo de la tanda sobre reconstruir la nube on-premise. El &lt;a href="https://blog.lo0.es/posts/de-la-nube-publica-a-la-privada-mapa/">mapa general&lt;/a> te situó los huecos y &lt;a href="https://blog.lo0.es/posts/crossplane-control-plane-autoservicio-soberano/">Crossplane&lt;/a> cubrió el plano de control de infraestructura. Aquí va la capa de encima, la que tu desarrollador toca todos los días: el autoservicio por CLI centrado en la aplicación.&lt;/p>
&lt;/blockquote>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>Crossplane responde &amp;ldquo;dame una base de datos&amp;rdquo;, desde la infraestructura. KubeVela y Score responden &amp;ldquo;despliega mi aplicación&amp;rdquo;, desde el workload, y lo hacen por CLI, que es justo la experiencia amable que Crossplane deliberadamente no te da. Los dos comparten artículo porque cubren la misma capa desde ángulos distintos. KubeVela es una plataforma completa de entrega: usa el modelo OAM, donde tu equipo de plataforma escribe una vez unas definiciones en el lenguaje CUE y el desarrollador despliega toda su aplicación con un fichero de quince líneas y una CLI (&lt;code>vela up&lt;/code>, &lt;code>vela status&lt;/code>, &lt;code>vela logs&lt;/code>) que se siente como Heroku por fuera y es GitOps por dentro. Score es más modesto y más portable: una especificación de workload en un solo fichero que se traduce por CLI a Docker Compose en local y a Kubernetes en producción, sin correr nada en el cluster.&lt;/p>
&lt;p>Lo honesto de entrada son los límites. Ninguno de los dos aparece en la sección &amp;ldquo;Adopt&amp;rdquo; del radar tecnológico de la CNCF de principios de 2026, donde sí están Helm, Backstage y Argo CD: son nicho frente al mainstream. La versión 1.11 de KubeVela sigue en alfa, así que la estable es la 1.10; su comunidad es concentrada, con unas 33 personas contribuyendo en 2025. Score es joven, su implementación para Kubernetes tiene pocas estrellas y su patrocinador, Humanitec, fue adquirido por Akamai. Y el poder de KubeVela vive en CUE, un lenguaje poco común y difícil de depurar. La abstracción es real, pero cuando se rompe, tu desarrollador acaba mirando YAML de Kubernetes igual.&lt;/p>
&lt;h2 id="la-analogía-el-formulario-de-pedido-frente-a-la-lista-de-la-compra">La analogía: el formulario de pedido frente a la lista de la compra&lt;/h2>
&lt;p>Desplegar en Kubernetes crudo es ir al mayorista con una lista de la compra técnica: tienes que saber que quieres un Deployment, un Service, un HorizontalPodAutoscaler, un Ingress, un ConfigMap y un ResourceQuota, y cómo se rellena cada uno. Funciona si conoces el almacén. Pero tu data scientist, que solo quiere servir su modelo, no debería tener que aprenderse el almacén.&lt;/p>
&lt;p>KubeVela es un formulario de pedido. En vez de la lista técnica, marcas &amp;ldquo;quiero servir esta aplicación, con estas réplicas, con esta puerta de enlace&amp;rdquo;, y detrás alguien que sí conoce el almacén (tu equipo de plataforma) ha definido qué se pide exactamente para que eso funcione. El desarrollador rellena el formulario; la traducción a la lista técnica la hizo otro, una vez, para todos.&lt;/p>
&lt;p>Score es el mismo formulario pero pensado para que te valga en dos tiendas distintas. Describes tu pedido una sola vez y la misma hoja sirve para el mercado de al lado (Docker Compose, tu portátil) y para el mayorista (Kubernetes, producción), sin reescribirla. Lo que cambia entre una tienda y otra lo pone quien traduce, no tú. Las dos analogías apuntan a lo mismo: separar lo que el desarrollador quiere de cómo se materializa, para que no tenga que aprender el almacén.&lt;/p>
&lt;h2 id="kubevela-la-aplicación-como-unidad">KubeVela: la aplicación como unidad&lt;/h2>
&lt;h3 id="qué-es-y-en-qué-estado-llega-a-2026">Qué es y en qué estado llega a 2026&lt;/h3>
&lt;p>KubeVela es un proyecto de la CNCF en nivel de incubación desde febrero de 2023. Nació como evolución del runtime de OAM en Kubernetes, con contribuciones de arranque de Alibaba Cloud, Microsoft y Upbound, y se apoya en el Open Application Model, la especificación que Alibaba y Microsoft co-crearon para describir aplicaciones de forma independiente de la infraestructura.&lt;/p>
&lt;p>Te doy un dato de realismo sobre su tamaño de comunidad. La retrospectiva oficial de 2025 declara siete releases en el año, 124 commits y unas 33 personas contribuyendo, sobre algo más de 7.600 estrellas en GitHub. No es un proyecto en declive, pero es una comunidad concentrada, con la curva de crecimiento aplanada respecto a su etapa inicial bajo Alibaba. Y un aviso de versión importante: la rama estable es la 1.10, con parches regulares durante 2026; la 1.11 sigue en alfa, así que no te fíes de sus features como si estuvieran disponibles.&lt;/p>
&lt;h3 id="el-modelo-oam-en-cinco-piezas">El modelo OAM en cinco piezas&lt;/h3>
&lt;p>Toda tu aplicación se describe en un solo fichero YAML de tipo &lt;code>Application&lt;/code>, con cuatro secciones que te toca conocer por nombre. Los &lt;strong>components&lt;/strong> son el artefacto que despliegas, sea una imagen, un chart de Helm o un servicio; los &lt;strong>traits&lt;/strong> son requisitos operativos que cuelgas de cada componente, como el escalado, la puerta de enlace o el almacenamiento; las &lt;strong>policies&lt;/strong> son estrategia global de la aplicación, como la topología multi-cluster o los SLO; y el &lt;strong>workflow&lt;/strong> es el proceso de entrega por pasos, que puede incluir una pausa de aprobación manual o una notificación.&lt;/p>
&lt;p>La clave del modelo es que los tipos de componente y de trait no son fijos: son módulos programables que mantiene tu equipo de plataforma, expresados como &lt;code>ComponentDefinition&lt;/code> y &lt;code>TraitDefinition&lt;/code>. El desarrollador solo consume un tipo y sus propiedades; nunca ve el YAML de Kubernetes que hay debajo. Ese es exactamente el &amp;ldquo;no exponer Kubernetes crudo&amp;rdquo; del que va todo esto: tu operador de plataforma escribe la definición una vez, tu data scientist escribe quince líneas de &lt;code>Application&lt;/code>.&lt;/p>
&lt;h3 id="cue-el-poder-y-el-peaje">CUE, el poder y el peaje&lt;/h3>
&lt;p>Las definiciones se escriben en CUE, y aquí tienes a la vez la fuerza y la debilidad de KubeVela. CUE te deja parametrizar en serio: la definición declara qué inputs expone al desarrollador y qué recursos de Kubernetes renderiza a partir de ellos, con acceso a variables de contexto como el nombre de la aplicación. El flujo real parte de un YAML existente, que &lt;code>vela def init&lt;/code> convierte en un esqueleto CUE; lo editas, lo validas con &lt;code>vela def vet&lt;/code> y lo publicas con &lt;code>vela def apply&lt;/code>, y queda disponible para todos tus desarrolladores.&lt;/p>
&lt;p>El peaje es que CUE es un lenguaje poco común, con pocos expertos y difícil de depurar. El coste recae en tu equipo de plataforma, no en el desarrollador, que es la distribución correcta, pero es un coste real que tienes que fichar antes de adoptar. Nadie llega sabiendo CUE.&lt;/p>
&lt;h3 id="la-cli-vela-heroku-por-fuera-gitops-por-dentro">La CLI vela: Heroku por fuera, GitOps por dentro&lt;/h3>
&lt;p>Aquí está la respuesta a la pregunta que este blog viene arrastrando sobre el aprovisionamiento por CLI. El día a día con KubeVela se te parece a Heroku: &lt;code>vela up&lt;/code> despliega la aplicación desde ficheros locales, &lt;code>vela status&lt;/code> te muestra su estado, &lt;code>vela ls&lt;/code> lista las aplicaciones, &lt;code>vela logs&lt;/code> sigue los registros, &lt;code>vela exec&lt;/code> ejecuta un comando dentro del contenedor sin que conozcas el nombre del pod, y &lt;code>vela port-forward&lt;/code> te abre un túnel. Tienes incluso &lt;code>vela dry-run&lt;/code>, que renderiza los recursos de Kubernetes sin aplicarlos, para que veas qué va a pasar.&lt;/p>
&lt;p>La matización honesta es que es &amp;ldquo;imperativa en la superficie, declarativa por debajo&amp;rdquo;. Cuando haces &lt;code>vela up&lt;/code> no estás ejecutando una orden imperativa tipo &lt;code>heroku scale&lt;/code>, estás aplicando un objeto &lt;code>Application&lt;/code> declarativo que un controlador reconcilia. La CLI te imita el flujo cómodo de Heroku, pero el modelo subyacente es GitOps, lo que significa que encaja con &lt;a href="https://blog.lo0.es/posts/gitops-stack-inferencia-llm-flux/">tu stack de Flux&lt;/a> mediante el addon correspondiente, en vez de reemplazarlo.&lt;/p>
&lt;h3 id="multi-cluster-que-es-lo-que-a-ti-te-importa">Multi-cluster, que es lo que a ti te importa&lt;/h3>
&lt;p>Si tienes una plataforma con varios sites (site01 y site02, en mi caso) la parte de multi-cluster es la que decide. KubeVela orquesta desde un cluster central y solo los recursos ya renderizados llegan a los clusters gestionados, con gobierno centralizado. Una &lt;code>topology policy&lt;/code> decide el destino por lista de clusters o por selector de etiquetas (por ejemplo, por región); una &lt;code>override policy&lt;/code> ajusta imágenes, réplicas o traits por cluster sin tocar el componente; y el paso de despliegue en el workflow reparte, con la opción de un despliegue por fases: primero al cluster local, luego una puerta de aprobación manual, y solo entonces a producción. Es la clase de gobierno que on-premise tienes que construir y que la nube te daba servido.&lt;/p>
&lt;h3 id="velaux-el-portal-ligero-de-regalo">VelaUX, el portal ligero de regalo&lt;/h3>
&lt;p>KubeVela trae una consola web opcional, VelaUX, que enciendes como un addon y te da dashboard, gestión de proyectos, entornos y ciclo de vida de las aplicaciones. Si quieres CLI primero es opcional, más útil para dar visibilidad y control de acceso a operadores que como vía principal. Es un portal ligero &amp;ldquo;de regalo&amp;rdquo; que no pretende competir con &lt;a href="https://blog.lo0.es/posts/backstage-portal-autoservicio-plataforma-llm/">Backstage&lt;/a>, pero que puede ahorrarte montar uno si tus necesidades son modestas.&lt;/p>
&lt;h2 id="score-describe-el-workload-una-vez">Score: describe el workload una vez&lt;/h2>
&lt;h3 id="qué-es-y-qué-resuelve">Qué es y qué resuelve&lt;/h3>
&lt;p>Score es una especificación abierta de workload, agnóstica de plataforma y de entorno. La idea, en su propia formulación, es que definas el workload una vez y uses una implementación de Score para traducirlo a varias plataformas: Docker Compose, Kubernetes, Fly.io o Cloud Run. El problema que te ataca es concreto y familiar: la divergencia entre lo que corres en tu portátil con Docker Compose y lo que se despliega en producción con Kubernetes, dos descripciones que se desincronizan y te causan el clásico &amp;ldquo;en mi máquina funcionaba&amp;rdquo;.&lt;/p>
&lt;p>En un fichero &lt;code>score.yaml&lt;/code> el desarrollador declara sus contenedores, los puertos de servicio y los recursos que necesita como dependencias (una base de datos, un DNS, una ruta), y los parámetros específicos de cada entorno se inyectan al desplegar. Score entró en el sandbox de la CNCF en julio de 2024. Lo creó y donó Humanitec, una empresa de plataformas de desarrollador, unos dieciocho meses antes de su ingreso en la fundación.&lt;/p>
&lt;h3 id="las-dos-implementaciones">Las dos implementaciones&lt;/h3>
&lt;p>Score no hace nada por sí solo: es una especificación que necesita una implementación que traduzca. Tienes dos oficiales. &lt;code>score-compose&lt;/code> genera Docker Compose para desarrollo local, con comandos &lt;code>init&lt;/code> y &lt;code>generate&lt;/code>, y provisiona del orden de catorce tipos de recurso, desde Postgres o Redis hasta almacenamiento S3 o colas. &lt;code>score-k8s&lt;/code> genera manifiestos de Kubernetes listos para &lt;code>kubectl apply&lt;/code>, con flags para la imagen, el namespace y los provisioners. La CLI comercial de Humanitec, &lt;code>humctl&lt;/code>, también soporta Score de forma nativa.&lt;/p>
&lt;p>El dato de arquitectura más importante es que &lt;strong>Score no corre nada en el cluster destino&lt;/strong>. Es traducción puramente de CLI: te genera manifiestos y se aparta. No hay controlador, no hay CRD, no hay reconciliación. Esa es a la vez su virtud (es ligero, portable y sin lock-in de runtime) y su límite (no orquesta ni despliega, solo traduce).&lt;/p>
&lt;h3 id="score-frente-a-kubevela-y-a-helm">Score frente a KubeVela y a Helm&lt;/h3>
&lt;p>El propio posicionamiento oficial de Score aclara las capas, y te lo fijo porque es fácil confundirlas. Score es la capa de especificación de workload, centrada en el desarrollador: describe un workload y sus dependencias y se traduce a N plataformas por CLI, pero no orquesta ni despliega. KubeVela es una plataforma completa de entrega continua, centrada en la aplicación: orquesta múltiples componentes, aplica policies y workflows, hace multi-cluster, y para ello necesita su controlador en el cluster; es, en sus propias palabras, mucho más rico en features que Score. Helm es el empaquetado y el renderizado de manifiestos, sin la abstracción centrada en el desarrollador ni la portabilidad a Compose.&lt;/p>
&lt;p>La síntesis limpia es que son capas complementarias, no sustitutas: Score genera, Helm o los manifiestos empaquetan, KubeVela orquesta y despliega. Si te los presentan como rivales, han confundido las capas.&lt;/p>
&lt;h2 id="dónde-encaja-cada-uno-la-comparación-transversal">Dónde encaja cada uno: la comparación transversal&lt;/h2>
&lt;p>Con Crossplane ya en la mano del artículo anterior, la comparación de las tres piezas de autoservicio se te ordena por la pregunta que responde cada una.&lt;/p>
&lt;p>Score y KubeVela responden en el plano de la &lt;strong>aplicación&lt;/strong>: el workload que un desarrollador despliega, &amp;ldquo;despliega esta app&amp;rdquo;. Crossplane responde en el plano de la &lt;strong>infraestructura&lt;/strong>: el recurso que un desarrollador pide, &amp;ldquo;dame una Postgres gestionada&amp;rdquo;. Y Backstage responde en el plano del &lt;strong>portal&lt;/strong>: el catálogo web y los caminos dorados, la capa de descubrimiento que no despliega ni provisiona por sí misma, sino que orquesta a las de abajo.&lt;/p>
&lt;p>Lo interesante es que se combinan. Un &lt;code>score.yaml&lt;/code> puede declarar sus recursos y delegar la provisión de esos recursos a Crossplane mediante un provisioner, mientras KubeVela orquesta el despliegue de la aplicación y Backstage sirve de fachada. No es un o esto o lo otro; es una pila donde cada capa hace su trabajo. Si tu equipo es pequeño, eliges una sola pieza y ya; la pila completa es para plataformas maduras.&lt;/p>
&lt;h2 id="el-encaje-con-inferencia-patrón-no-receta-oficial">El encaje con inferencia: patrón, no receta oficial&lt;/h2>
&lt;p>Igual que con Crossplane, aquí te toca honestidad: no existe una definición oficial y mantenida de KServe en el catálogo por defecto de KubeVela ni un tipo de recurso de inferencia en Score. Lo que sigue es un patrón de diseño con piezas confirmadas por separado, no una receta documentada.&lt;/p>
&lt;p>El patrón con KubeVela sería que tu operador de plataforma define una vez, en CUE, un &lt;code>ComponentDefinition&lt;/code> llamado por ejemplo &lt;code>inference-service&lt;/code>, que por debajo renderiza un servicio de inferencia de KServe con runtime vLLM, con los límites de GPU, las cuotas de namespace y el autoescalado ya cableados. Tu data scientist escribe entonces una &lt;code>Application&lt;/code> de quince líneas con el tipo &lt;code>inference-service&lt;/code> y sus propiedades (el modelo, las réplicas), sin tocar KServe, sin conocer las cuotas de GPU ni la clase de runtime, y opera con &lt;code>vela up&lt;/code>, &lt;code>vela status&lt;/code> y &lt;code>vela logs&lt;/code>. El multi-site te lo resuelven la topology policy, que decide en qué cluster con GPU aterriza, y la override policy, que ajusta réplicas o modelo por sitio, con una aprobación manual en el workflow antes de producción.&lt;/p>
&lt;p>La alternativa con Score sería un &lt;code>score.yaml&lt;/code> con un recurso de tipo &lt;code>inference-endpoint&lt;/code> que &lt;code>score-k8s&lt;/code>, con un provisioner a medida, emite como un servicio de inferencia de KServe. Más portable, pero hoy te exige ese provisioner propio, porque KServe no es un tipo por defecto. En ambos casos, la capa de abstracción se apoya en piezas que ya son estándar (KServe pasó a incubación en la CNCF a finales de 2025 y vLLM es su runtime generativo de referencia), pero la abstracción de inferencia la construyes tú. Tómalo como propuesta, no como caso probado.&lt;/p>
&lt;p>Te dejo una nota: en 2026 KServe estrenó un tipo dedicado a modelos grandes, &lt;code>LLMInferenceService&lt;/code>, todavía en alfa y con vLLM como runtime, que es el ladrillo que una definición de KubeVela o un provisioner de Score renderizarían por debajo. Y en la capa de infraestructura, no en esta, el equipo de Crossplane publicó Modelplane, un plano de control de inferencia hecho de composiciones que sirve vLLM directamente. Ninguno de los dos es un tipo de KubeVela ni de Score, pero ambos te confirman que el ladrillo de abajo se está estandarizando, que es lo que hace viable poner una fachada de autoservicio encima.&lt;/p>
&lt;h2 id="caveats-sin-adornos">Caveats, sin adornos&lt;/h2>
&lt;p>Esta es la sección que separa el artículo del folleto, y con estos dos proyectos te hace especial falta.&lt;/p>
&lt;p>&lt;strong>La adopción es nicho, y hay un dato duro.&lt;/strong> El radar tecnológico de la CNCF de principios de 2026, sobre más de 400 desarrolladores, coloca en &amp;ldquo;Adopt&amp;rdquo; a Helm, Backstage y Argo CD. Ni KubeVela, ni Score, ni Crossplane se mencionan. Son herramientas de nicho frente al mainstream, y elegirlas es apostar por una curva de adopción que puede no despegar.&lt;/p>
&lt;p>&lt;strong>Score es joven y su patrocinador cambió de manos.&lt;/strong> Su implementación para Kubernetes tiene pocas estrellas, la especificación está en versiones 0.x, y Humanitec, que lo patrocina, fue adquirida por Akamai en 2025, así que te toca vigilar la continuidad de la inversión en la parte open source.&lt;/p>
&lt;p>&lt;strong>KubeVela tiene comunidad concentrada y v1.11 en alfa.&lt;/strong> Las 33 personas contribuyendo en 2025 y la curva de estrellas plana son señal de meseta. No construyas sobre features de la 1.11 hasta que sea estable.&lt;/p>
&lt;p>&lt;strong>La curva de CUE es real.&lt;/strong> El poder de KubeVela vive en definiciones CUE, y CUE es difícil. El coste recae en la plataforma, pero existe.&lt;/p>
&lt;p>&lt;strong>Y el riesgo de siempre con las abstracciones: la fuga.&lt;/strong> Tanto KubeVela como Score añaden una indirección sobre Kubernetes y KServe. Cuando algo falla por debajo, la abstracción se agrieta y tu desarrollador acaba mirando el YAML de KServe igualmente, más el lock-in en tus propias definiciones. Una abstracción que no aguanta el fallo te devuelve justo la complejidad que prometía esconder.&lt;/p>
&lt;h2 id="para-tu-factoría-de-inferencia-soberana">Para tu factoría de inferencia soberana&lt;/h2>
&lt;p>La decisión práctica se te ordena por el perfil de tus usuarios. Si tu gente vive en la CLI y piensa en aplicaciones, KubeVela te da la experiencia tipo Heroku sobre tu propio hierro, con multi-cluster real, a cambio de que tu equipo de plataforma aprenda CUE. Si lo que más te duele es la divergencia entre local y producción, Score te resuelve eso con lo mínimo, sin meter un runtime más en el cluster. Y si quieres las dos cosas más un portal, la pila Score, Crossplane, KubeVela y Backstage existe, pero es para una plataforma que ya sirve a muchos equipos, no para el arranque.&lt;/p>
&lt;p>El criterio de sobriedad es el mismo que en toda esta tanda: estas herramientas te tapan un hueco real de la nube que dejaste, pero cada una es un sistema más que operar. Para dos equipos que se conocen, un buen Helm y un repositorio de GitOps ordenado te hacen el trabajo sin CUE ni definiciones propias. El autoservicio centrado en la aplicación empieza a pagarte cuando el número de gente que despliega supera al número de gente que sabe Kubernetes, que es justo el momento en que una factoría de inferencia deja de ser un proyecto y empieza a ser una plataforma.&lt;/p>
&lt;p>Con esto se cierra la tanda. El &lt;a href="https://blog.lo0.es/posts/de-la-nube-publica-a-la-privada-mapa/">mapa&lt;/a> te dibujó los huecos de salir de la nube, &lt;a href="https://blog.lo0.es/posts/crossplane-control-plane-autoservicio-soberano/">Crossplane&lt;/a> cubrió el plano de control de infraestructura, y KubeVela con Score cubren la cara que el desarrollador toca. Tu casa propia ya se parece bastante al hotel, y el dato se quedó dentro.&lt;/p>
&lt;h2 id="ver-también">Ver también&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://blog.lo0.es/posts/de-la-nube-publica-a-la-privada-mapa/">De la nube pública a la privada: el mapa&lt;/a> — el problema completo que esta tanda desglosa.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/crossplane-control-plane-autoservicio-soberano/">Crossplane: el plano de control de nube privada&lt;/a> — la capa de infraestructura, complementaria a esta.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/backstage-portal-autoservicio-plataforma-llm/">Backstage como portal de autoservicio&lt;/a> — la tercera vía de autoservicio, la del portal web.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/kserve-open-inference-protocol-plano-control/">KServe y el protocolo abierto de inferencia&lt;/a> — lo que las definiciones de inferencia materializarían por debajo.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/gitops-stack-inferencia-llm-flux/">GitOps del stack de inferencia con Flux&lt;/a> — el motor con el que KubeVela convive.&lt;/li>
&lt;/ul>
&lt;h2 id="fuentes">Fuentes&lt;/h2>
&lt;ul>
&lt;li>KubeVela, &lt;em>State of KubeVela 2025&lt;/em> — &lt;a href="https://kubevela.io/blog/2025/12/20/state-of-kubevela-2025/">https://kubevela.io/blog/2025/12/20/state-of-kubevela-2025/&lt;/a>&lt;/li>
&lt;li>CNCF, &lt;em>KubeVela brings software delivery control plane capabilities to the CNCF incubator&lt;/em> — &lt;a href="https://www.cncf.io/blog/2023/02/27/kubevela-brings-software-delivery-control-plane-capabilities-to-cncf-incubator/">https://www.cncf.io/blog/2023/02/27/kubevela-brings-software-delivery-control-plane-capabilities-to-cncf-incubator/&lt;/a>&lt;/li>
&lt;li>KubeVela Docs, &lt;em>Core Concept&lt;/em> — &lt;a href="https://kubevela.io/docs/getting-started/core-concept/">https://kubevela.io/docs/getting-started/core-concept/&lt;/a>&lt;/li>
&lt;li>KubeVela Docs, &lt;em>vela CLI reference&lt;/em> — &lt;a href="https://kubevela.io/docs/cli/vela/">https://kubevela.io/docs/cli/vela/&lt;/a>&lt;/li>
&lt;li>KubeVela Docs, &lt;em>Custom Component with CUE&lt;/em> — &lt;a href="https://kubevela.io/docs/platform-engineers/components/custom-component/">https://kubevela.io/docs/platform-engineers/components/custom-component/&lt;/a>&lt;/li>
&lt;li>KubeVela Docs, &lt;em>Multi-cluster delivery&lt;/em> — &lt;a href="https://kubevela.io/docs/case-studies/multi-cluster/">https://kubevela.io/docs/case-studies/multi-cluster/&lt;/a>&lt;/li>
&lt;li>KubeVela Docs, &lt;em>VelaUX addon&lt;/em> — &lt;a href="https://kubevela.io/docs/reference/addons/velaux/">https://kubevela.io/docs/reference/addons/velaux/&lt;/a>&lt;/li>
&lt;li>CNCF, &lt;em>Score accepted as a CNCF Sandbox Project&lt;/em> — &lt;a href="https://www.cncf.io/blog/2024/08/08/score-accepted-as-a-cncf-sandbox-project/">https://www.cncf.io/blog/2024/08/08/score-accepted-as-a-cncf-sandbox-project/&lt;/a>&lt;/li>
&lt;li>Score Docs, &lt;em>Overview&lt;/em> — &lt;a href="https://docs.score.dev/docs/">https://docs.score.dev/docs/&lt;/a>&lt;/li>
&lt;li>Score, &lt;em>Score vs the Open Application Model and KubeVela&lt;/em> — &lt;a href="https://score.dev/blog/score-vs-open-application-model-kubevela/">https://score.dev/blog/score-vs-open-application-model-kubevela/&lt;/a>&lt;/li>
&lt;li>GitHub, &lt;em>score-compose&lt;/em> — &lt;a href="https://github.com/score-spec/score-compose">https://github.com/score-spec/score-compose&lt;/a>&lt;/li>
&lt;li>GitHub, &lt;em>score-k8s&lt;/em> — &lt;a href="https://github.com/score-spec/score-k8s">https://github.com/score-spec/score-k8s&lt;/a>&lt;/li>
&lt;li>CNCF, &lt;em>KServe becomes a CNCF Incubating Project&lt;/em> — &lt;a href="https://www.cncf.io/blog/2025/11/11/kserve-becomes-a-cncf-incubating-project/">https://www.cncf.io/blog/2025/11/11/kserve-becomes-a-cncf-incubating-project/&lt;/a>&lt;/li>
&lt;li>KServe Docs, &lt;em>Understanding LLMInferenceService&lt;/em> — &lt;a href="https://kserve.github.io/website/docs/model-serving/generative-inference/llmisvc/llmisvc-overview">https://kserve.github.io/website/docs/model-serving/generative-inference/llmisvc/llmisvc-overview&lt;/a>&lt;/li>
&lt;li>Crossplane Blog, &lt;em>Building Modelplane on Crossplane&lt;/em> — &lt;a href="https://blog.crossplane.io/building-modelplane/">https://blog.crossplane.io/building-modelplane/&lt;/a> · &lt;a href="https://modelplane.ai">https://modelplane.ai&lt;/a>&lt;/li>
&lt;li>CNCF y SlashData, &lt;em>Technology Radar Q1 2026: Platform Engineering&lt;/em> — &lt;a href="https://www.cncf.io/announcements/2026/03/24/cncf-and-slashdata-report-finds-platform-engineering-tools-maturing-as-organizations-prepare-for-ai-driven-infrastructure/">https://www.cncf.io/announcements/2026/03/24/cncf-and-slashdata-report-finds-platform-engineering-tools-maturing-as-organizations-prepare-for-ai-driven-infrastructure/&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>