npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

keel-core

v0.3.4

Published

Diseña servidores como artefactos agnósticos de tecnología y genera implementaciones con agentes. `keel init` siembra un workspace completo.

Readme

keel-core

Diseña un servidor una vez. Genéralo en cualquier tecnología.

keel-core es el núcleo de Keel: la CLI keel más el DSL Keel que define cómo se describe un servicio sin nombrar framework, ORM, broker ni lenguaje. Siembra el workspace de diseño, crea y valida servicios, y expone su validación como librería para que cada generador (keel-spring, y los que vengan) la reutilice en vez de duplicarla.

El diseño de un servicio vive en specs/<servicio>/: un manifiesto más un artefacto YAML por capa — dominio, casos de uso, API, seguridad, mensajería, clientes HTTP, dependencias, persistencia, almacenamiento, correo. Cada capa se itera por separado, cabe en un diff y se relaciona con las demás por nombre. Ese diseño es la fuente de verdad: el código final no lo genera JavaScript, lo genera un agente leyendo el spec validado.

Instalación

npm i -g keel-core     # comando `keel`

Requiere Node.js >= 18. Sin build step: ESM puro.

Uso

mkdir mi-proyecto && cd mi-proyecto
keel init                        # siembra el workspace: skills, schemas, plantillas, docs

# ¿Ya existe un diseño que resuelva esto?
keel registry search catalogo    # busca en el registry de diseños reutilizables
keel registry get catalog        # lo adopta tal cual, con sus derivados al día
keel new mi-servicio --from registry:catalog   # …o lo deriva, con linaje en `basedOn`

keel new mi-servicio             # …o de cero: manifiesto + domain + use-cases
keel validate specs/mi-servicio  # schemas por capa + referencias cruzadas, offline

El diseño capa a capa lo conduce un agente con las skills que keel init siembra (/keel-design, /keel-validate, /keel-docs, /keel-handoff…), y la generación la hace el generador de la tecnología elegida:

npm i -g keel-spring
keel-spring build specs/mi-servicio    # → services/mi-servicio-spring/
cd services/mi-servicio-spring
# y en Claude Code, abierto en esa raíz: /keel-generate-spring

Cuando el encargo no es un servicio sino un sistema, hay una fase previa: /keel-decompose decide las fronteras con el humano y escribe el mapa system.yaml, y keel system calcula en qué orden se construyen los servicios —quien publica contrato va antes que quien lo consume— y contrasta ese mapa contra los diseños reales.

Comandos

| Comando | Qué hace | |---------|----------| | keel init [--force] [--check] | Siembra el workspace de diseño: skills del agente, schemas por capa, plantillas, docs y el archivo de contexto. Nunca sobrescribe sin --force. Con --check no escribe y falla si alguna copia del payload quedó atrás respecto a la CLI instalada. | | keel new <servicio> [--from <origen>] | Crea specs/<servicio>/ con manifiesto + capas obligatorias. Con --from deriva de un diseño existente (nombre local, ruta o registry:<diseño>) estampando el linaje en service.basedOn. | | keel validate <ruta> | Valida un servicio: JSON Schema de cada capa + referencias cruzadas entre artefactos. Offline, reportando todos los errores de una vez. | | keel describe <servicio> | Resume un diseño para leerlo o reutilizarlo: identidad, estado, capas, contenido y frescura de sus derivados. | | keel index [--check] | Genera el índice de diseños del workspace: la tabla del README.md (solo entre marcadores) y index.json. Determinista: --check es la puerta de CI de un registry. | | keel system [show \| check] | Lee el mapa del sistema. show muestra las olas de construcción —orden topológico de las aristas bloqueantes, no declarado—; check es la única validación cross-servicio del método y llega a cruzar dos specs. Ninguno escribe nada. | | keel registry [list \| search \| show \| get] | Explora y materializa diseños reutilizables. Fuente configurable con --source o KEEL_REGISTRY_URL; caché en ~/.keel/registry/ con --refresh y --offline. | | keel list | Lista los generadores conocidos y su paquete npm. |

Validación en tres niveles

keel validate cubre los dos primeros; el tercero lo hace el agente.

  1. Schema por capa — JSON Schema 2020 (Ajv) contra schema/<capa>.schema.json.
  2. Referencias cruzadas — que los nombres casen entre capas: tipos, entidades, agregados, transiciones, payloads, endpoints→operaciones, roles.
  3. Revisión semántica — calidad del diseño, invariantes y mínimo privilegio, a cargo de la skill /keel-validate. No está en código a propósito.

Lo que no es una incoherencia sino una decisión que el diseño no ha tomado no sale como aviso sino como obligación con id estable, que se cierra en el YAML o se acepta por escrito en decisions.yaml — y mientras siga abierta, keel validate está en rojo.

Como librería

Los generadores consumen la API pública en vez de reimplementar la validación:

import { validateService, summarizeService, supportedDsl } from 'keel-core';

const result = validateService('specs/mi-servicio');
if (!result.ok) {
  console.error(result.loadErrors, result.schemaErrors, result.crossRefErrors);
  console.error(result.obligations.open);   // decisiones que el diseño no ha tomado
}

validateService(dir, { wip }) no toca consola ni exitCode: devuelve el resultado completo (ok, loadErrors, schemaErrors, crossRefErrors, warnings, pending, obligations) para que cada generador lo presente a su manera. El resto de la API pública —loadService, resolveServiceRef, summarizeService, listDerivatives, buildIndex, buildSystemPlan, copyTree, emitHarnessFiles, supportedDsl— está en src/index.js.

Compatibilidad

| Paquete | DSL Keel | |---------|----------| | keel-core 0.3.x | keel: "2.13" |

Se soporta una sola versión del DSL. Los schemas no gatean primitivos por versión, así que aceptar las anteriores haría que el campo keel de un manifiesto declarase una intención que nada comprueba. El razonamiento completo está en docs/dsl-reference.md § Historial de versiones del workspace sembrado.

Documentación

Toda la documentación viaja dentro del paquete y keel init la copia a docs/ del workspace:

Licencia

MIT