kosha कोश
package manager

kosha

कोश · “treasury”

The package manager for Vayu's tools: install, update, pin and remove them with one command.

v0.3.0 latest3 releases7 decisions recordedMIT license

Kosha (कोश) is Sanskrit for "treasury, storehouse": where all the tools are kept.

Vayu's tools each live in their own repository: the Vyom panels and their fourteen tools, nāda, anumati, sangam, and whatever comes next. That keeps each one independent, but leaves you with many clones to keep track of. kosha does it for you: it knows where each tool goes, installs its newest release, installs what it depends on first, checks for updates in one go, shows the changelog when it updates, and lets you pin a version or work on a tool from your own checkout.

#Features

#Install

curl -fsSL https://raw.githubusercontent.com/Theyashsawarkar/kosha/main/install.sh | bash

It clones kosha into ~/.local/share/kosha, links ~/.local/bin/kosha, and needs no root. Or by hand:

git clone https://github.com/Theyashsawarkar/kosha ~/.local/share/kosha
ln -s ~/.local/share/kosha/bin/kosha ~/.local/bin/kosha
kosha install kosha          # kosha manages itself from now on

Then install what you want, e.g. the launcher, the calculator and the music player:

kosha install dvara ganit nada

#Usage

kosha help shows every command, grouped, with examples; kosha help <command> (or kosha <command> --help) explains one. A typo gets a suggestion.

kosha help [<command>]                 every command, or one in detail
kosha list [--installed] [--json]      packages: installed version, newest release
kosha search <words>                   find packages by name or description
kosha info <pkg>                       details, where it lives, what it needs
kosha install <pkg>[@version] ...      install (newest release, or a pinned one) with its dependencies
kosha update [<pkg> ...] [--force]     update to the newest release (everything, without names)
kosha outdated [--json]                what has a newer release
kosha remove <pkg> ...                 uninstall
kosha pin <pkg> | unpin <pkg>          keep a package on its version / let it update again
kosha link <pkg> <path> | unlink <pkg> use a development checkout in place of the release
kosha changelog <pkg> [<from>]         what changed (since a version)
kosha doctor                           check every installed package
kosha refresh                          download the newest package list
kosha self-update                      update kosha itself
kosha completions zsh|bash             tab completion for commands and packages

Options: -y/--yes (don't ask), -v/--verbose (every step and git command), -q/--quiet, -r/--refresh (ask GitHub now),
         --json (list, outdated), --no-color (or NO_COLOR=1)

Every step shows a live row per package (what it's doing now, then its result and time). Install, update and remove check each package, show a table of what will happen, and ask before doing it:

$ kosha update
━━ Upgrading ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
╭─────────┬───────────┬───┬────────┬───────────╮
│ Package │ Installed │   │ New    │ Kind      │
├─────────┼───────────┼───┼────────┼───────────┤
│ dvara   │ v0.1.3    │ → │ v0.1.5 │ vyom tool │
│ ganit   │ v0.1.2    │ → │ v0.1.4 │ vyom tool │
╰─────────┴───────────┴───┴────────┴───────────╯
Summary:  Upgrade 2
? Do you want to continue? [Y/n]
━━ Downloading ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2 packages
✓ dvara  downloaded
✓ ganit  downloaded
✓ dvara v0.1.3 → v0.1.5
✓ ganit v0.1.2 → v0.1.4
━━ What's new in dvara ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
v0.1.5 -- 2026-10-21
  - A website (GitHub Pages): the README as a home page, the changelog…
━━ 2 upgraded in 2.1s

Tab completion, for zsh (with oh-my-zsh or compinit):

source <(kosha completions zsh)        # in ~/.zshrc
$ kosha list --installed
package  installed  latest  kind         status
nada     v0.1.1     v0.1.1  app          up to date
vyom     v0.2.8     v0.2.8  vyom         up to date
ganit    v0.1.2     v0.1.4  vyom-tool    pinned
dvara    v0.1.5     v0.1.5  vyom-tool    linked (dev)

Exit codes: 0 success, 1 something failed (each failure is printed), 2 a usage error.

#Packages

kosha list and kosha search show the current list. Today:

PackageKindWhat it is
vyomruntimekeyboard-driven panels for Wayland
dvara, ganit, smriti, bhava, tarang, setu, doot, patra, suchana, raga, mudra, urja, vishram, kendraVyom toolsapps, calculator, clipboard, emoji, Wi‑Fi, Bluetooth, phone, Docker, notifications, YouTube, keybindings, battery, power menu, quick settings
nadaappmusic player: your files and YouTube, lyrics, autoplay
anumatiapproot commands for AI agents, with your approval
sangamtmux pluginreview and merge pull requests in the terminal
koshaappthis package manager

Where each kind installs:

KindFolderCommand linked
vyom~/.local/share/vyom/core~/.local/bin/vyom
vyom-tool~/.local/share/vyom/plugins/<name>none (Vyom loads it; kosha runs vyom reload)
app~/.local/share/<name>~/.local/bin/<name>
tmux-plugin~/.tmux/plugins/<name> (where TPM looks)~/.local/bin/<name> if it has one

#How it works

The design decisions, with their reasons, are on the website.

#Adding a package

A pull request adding a table to registry.toml:

[packages.mytool]
repo = "you/mytool"            # GitHub owner/name, or a full git URL
kind = "vyom-tool"             # vyom | vyom-tool | app | tmux-plugin
description = "One line: what it is"
requires = ["vyom"]            # other kosha packages
commands = ["qalc"]            # programs it needs on PATH
arch = ["libqalculate"]        # Arch packages that provide them
post = "./install.sh"          # optional: run after install and update

The repository needs release tags (v1.2.3) and a CHANGELOG.md with one ## v1.2.3 section per release, which kosha update prints. CI checks the registry is valid.

#Troubleshooting

#Contributing

Bug reports, ideas and pull requests are welcome: see CONTRIBUTING.md, and CHANGELOG.md for what changed in each release. New packages are pull requests to the registry.

#License

MIT