{"id":21,"date":"2026-09-15T10:14:21","date_gmt":"2026-09-15T08:14:21","guid":{"rendered":"https:\/\/desarrollosms.com\/?p=21"},"modified":"2026-09-16T00:39:24","modified_gmt":"2026-09-15T22:39:24","slug":"vlt-gestor-de-paquetes-seguro","status":"publish","type":"post","link":"https:\/\/desarrollosms.com\/index.php\/2026\/09\/15\/vlt-gestor-de-paquetes-seguro\/","title":{"rendered":"vlt &#8211; instala paquetes npm sin ejecutar scripts de instalaci\u00f3n"},"content":{"rendered":"<p>Cuando escribes <code>npm install<\/code>, los paquetes que llegan pueden ejecutar scripts de instalaci\u00f3n en tu m\u00e1quina antes de que hayas le\u00eddo una sola l\u00ednea de su c\u00f3digo. Es el vector de los ataques a la cadena de suministro m\u00e1s comunes del ecosistema JavaScript. <strong>vlt<\/strong>, el gestor de paquetes creado por los autores originales de npm, sali\u00f3 el 7 de septiembre en su versi\u00f3n 1.0 con una propuesta concreta: <strong>nada se ejecuta en tu m\u00e1quina solo porque escribiste install<\/strong>. Aqu\u00ed vas a ver c\u00f3mo funciona, c\u00f3mo migrar desde npm, y \u2014lo m\u00e1s importante\u2014 los criterios para decidir si te conviene a ti.<\/p>\n<h2>El problema que resuelve<\/h2>\n<p>Un paquete npm puede declarar scripts de ciclo de vida (<code>postinstall<\/code>, <code>prepare<\/code>) que se ejecutan autom\u00e1ticamente durante la instalaci\u00f3n. En teor\u00eda sirven para compilar binarios nativos o preparar assets. En la pr\u00e1ctica, cualquier paquete que instales puede correr c\u00f3digo arbitrario con tu usuario.<\/p>\n<p>No es te\u00f3rico: los ataques de cadena de suministro via <code>postinstall<\/code> llevan a\u00f1os apareciendo, y el tama\u00f1o del problema se mide en cientos de miles de versiones marcadas.<\/p>\n<h2>C\u00f3mo instala vlt: por fases<\/h2>\n<p>La diferencia estructural con npm es que la instalaci\u00f3n est\u00e1 partida en dos comandos:<\/p>\n<pre><code class=\"language-bash\">vlt install   # descarga y extrae los paquetes, no ejecuta nada\nvlt build     # ejecuta solo los scripts de los paquetes en los que conf\u00edas<\/code><\/pre>\n<p><code>vlt install<\/code> trae todo a tu disco sin correr un solo script. <code>vlt build<\/code> ejecuta los scripts aprobados y bloquea por defecto cualquier paquete marcado como malware. Es decir: la decisi\u00f3n de ejecutar c\u00f3digo pasa de \u00abautom\u00e1tica\u00bb a \u00abexpl\u00edcita\u00bb.<\/p>\n<p>Adem\u00e1s, los registros alojados de vlt rechazan los paquetes maliciosos conocidos <strong>antes de servirlos<\/strong> \u2014 el bloqueo ocurre en el registro, no solo en tu m\u00e1quina. M\u00e1s de 275.000 versiones est\u00e1n marcadas, y seg\u00fan los revisores, una cuarta parte de ellas sigue siendo instalable desde npm.<\/p>\n<h2>Consultas de grafo con vlt query<\/h2>\n<p>La pieza m\u00e1s interesante para equipos: <code>vlt query<\/code> trata tu grafo de dependencias como un \u00e1rbol consultable con m\u00e1s de 60 selectores de estilo CSS, y cerca de la mitad son de seguridad:<\/p>\n<pre><code class=\"language-bash\">vlt query ':has(@types\/*)'<\/code><\/pre>\n<p>El cat\u00e1logo de selectores est\u00e1 orientado a auditar a escala, con la integraci\u00f3n de Socket detr\u00e1s. Dos extras que valen la pena conocer:<\/p>\n<ul>\n<li><code>:host(local)<\/code> extiende la consulta a <strong>todos los proyectos de tu m\u00e1quina<\/strong>, no solo al directorio actual.<\/li>\n<li><code>--view=mermaid<\/code> devuelve el resultado como un diagrama de Mermaid, para pegarlo en documentaci\u00f3n o revisarlo en una reuni\u00f3n.<\/li>\n<\/ul>\n<h2>C\u00f3mo migrar desde npm<\/h2>\n<p>El punto de partida de vlt es que es un <strong>reemplazo directo<\/strong>: la API de registro es compatible con npm, as\u00ed que tus pipelines de CI, registros privados y tooling siguen funcionando sin cambios.<\/p>\n<pre><code class=\"language-bash\">npm install -g vlt<\/code><\/pre>\n<p>Despu\u00e9s, dentro de tu proyecto:<\/p>\n<pre><code class=\"language-bash\">vlt install\nvlt build<\/code><\/pre>\n<p>Lo que cambia en el proyecto:<\/p>\n<ul>\n<li>La configuraci\u00f3n migra de <code>.npmrc<\/code> a <code>vlt.json<\/code>.<\/li>\n<li>El lockfile nuevo se llama <code>vlt-lock.json<\/code> \u2014 tu <code>package-lock.json<\/code> deja de usarse, as\u00ed que decide c\u00f3mo quieres manejar la transici\u00f3n si tu equipo comparte lockfiles.<\/li>\n<\/ul>\n<h2>Criterios para decidir, no una respuesta \u00fanica<\/h2>\n<p>vlt no es el \u00fanico que se ha movido hacia ac\u00e1, y ser honesto con el contexto importa m\u00e1s que la recomendaci\u00f3n:<\/p>\n<ul>\n<li><strong>npm v12<\/strong> tambi\u00e9n desactiva los scripts de instalaci\u00f3n por defecto.<\/li>\n<li><strong>pnpm<\/strong> pone en cuarentena los releases muy recientes con una antig\u00fcedad m\u00ednima.<\/li>\n<li><strong>Bun<\/strong> bloquea los scripts <code>postinstall<\/code>.<\/li>\n<\/ul>\n<p>Lo genuinamente distinto de vlt es el <strong>bloqueo a nivel de registro<\/strong> \u2014 los otros act\u00faan en tu m\u00e1quina. Y en velocidad pura de instalaci\u00f3n, pnpm y Bun siguen adelante; vlt afirma un registro hasta 38% m\u00e1s r\u00e1pido que el de npm, no ser el m\u00e1s r\u00e1pido en general.<\/p>\n<p>Entonces, seg\u00fan tu caso:<\/p>\n<ul>\n<li><strong>Equipo con grafo grande de dependencias y auditor\u00eda frecuente<\/strong>: vlt es el caso claro \u2014 las consultas de grafo y el bloqueo en registro son valor real.<\/li>\n<li><strong>Ya est\u00e1s a gusto con pnpm o Bun y su manejo de scripts<\/strong>: el valor marginal est\u00e1 en <code>vlt query<\/code> y en el registro; puede no justificar la migraci\u00f3n hoy.<\/li>\n<li><strong>Proyecto peque\u00f1o o personal<\/strong>: <code>npm install -g vlt<\/code> y probarlo cuesta cinco minutos; el lockfile distinto es lo \u00fanico que se queda en tu repo.<\/li>\n<\/ul>\n<h2>C\u00f3mo verificar la decisi\u00f3n por tu cuenta<\/h2>\n<p>Nada de creerle a un art\u00edculo, ni siquiera a este:<\/p>\n<ul>\n<li>Instala vlt en un proyecto real con <code>npm install -g vlt<\/code> y corre <code>vlt install<\/code> \u2014 compara con tu lockfile actual.<\/li>\n<li>Corre <code>vlt query<\/code> con un par de selectores de seguridad y mira qu\u00e9 encuentra en tu grafo <strong>hoy<\/strong>. Ese resultado es el argumento m\u00e1s honesto a favor o en contra.<\/li>\n<li>Mide el tiempo de instalaci\u00f3n contra el de tu gestor actual en tu m\u00e1quina, no en benchmarks.<\/li>\n<\/ul>\n<p>Fuente: el <a href=\"https:\/\/www.infoq.com\/news\/2026\/09\/vlt-npm-replacement\/\" target=\"_blank\" rel=\"noopener\">anuncio de vlt 1.0 en InfoQ<\/a>, con los detalles de las instalaciones por fases, las consultas de grafo y el contexto del resto del ecosistema.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>vlt 1.0 es el gestor de paquetes de los creadores originales de npm: descarga sin ejecutar nada, bloquea malware conocido y consulta el grafo de dependencias. C\u00f3mo migrar y cu\u00e1ndo conviene.<\/p>\n","protected":false},"author":2,"featured_media":37,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[10,14,15],"class_list":["post-21","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-herramientas","tag-javascript","tag-npm","tag-seguridad"],"_links":{"self":[{"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":1,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":30,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/posts\/21\/revisions\/30"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/media\/37"}],"wp:attachment":[{"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/desarrollosms.com\/index.php\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}