{
  "$type": "site.standard.document",
  "description": "Creating bundles for air-gapped deployments just got a bit fancier.",
  "path": "/writing/releasing-packy-v2",
  "publishedAt": "2026-04-10T00:00:00.000Z",
  "site": "at://did:plc:m25hu5wadnbqnt47zep7xza6/site.standard.publication/self",
  "textContent": "import { Image } from \"astro:assets\";\nimport PackyScreenshot from \"assets/images/packy-screenshot.png\";\nimport PackySpritesheet from \"assets/images/packy-spritesheet.png\";\n\n[packy.js.org](https://packy.js.org) | [repository](https://github.com/t128n/packy)\n\n**packy** is a web-based wrapper around `npm pack` for creating standalone dependency bundles that can be used for air-gapped deployments.\n\n<Image src={PackyScreenshot} format=\"webp\" alt=\"Screenshot of packy.js.org.\" />\n\nIt is a full rewrite of the original core logic, mostly done by [GPT-5.4-mini](https://openai.com/de-DE/index/introducing-gpt-5-4-mini-and-nano/) using\n[opencode](https://opencode.ai/). Whereas this may sound like a `Refactor packy to use xzy` type of situation, substantial steering was required to achieve a satisfactory result.\nIt now features a new UI (mostly powered by [Nuxt UI](https://ui.nuxt.com/)) as well as links to [npmx](https://npmx.dev/),\n[node-modules.dev](https://node-modules.dev/) and [pkg-size.dev](https://pkg-size.dev/) in the package selection. When used correctly, LLMs can be a major\naid in the software development cycle. However when the LLM user lacks experience or guidance, he might experience the fate of the [sorcerer's apprentice](https://www.babelmatrix.org/works/de/Goethe,_Johann_Wolfgang_von/Der_Zauberlehrling/en/5462-The_Sorcerer_s_Apprentice).\n\nOne thing that really surprised me was [Claude Sonnet 4.6's](https://www.anthropic.com/news/claude-sonnet-4-6) capability to generate SVG mascots[^1].\n\n<Image\n\tsrc={PackySpritesheet}\n\tformat=\"webp\"\n\talt=\"Spritesheet of different packy states\"\n/>\n\nI expected some mediocre results, sufficient to not bother the user, but the results were genuinely satisfactory.\nThe different states of packy are used to visualize the various WebContainer runtime states in a playful manner.\nThe sleeping state, for example, is shown when the WebContainer is shut down; the sad state is shown when the WebContainer encounters an error.\n\nAnyway, if you run into a case where you need to deploy npm packages to an air-gapped environment, feel free to try [packy](https://packy.js.org)\nand leave some feedback either on [GitHub](https://t128n.dev/go/gh) or [Bluesky](https://t128n.dev/go/bsky)\n\n[^1]: https://claude.ai/share/996c3484-ec89-4df5-8337-0b1e38729667",
  "title": "Releasing packy v2"
}