PackVault is an offline-first package caching and distribution CLI for JavaScript developers. It downloads npm package tarballs once, stores them in a durable local vault, installs from that cache without internet access, and can expose the cache to other machines on your LAN.
- Sync npm metadata and tarballs into
~/.packvault/cache - Install cached packages into
node_moduleswithout internet access - Create offline starter projects from local templates
- Sync curated bundles for frontend, backend, and full-stack work
- Run a local package registry server for LAN sharing
- Connect to another PackVault node and import missing tarballs
- Track package, bundle, and peer metadata in SQLite
After PackVault is published to npm:
npm install -g packvaultInstall directly from this GitHub repository:
npm install -g github:Demon-Die/PackVaultFor local development:
npm install
npm run build
npm linknpm install -g packvault
packvault bundle frontend
packvault create react my-app --install
cd my-appTo prepare broad framework support before going offline:
packvault bundle frameworksTo share your cached packages on the same Wi-Fi/LAN:
packvault shareAnother machine can import your cached packages:
packvault connect <your-ip>Create an offline starter app with a Vite-style wizard:
packvault createExample wizard:
Project name (my-packvault-app):
Select a framework
1. React
2. Vue
3. Svelte
4. Solid
5. Preact
6. Qwik
7. Angular
8. Next.js
9. Nuxt
10. SvelteKit
11. Astro
12. Remix
13. Express API
14. Fastify API
15. NestJS API
16. Node.js
Choose a number: 1
Select a variant
1. TypeScript + Vite
2. JavaScript + Vite
Choose a number: 1
You can also pass the project name first:
packvault create my-appOr start directly with a framework:
packvault create react
packvault create react my-react-app
packvault create vue my-vue-app
packvault create svelte my-svelte-app
packvault create next web-app
packvault create astro docs-site
packvault create fastify api-serverOr skip the wizard by choosing a template directly:
packvault create react-vite my-app
packvault create react-vite-js my-js-app
packvault create vue-vite vue-app
packvault create svelte-vite svelte-app
packvault create solid-vite solid-app
packvault create preact-vite preact-app
packvault create qwik qwik-app
packvault create angular angular-app
packvault create nextjs web-app
packvault create nuxt nuxt-app
packvault create sveltekit sveltekit-app
packvault create astro astro-site
packvault create remix remix-app
packvault create express-api api-server
packvault create fastify-api fast-api
packvault create nest-api nest-api
packvault create node-ts workerCache packages once while online:
packvault sync react vite tailwindcsssync also caches runtime dependencies by default. Use --no-dependencies to cache only the requested package tarballs.
Install later without internet:
packvault install react
packvault install vite
packvault install tailwindcssCache a full bundle while online:
packvault bundle frontend
packvault bundle frameworksThen install cached packages offline:
packvault install react
packvault install viteCheck what is available offline:
packvault doctorCreate and install cached template dependencies in one step:
packvault create react my-app --installpackvault sync react vite tailwindcss
packvault install react
packvault create react-app my-app
packvault doctor
packvault bundle frontend
packvault serve
packvault share
packvault connect 192.168.1.25PackVault stores durable state under:
~/.packvault/
cache/
templates/
bundles/
database/
exports/
Downloads package metadata from the npm registry, resolves requested versions, downloads tarballs, stores them locally, and records metadata in SQLite.
Package specs can be plain names or exact versions:
packvault sync react vite@latest express@4.18.3Installs a cached package and its cached runtime dependency tree into the current project's node_modules. This command does not require internet access.
packvault install react
packvault install express --version 4.18.3Creates a project from a local template and replaces __PROJECT_NAME__ tokens.
Use --install to install cached dependencies from the generated template's package.json.
Available templates:
react-vitereact-vite-jsreact-appalias forreact-vitevue-vitevue-vite-jssvelte-vitesvelte-vite-jssolid-vitesolid-vite-jspreact-vitepreact-vite-jsqwikangularnextjsnuxtsveltekitastroremixexpress-apifastify-apinest-apinode-ts
Reports vault health, cached package count, storage usage, and bundle coverage.
Example:
React Cached
Vite Cached
Nextjs Missing
Packages: 2
Storage: 14 MB
Vault Health: 80%
Syncs a predefined bundle.
frontend: react, react-dom, vite, tailwindcss, eslint, prettierbackend: express, prisma, dotenvfullstack: react, vite, express, prismaframeworks: popular frontend, meta-framework, and API framework packages
Starts a local Express registry server on port 4873 by default and prints local LAN addresses.
packvault serve --port 4873Shares your cached packages with nearby machines on the same Wi-Fi/LAN. This does not require internet access after packages are cached.
On the machine with cached packages:
packvault shareOn another machine connected to the same LAN:
packvault connect <your-ip>You can also point npm at the PackVault server for cached package metadata:
npm install react --registry http://localhost:4873Connects to another PackVault server, lists available cached packages, downloads missing tarballs, and records the peer.
packvault connect 192.168.1.25 --port 4873CREATE TABLE packages (
name TEXT NOT NULL,
version TEXT NOT NULL,
size INTEGER NOT NULL,
cache_path TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (name, version)
);
CREATE TABLE bundles (
name TEXT PRIMARY KEY,
packages TEXT NOT NULL
);
CREATE TABLE peers (
ip TEXT PRIMARY KEY,
hostname TEXT NOT NULL,
last_seen TEXT NOT NULL
);See docs/ARCHITECTURE.md.
See docs/ROADMAP.md.