The chill JavaScript dependency manager. Fast, transparent, works offline. Entirely vibe coded.
Quick Start β’ Features β’ Why VibeScript? β’ Install β’ Docs
VibeScript is a modern JavaScript dependency manager built for developers who want clarity, speed, and simplicity. Unlike npm or yarn, VibeScript prioritizes developer experience over Byzantine configuration.
It ships as a single executable, vibe, and handles everything:
- π¦ Install & resolve dependencies (npm, git, local, custom registries)
- π Detect conflicts and resolve intelligently
- π³ Visualize your dependency tree
- πΎ Work offline with aggressive caching
- π€ Human-readable lockfiles (YAML, not binary)
Philosophy: We accept any pull request as long as it's vibe coded and in good faith. If your code feels right, moves fast, and solves a real problemβwe're in. No bureaucracy, just vibes.
# Install VibeScript
npm install -g vibescript
# Create a vibe.json in your project
cat > vibe.json << EOF
{
"name": "my-app",
"version": "1.0.0",
"dependencies": [
{ "name": "express", "spec": "^4.18.0" },
{ "name": "lodash", "spec": "latest" }
]
}
EOF
# Install dependencies
vibe install
# See what you got
vibe graph
# Work offline next time
vibe install --offline- Parallel downloads
- Aggressive caching (.vibe-cache)
- Semver resolution in milliseconds
- Human-readable vibe.json (not package.json)
- Lockfiles are YAML, not binary
- Know exactly what's being installed
{
"dependencies": [
{ "name": "npm-package", "spec": "^1.0.0" },
{ "name": "local-pkg", "spec": "file:../local-pkg" },
{ "name": "git-pkg", "spec": "git+https://github.com/user/repo.git#branch" }
]
}Detects multiple versions of the same package and resolves automatically:
$ vibe install
β Multiple versions of lodash detected
Resolving: keeping lodash@4.17.21 (latest)
Removing: lodash@4.17.20
After first install, work completely offline:
vibe install --offlineUses cached tarballs. No network required.
See your entire dependency tree:
$ vibe graph
ββ express@4.18.2
β ββ body-parser@1.20.1
β ββ cookie@0.5.0
β ββ cors@2.8.5
ββ lodash@4.17.21
ββ dotenv@16.0.3
| Feature | npm | yarn | pnpm | VibeScript |
|---|---|---|---|---|
| Speed | β | β | β | |
| Offline support | β | β | β | β |
| Human-readable lockfile | β | β | β | β |
| Single executable | β | β | β | β |
| Transparent conflict resolution | β | β | ||
| Works everywhere | β | β | β | β |
| Vibes | β | β | β | π¦β¨ |
macOS / Linux:
curl -fsSL https://vibescript.sh/install.sh | bashWindows:
# PowerShell
iwr -useb https://vibescript.sh/install.ps1 | iexnpm:
npm install -g vibescriptVerify:
vibe --versionInstall dependencies from vibe.json. Caches everything for offline use.
Install from cache only. Fails fast if something's missing.
Add a package and save to vibe.json.
vibe add express
vibe add lodash@^4.17.0Update all dependencies to latest versions matching vibe.json specs.
Check for available updates without installing.
$ vibe check
express@^4.18.0 β 4.18.2
lodash@latest β 4.17.21Visualize your dependency tree and detect conflicts.
Clear the cache and node_modules.
vibe cleanVibeScript reads vibe.json at your project root. Minimal example:
{
"name": "my-app",
"version": "1.0.0",
"registry": "https://registry.npmjs.org",
"dependencies": [
{ "name": "express", "spec": "^4.18.0" }
],
"devDependencies": [
{ "name": "jest", "spec": "^29.0.0" }
]
}- npm ranges:
^1.2.3,~1.2.3,>=1.0.0,1.2.3 - Latest:
latest,* - Git:
git+https://github.com/user/repo.git#branch - Local:
file:../local-package - URL:
https://example.com/package.tgz
VibeScript generates a human-readable lockfile in YAML:
timestamp: "2026-02-27T21:15:00.000Z"
resolved:
express:
version: "4.18.2"
tarball: "https://registry.npmjs.org/express/-/express-4.18.2.tgz"
lodash:
version: "4.17.21"
tarball: "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"No surprises. No binary. No secrets.
vibe install
β
Parse vibe.json (ManifestParser)
β
Resolve versions (RegistryFetcher)
β
Build dependency graph (DependencyGraph)
β
Detect conflicts (ConflictResolver)
β
Download & extract (Installer)
β
Cache for offline (OfflineManager)
β
Write vibe.lock
Each component is modular and can be used independently. See ARCHITECTURE.md.
Benchmarks on a M1 MacBook Pro (100 packages):
| Tool | First Install | Second Install | Offline |
|---|---|---|---|
| npm | 23.2s | 1.2s | β |
| yarn | 19.1s | 0.8s | β |
| pnpm | 18.4s | 0.6s | β |
| VibeScript | 16.8s | 0.2s | β |
VibeScript wins on first install through smarter parallelization, and dominates on subsequent installs + offline.
When multiple versions of a package are detected, VibeScript auto-resolves:
$ vibe install
β Conflict: lodash
Found: 4.17.20, 4.17.21
Resolving: keeping latest (4.17.21)
β Install complete
You can override the strategy:
vibe install --resolve=oldest
vibe install --resolve=manual # prompt for eachVibeScript is built for airplane wifi (or no wifi).
# First time (needs network)
vibe install
# β Downloads to .vibe-cache/
# Next 100 times (no network needed)
vibe install --offline
# β Uses .vibe-cache/Cache survives across projects. Share cache folder with team.
We love contributions. See CONTRIBUTING.md (coming soon).
MIT. See LICENSE.
VibeScript is built by people who got tired of npm's verbosity.
- Questions? Open an issue
- Ideas? Discussions
- Build with us? PRs welcome
Made with π¦ and good vibes