Skip to content

Latest commit

 

History

49 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vine

A minimalist, transparent, decentralized package manager for Windows — and a language for describing installations.

Vine is not another winget/scoop/chocolatey. A Vine package is a plain-text .vine file: an ordered list of English-word instructions (download, extract, add_path, ...) that anyone can read and audit. There are no binaries to compile, no tarballs to unpack — a package is a text file, and a source is just a folder (a git repo, planned) full of them.

  • Readable: every line is a self-explanatory command. No braces, no symbols, no hidden logic.
  • Decentralized: anyone can host a source. vine source add myrepo D:\myrepo and you're in business. No central index, no accounts.
  • Atomic: packages install into versioned directories (packages\<name>-<version>-<hash>); a failed install or upgrade rolls back automatically, and the old version stays intact.
  • Self-contained: each package saves a copy of its own .vine script into its install directory, so uninstall always uses the logic of the exact installed version.
  • AI-friendly: the language is simple enough that AI can write and maintain packages in bulk.

Quick start

# 1. Build (a single zero-dependency executable, needs MinGW g++ or similar)
g++ -std=c++17 -Wall src/main.cpp src/exec.cpp src/core.cpp src/inventory.cpp src/source.cpp src/install.cpp src/json.cpp -o build/vine.exe

# 2. Add a source (a folder containing .vine files + manifest.json)
vine source add demo D:\vine\test_repo

# 3. Refresh the local cache
vine update

# 4. Find and install something
vine search node
vine install nodejs

# 5. See what's installed
vine inventory

That's the whole loop. vine remove nodejs uninstalls; vine upgrade updates everything (after vine update).

Commands

vine install <pkg>               Install a package
vine remove <pkg>                Remove a package
vine upgrade [pkg]               Upgrade one package, or all without an argument
vine search <query>              Search packages in cached sources
vine source add <name> <path>    Add a folder source
vine source remove <name>        Remove a source
vine source list                 List sources
vine update                      Refresh all source caches
vine inventory                   List installed packages
vine <block_name> <file_path>    Execute one block of a script directly

The language in 30 seconds

name 7zip-portable
version 24.08

block install
mkdir $install_dir
download https://www.7-zip.org/a/7z2408-x64.zip $install_dir\7z.zip
check $install_dir\7z.zip 57f71ab3652e797d84acddc79c81cc9ff1c6ddb2a1974cdb83f00fee9bff4c73
extract $install_dir\7z.zip $install_dir
add_path $install_dir
end_block

block remove
rm_path $install_dir
del_dir $install_dir
end_block
  • One instruction per line; # starts a comment; "..." is a string; no escaping, no nesting, no symbols.
  • block <name> ... end_block [name] groups instructions for install, upgrade, remove.
  • $name substitutes variables; the manager injects $root, $install_dir, $pkg_name and (during upgrades) $old_dir.
  • install_dir <path> as a metadata line forces a fixed installation path instead of a versioned directory.

The complete language reference is in SPEC.md — the formal, implementation-independent specification (including the source format, the state-file schemas, and the atomicity guarantees).

Where things live

%USERPROFILE%\.vine\            (override with the VINE_ROOT env var)
  config.json                   your sources
  inventory.json                installed packages + file lists + PATH entries
  sources\<name>\               cached copies of sources
  packages\<name>-<version>-<hash>\   installed packages (versioned by content)

All state files are indented, human-readable JSON. Uninstalling a package deletes its inventory files list and PATH entries even if its remove script is imperfect.

Examples

test_repo/ is a working source with real packages (Node.js LTS, ripgrep) plus a test package. smp/ contains standalone example scripts.

Testing

The conformance suite lives in test/ — 56 checks covering every instruction, error codes, UTF-8, and the full install/upgrade/rollback/remove lifecycle:

pwsh test\run_tests.ps1

Per the spec, any Vine executor should pass this suite unchanged.

License

vine.exe executor: GPLv3 (see LICENSE). The Vine specification (SPEC.md) and example scripts: CC0 — copy, modify, redistribute freely.


Vine belongs to everyone who wants "simple installation". Contact: 2796442619@qq.com · GitHub: Zzc0595

About

Kind of brilliant Windows Software Package Management DSL

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages